24
24
import org .apache .seata .common .XID ;
25
25
import org .apache .seata .common .thread .NamedThreadFactory ;
26
26
import org .apache .seata .common .util .NetUtil ;
27
+ import org .apache .seata .server .ParameterParser ;
27
28
import org .apache .seata .server .UUIDGenerator ;
28
29
import org .slf4j .Logger ;
29
30
import org .slf4j .LoggerFactory ;
@@ -41,39 +42,62 @@ public class MockServer {
41
42
private static ThreadPoolExecutor workingThreads ;
42
43
private static MockNettyRemotingServer nettyRemotingServer ;
43
44
45
+ private static volatile boolean inited = false ;
46
+
47
+ public static final int DEFAULT_PORT = 8091 ;
48
+
44
49
/**
45
50
* The entry point of application.
46
51
*
47
52
* @param args the input arguments
48
53
*/
49
54
public static void main (String [] args ) {
50
55
SpringApplication .run (MockServer .class , args );
51
- start ();
56
+
57
+ ParameterParser parameterParser = new ParameterParser (args );
58
+ int port = parameterParser .getPort () > 0 ? parameterParser .getPort () : DEFAULT_PORT ;
59
+ start (port );
52
60
}
53
61
54
- public static void start () {
55
- workingThreads = new ThreadPoolExecutor (50 ,
56
- 50 , 500 , TimeUnit .SECONDS ,
57
- new LinkedBlockingQueue <>(20000 ),
58
- new NamedThreadFactory ("ServerHandlerThread" , 500 ), new ThreadPoolExecutor .CallerRunsPolicy ());
59
- nettyRemotingServer = new MockNettyRemotingServer (workingThreads );
60
-
61
- // set registry
62
- XID .setIpAddress (NetUtil .getLocalIp ());
63
- XID .setPort (8092 );
64
- // init snowflake for transactionId, branchId
65
- UUIDGenerator .init (1L );
66
-
67
- MockCoordinator coordinator = MockCoordinator .getInstance ();
68
- coordinator .setRemotingServer (nettyRemotingServer );
69
- nettyRemotingServer .setHandler (coordinator );
70
- nettyRemotingServer .init ();
71
-
72
- LOGGER .info ("pid info: " + ManagementFactory .getRuntimeMXBean ().getName ());
62
+ public static void start (int port ) {
63
+ if (!inited ) {
64
+ synchronized (MockServer .class ) {
65
+ if (!inited ) {
66
+ inited = true ;
67
+ workingThreads = new ThreadPoolExecutor (50 ,
68
+ 50 , 500 , TimeUnit .SECONDS ,
69
+ new LinkedBlockingQueue <>(20000 ),
70
+ new NamedThreadFactory ("ServerHandlerThread" , 500 ), new ThreadPoolExecutor .CallerRunsPolicy ());
71
+ nettyRemotingServer = new MockNettyRemotingServer (workingThreads );
72
+
73
+ // set registry
74
+ XID .setIpAddress (NetUtil .getLocalIp ());
75
+ XID .setPort (port );
76
+ // init snowflake for transactionId, branchId
77
+ UUIDGenerator .init (1L );
78
+
79
+ MockCoordinator coordinator = MockCoordinator .getInstance ();
80
+ coordinator .setRemotingServer (nettyRemotingServer );
81
+ nettyRemotingServer .setHandler (coordinator );
82
+ nettyRemotingServer .init ();
83
+
84
+ LOGGER .info ("pid info: " + ManagementFactory .getRuntimeMXBean ().getName ());
85
+ }
86
+ }
87
+ }
88
+
89
+
73
90
}
74
91
75
92
public static void close () {
76
- workingThreads .shutdown ();
77
- nettyRemotingServer .destroy ();
93
+ if (inited ) {
94
+ synchronized (MockServer .class ) {
95
+ if (inited ) {
96
+ inited = false ;
97
+ workingThreads .shutdown ();
98
+ nettyRemotingServer .destroy ();
99
+ }
100
+ }
101
+ }
78
102
}
79
103
}
0 commit comments