diff --git a/pjcloud-app-server/pjcloud-app-server-biz/pom.xml b/pjcloud-app-server/pjcloud-app-server-biz/pom.xml
index b09ae739..6788632a 100644
--- a/pjcloud-app-server/pjcloud-app-server-biz/pom.xml
+++ b/pjcloud-app-server/pjcloud-app-server-biz/pom.xml
@@ -95,6 +95,12 @@
com.bsd
pjcloud-common-swagger
+
+
+ com.bsd
+ pjcloud-common-seata
+
+
diff --git a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppUserAutoLoginController.java b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppUserAutoLoginController.java
index a214176f..b8c0bfb8 100644
--- a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppUserAutoLoginController.java
+++ b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppUserAutoLoginController.java
@@ -35,10 +35,12 @@ import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
+import org.apache.seata.spring.annotation.GlobalTransactional;
import org.springframework.http.HttpHeaders;
import org.springframework.security.oauth2.core.OAuth2AccessToken;
import org.springframework.security.oauth2.core.OAuth2RefreshToken;
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2AccessTokenAuthenticationToken;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
@@ -76,6 +78,8 @@ public class AppUserAutoLoginController {
@GetMapping("/zzdsso/{token}")
@Operation(summary = "浙政钉单点登录")
@Inner(value = false)
+ @GlobalTransactional
+ @Transactional(rollbackFor = Exception.class)
//todo 引入seata分布式事务
public R zzdsso(@PathVariable(name = "token") String token) {
diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/pom.xml b/pjcloud-thirdparty/pjcloud-thirdparty-biz/pom.xml
index 87b707a6..ddcd9854 100644
--- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/pom.xml
+++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/pom.xml
@@ -94,6 +94,11 @@
org.springframework.boot
spring-boot-starter-test
+
+
+ com.bsd
+ pjcloud-common-seata
+
diff --git a/pjcloud-upms/pjcloud-upms-biz/pom.xml b/pjcloud-upms/pjcloud-upms-biz/pom.xml
index dec2c48b..086b9dc7 100644
--- a/pjcloud-upms/pjcloud-upms-biz/pom.xml
+++ b/pjcloud-upms/pjcloud-upms-biz/pom.xml
@@ -184,6 +184,12 @@
org.springframework.boot
spring-boot-starter-undertow
+
+
+ com.bsd
+ pjcloud-common-seata
+
+
diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java
index 3be75666..8b932e3d 100644
--- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java
+++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java
@@ -44,6 +44,7 @@ import jakarta.validation.Valid;
import lombok.AllArgsConstructor;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.http.HttpHeaders;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
@@ -326,7 +327,9 @@ public class SysUserController {
@GetMapping("/getUserByMobile")
@Inner
+ @Transactional(rollbackFor = Exception.class)
public R> getUserByMobile(@RequestParam("mobile") String mobile) {
+ int i=8/0;
return R.ok(userService.list(Wrappers.lambdaQuery().eq(SysUser::getPhone, mobile)));
}
}
diff --git a/seata/Dockerfile b/seata/Dockerfile
new file mode 100644
index 00000000..5e7f19dc
--- /dev/null
+++ b/seata/Dockerfile
@@ -0,0 +1,43 @@
+# Copyright 1999-2019 Seata.io Group.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# the Dockerfile support x86 & arrch64
+# build:
+# 1. mvn -Prelease-seata -Dmaven.test.skip=true clean install -U
+# 2. cd distribution/target/seata-server-xxx/seata/
+# 3. docker build --no-cache --build-arg SEATA_VERSION=1.6.0-SNAPSHOT -t seata-server:1.6.0-dev .
+#
+# run:
+# 1. docker run --name=seata-server -d seata-server:1.6.0-dev
+#
+# https://hub.docker.com/orgs/seataio
+FROM openjdk:8u342
+
+# set label
+LABEL maintainer="Seata "
+
+WORKDIR /$BASE_DIR
+
+# ADD FORM distribution
+ADD bin/ /seata-server/bin
+ADD ext/ /seata-server/ext
+ADD target/ /seata-server/target
+ADD lib/ /seata-server/lib
+ADD conf/ /seata-server/conf
+ADD LICENSE /seata-server/LICENSE
+
+# set extra environment
+ENV LOADER_PATH="/seata-server/lib"
+ENV TZ="Asia/Shanghai"
+CMD ["bash","-c","/seata-server/bin/seata-server.sh && tail -f /dev/null"]
diff --git a/seata/LICENSE b/seata/LICENSE
new file mode 100644
index 00000000..f1b55a14
--- /dev/null
+++ b/seata/LICENSE
@@ -0,0 +1,218 @@
+ Apache License
+ Version 2.0, January 2004
+ https://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (properties) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+=======================================================================
+Seata Subcomponents:
+
+The Seata project contains subcomponents with separate copyright
+notices and license terms. Your use of the source code for the these
+subcomponents is subject to the terms and conditions of the following
+licenses.
+
+========================================================================
+Apache 2.0 licenses
+========================================================================
+
+The following components are provided under the Apache License. See project link for details.
+The text of each license is the standard Apache 2.0 license.
+
+ Apache: skywalking 8.4.0: https://github.com/apache/skywalking, Apache 2.0
\ No newline at end of file
diff --git a/seata/conf/application.example.yml b/seata/conf/application.example.yml
new file mode 100644
index 00000000..58c6c118
--- /dev/null
+++ b/seata/conf/application.example.yml
@@ -0,0 +1,213 @@
+# Copyright 1999-2019 Seata.io Group.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+server:
+ port: 7091
+
+spring:
+ application:
+ name: seata-server
+
+logging:
+ config: classpath:logback-spring.xml
+ file:
+ path: ${log.home:${user.home}/logs/seata}
+ extend:
+ logstash-appender:
+ destination: 127.0.0.1:4560
+ kafka-appender:
+ bootstrap-servers: 127.0.0.1:9092
+ topic: logback_to_logstash
+
+seata:
+ config:
+ # support: nacos 、 consul 、 apollo 、 zk 、 etcd3
+ type: file
+ nacos:
+ server-addr: 127.0.0.1:8848
+ namespace:
+ group: SEATA_GROUP
+ username:
+ password:
+ context-path:
+ ##if use MSE Nacos with auth, mutex with username/password attribute
+ #access-key:
+ #secret-key:
+ data-id: seataServer.properties
+ consul:
+ server-addr: 127.0.0.1:8500
+ acl-token:
+ key: seata.properties
+ apollo:
+ appId: seata-server
+ apollo-meta: http://192.168.1.204:8801
+ apollo-config-service: http://192.168.1.204:8080
+ namespace: application
+ apollo-access-key-secret:
+ cluster: seata
+ zk:
+ server-addr: 127.0.0.1:2181
+ session-timeout: 6000
+ connect-timeout: 2000
+ username:
+ password:
+ node-path: /seata/seata.properties
+ etcd3:
+ server-addr: http://localhost:2379
+ key: seata.properties
+ registry:
+ # support: nacos 、 eureka 、 redis 、 zk 、 consul 、 etcd3 、 sofa
+ type: file
+ preferred-networks: 30.240.*
+ nacos:
+ application: seata-server
+ server-addr: 127.0.0.1:8848
+ group: SEATA_GROUP
+ namespace:
+ cluster: default
+ username:
+ password:
+ context-path:
+ ##if use MSE Nacos with auth, mutex with username/password attribute
+ #access-key:
+ #secret-key:
+ eureka:
+ service-url: http://localhost:8761/eureka
+ application: default
+ weight: 1
+ redis:
+ server-addr: localhost:6379
+ db: 0
+ password:
+ cluster: default
+ timeout: 0
+ zk:
+ cluster: default
+ server-addr: 127.0.0.1:2181
+ session-timeout: 6000
+ connect-timeout: 2000
+ username:
+ password:
+ consul:
+ cluster: default
+ server-addr: 127.0.0.1:8500
+ acl-token:
+ etcd3:
+ cluster: default
+ server-addr: http://localhost:2379
+ sofa:
+ server-addr: 127.0.0.1:9603
+ application: default
+ region: DEFAULT_ZONE
+ datacenter: DefaultDataCenter
+ cluster: default
+ group: SEATA_GROUP
+ address-wait-time: 3000
+
+ server:
+ raft:
+ group: default
+ cluster:
+ snapshot-interval: 600
+ apply-batch: 32
+ max-append-bufferSize: 262144
+ max-replicator-inflight-msgs: 256
+ disruptor-buffer-size: 16384
+ election-timeout-ms: 1000
+ reporter-enabled: false
+ reporter-initial-delay: 60
+ serialization: jackson
+ compressor: none
+ sync: true # sync log&snapshot to disk
+ service-port: 8091 #If not configured, the default is '${server.port} + 1000'
+ max-commit-retry-timeout: -1
+ max-rollback-retry-timeout: -1
+ rollback-retry-timeout-unlock-enable: false
+ enable-check-auth: true
+ enable-parallel-request-handle: true
+ enable-parallel-handle-branch: false
+ retry-dead-threshold: 130000
+ xaer-nota-retry-timeout: 60000
+ enableParallelRequestHandle: true
+ recovery:
+ committing-retry-period: 1000
+ async-committing-retry-period: 1000
+ rollbacking-retry-period: 1000
+ timeout-retry-period: 1000
+ undo:
+ log-save-days: 7
+ log-delete-period: 86400000
+ session:
+ branch-async-queue-size: 5000 #branch async remove queue size
+ enable-branch-async-remove: false #enable to asynchronous remove branchSession
+ store:
+ # support: file 、 db 、 redis 、 raft
+ mode: file
+ session:
+ mode: file
+ lock:
+ mode: file
+ file:
+ dir: sessionStore
+ max-branch-session-size: 16384
+ max-global-session-size: 512
+ file-write-buffer-cache-size: 16384
+ session-reload-read-size: 100
+ flush-disk-mode: async
+ db:
+ datasource: druid
+ db-type: mysql
+ driver-class-name: com.mysql.jdbc.Driver
+ url: jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true
+ user: mysql
+ password: mysql
+ min-conn: 10
+ max-conn: 100
+ global-table: global_table
+ branch-table: branch_table
+ lock-table: lock_table
+ distributed-lock-table: distributed_lock
+ query-limit: 1000
+ max-wait: 5000
+ redis:
+ mode: single
+ # support: lua 、 pipeline
+ type: lua
+ database: 0
+ min-conn: 10
+ max-conn: 100
+ password:
+ max-total: 100
+ query-limit: 1000
+ single:
+ host: 127.0.0.1
+ port: 6379
+ sentinel:
+ master-name:
+ sentinel-hosts:
+ sentinel-password:
+ metrics:
+ enabled: false
+ registry-type: compact
+ exporter-list: prometheus
+ exporter-prometheus-port: 9898
+ transport:
+ rpc-tc-request-timeout: 15000
+ enable-tc-server-batch-send-response: false
+ shutdown:
+ wait: 3
+ thread-factory:
+ boss-thread-prefix: NettyBoss
+ worker-thread-prefix: NettyServerNIOWorker
+ boss-thread-size: 1
diff --git a/seata/conf/application.raft.example.yml b/seata/conf/application.raft.example.yml
new file mode 100644
index 00000000..5d07b8b2
--- /dev/null
+++ b/seata/conf/application.raft.example.yml
@@ -0,0 +1,132 @@
+# Copyright 1999-2019 Seata.io Group.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+server:
+ port: 7091
+
+spring:
+ application:
+ name: seata-server
+
+logging:
+ config: classpath:logback-spring.xml
+ file:
+ path: ${log.home:${user.home}/logs/seata}
+ extend:
+ logstash-appender:
+ destination: 127.0.0.1:4560
+ kafka-appender:
+ bootstrap-servers: 127.0.0.1:9092
+ topic: logback_to_logstash
+
+seata:
+ config:
+ # support: nacos 、 consul 、 apollo 、 zk 、 etcd3
+ type: file
+ nacos:
+ server-addr: 127.0.0.1:8848
+ namespace:
+ group: SEATA_GROUP
+ username:
+ password:
+ context-path:
+ ##if use MSE Nacos with auth, mutex with username/password attribute
+ #access-key:
+ #secret-key:
+ data-id: seataServer.properties
+ consul:
+ server-addr: 127.0.0.1:8500
+ acl-token:
+ key: seata.properties
+ apollo:
+ appId: seata-server
+ apollo-meta: http://192.168.1.204:8801
+ apollo-config-service: http://192.168.1.204:8080
+ namespace: application
+ apollo-access-key-secret:
+ cluster: seata
+ zk:
+ server-addr: 127.0.0.1:2181
+ session-timeout: 6000
+ connect-timeout: 2000
+ username:
+ password:
+ node-path: /seata/seata.properties
+ etcd3:
+ server-addr: http://localhost:2379
+ key: seata.properties
+ registry:
+ # support: nacos 、 eureka 、 redis 、 zk 、 consul 、 etcd3 、 sofa
+ type: file
+ preferred-networks: 30.240.*
+ server:
+ raft:
+ group: default
+ server-addr:
+ snapshot-interval: 600
+ apply-batch: 32
+ max-append-bufferSize: 262144
+ max-replicator-inflight-msgs: 256
+ disruptor-buffer-size: 16384
+ election-timeout-ms: 1000
+ reporter-enabled: false
+ reporter-initial-delay: 60
+ serialization: jackson
+ compressor: none
+ sync: true # sync log&snapshot to disk
+ service-port: 8091 #If not configured, the default is '${server.port} + 1000'
+ max-commit-retry-timeout: -1
+ max-rollback-retry-timeout: -1
+ rollback-retry-timeout-unlock-enable: false
+ enable-check-auth: true
+ enable-parallel-request-handle: true
+ enable-parallel-handle-branch: false
+ retry-dead-threshold: 130000
+ xaer-nota-retry-timeout: 60000
+ enableParallelRequestHandle: true
+ recovery:
+ committing-retry-period: 1000
+ async-committing-retry-period: 1000
+ rollbacking-retry-period: 1000
+ timeout-retry-period: 1000
+ undo:
+ log-save-days: 7
+ log-delete-period: 86400000
+ session:
+ branch-async-queue-size: 5000 #branch async remove queue size
+ enable-branch-async-remove: false #enable to asynchronous remove branchSession
+ store:
+ # support: file
+ mode: file
+ file:
+ dir: sessionStore
+ max-branch-session-size: 16384
+ max-global-session-size: 512
+ file-write-buffer-cache-size: 16384
+ session-reload-read-size: 100
+ flush-disk-mode: async
+ metrics:
+ enabled: false
+ registry-type: compact
+ exporter-list: prometheus
+ exporter-prometheus-port: 9898
+ transport:
+ rpc-tc-request-timeout: 15000
+ enable-tc-server-batch-send-response: false
+ shutdown:
+ wait: 3
+ thread-factory:
+ boss-thread-prefix: NettyBoss
+ worker-thread-prefix: NettyServerNIOWorker
+ boss-thread-size: 1
diff --git a/seata/conf/application.yml b/seata/conf/application.yml
new file mode 100644
index 00000000..5f8fdc32
--- /dev/null
+++ b/seata/conf/application.yml
@@ -0,0 +1,107 @@
+# Copyright 1999-2019 Seata.io Group.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+server:
+ port: 7091
+
+spring:
+ application:
+ name: seata-server
+
+logging:
+ config: classpath:logback-spring.xml
+ file:
+ path: ${log.home:${user.home}/logs/seata}
+ extend:
+ logstash-appender:
+ destination: 127.0.0.1:4560
+ kafka-appender:
+ bootstrap-servers: 127.0.0.1:9092
+ topic: logback_to_logstash
+
+console:
+ user:
+ username: seata
+ password: seata
+seata:
+ config:
+ # support: nacos, consul, apollo, zk, etcd3
+ type: nacos
+ nacos:
+ server-addr: 127.0.0.1:8848
+ namespace:
+ group: SEATA_GROUP
+ username: nacos
+ password: nacos
+ context-path:
+ ##if use MSE Nacos with auth, mutex with username/password attribute
+ #access-key:
+ #secret-key:
+ data-id: seataServer.properties
+ registry:
+ # support: nacos, eureka, redis, zk, consul, etcd3, sofa
+ type: nacos
+ preferred-networks: 30.240.*
+ nacos:
+ application: seata-server
+ server-addr: 127.0.0.1:8848
+ group: SEATA_GROUP
+ namespace:
+ cluster: default
+ username: nacos
+ password: nacos
+ context-path:
+ store:
+ # support: file 、 db 、 redis 、 raft
+ mode: db
+ session:
+ mode: db
+ lock:
+ mode: db
+ file:
+ dir: sessionStore
+ max-branch-session-size: 16384
+ max-global-session-size: 512
+ file-write-buffer-cache-size: 16384
+ session-reload-read-size: 100
+ flush-disk-mode: async
+ db:
+ datasource: druid
+ db-type: mysql
+ driver-class-name: com.mysql.jdbc.Driver
+ url: jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true
+ user: root
+ password: root
+ min-conn: 10
+ max-conn: 100
+ global-table: global_table
+ branch-table: branch_table
+ lock-table: lock_table
+ distributed-lock-table: distributed_lock
+ query-limit: 1000
+ max-wait: 5000
+ security:
+ secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
+ tokenValidityInMilliseconds: 1800000
+ ignore:
+ urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.jpeg,/**/*.ico,/api/v1/auth/login,/metadata/v1/**
+
+
+ transport:
+ enableTmClientChannelCheckFailFast: true
+ enableRmClientChannelCheckFailFast: true
+
+transport:
+ enableTmClientChannelCheckFailFast: true
+ enableRmClientChannelCheckFailFast: true
\ No newline at end of file
diff --git a/seata/conf/logback-spring.xml b/seata/conf/logback-spring.xml
new file mode 100644
index 00000000..490141ac
--- /dev/null
+++ b/seata/conf/logback-spring.xml
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ 0
+ 2048
+ true
+
+
+
+
+ true
+ 0
+ 2048
+ true
+
+
+
+ true
+ 0
+ 1024
+ true
+
+
+
+ true
+ 0
+ 1024
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/seata/conf/logback/console-appender.xml b/seata/conf/logback/console-appender.xml
new file mode 100644
index 00000000..542b1b46
--- /dev/null
+++ b/seata/conf/logback/console-appender.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+ ${CONSOLE_LOG_PATTERN}
+ UTF-8
+
+
+
diff --git a/seata/conf/logback/file-appender.xml b/seata/conf/logback/file-appender.xml
new file mode 100644
index 00000000..9225d75e
--- /dev/null
+++ b/seata/conf/logback/file-appender.xml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+ ${LOG_FILE_PATH}/${APPLICATION_NAME:-seata-server}.${RPC_PORT}.all.log
+ true
+
+ ${LOG_FILE_PATH}/history/${APPLICATION_NAME:-seata-server}.${RPC_PORT}.all.%d{yyyy-MM-dd}.%i.log.gz
+ 2GB
+ 7
+ 7GB
+ true
+
+
+ ${FILE_LOG_PATTERN}
+ UTF-8
+
+
+
+
+
+
+ WARN
+ ACCEPT
+ DENY
+
+ ${LOG_FILE_PATH}/${APPLICATION_NAME:-seata-server}.${RPC_PORT}.warn.log
+ true
+
+ ${LOG_FILE_PATH}/history/${APPLICATION_NAME:-seata-server}.${RPC_PORT}.warn.%d{yyyy-MM-dd}.%i.log.gz
+ 2GB
+ 7
+ 7GB
+ true
+
+
+ ${FILE_LOG_PATTERN}
+ UTF-8
+
+
+
+
+
+
+ ERROR
+ ACCEPT
+ DENY
+
+ ${LOG_FILE_PATH}/${APPLICATION_NAME:-seata-server}.${RPC_PORT}.error.log
+ true
+
+ ${LOG_FILE_PATH}/history/${APPLICATION_NAME:-seata-server}.${RPC_PORT}.error.%d{yyyy-MM-dd}.%i.log.gz
+ 2GB
+ 7
+ 7GB
+ true
+
+
+ ${FILE_LOG_PATTERN}
+ UTF-8
+
+
+
diff --git a/seata/conf/logback/kafka-appender.xml b/seata/conf/logback/kafka-appender.xml
new file mode 100644
index 00000000..a13000a2
--- /dev/null
+++ b/seata/conf/logback/kafka-appender.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+ {
+ "@timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}",
+ "level":"%p",
+ "app_name":"${APPLICATION_NAME:-seata-server}",
+ "PORT": ${RPC_PORT:-0},
+ "thread_name": "%t",
+ "logger_name": "%logger",
+ "X-TX-XID": "%X{X-TX-XID:-}",
+ "X-TX-BRANCH-ID": "%X{X-TX-BRANCH-ID:-}",
+ "message": "%m",
+ "stack_trace": "%wex"
+}
+
+
+ ${KAFKA_TOPIC}
+
+
+ bootstrap.servers=${KAFKA_BOOTSTRAP_SERVERS}
+ acks=0
+ linger.ms=1000
+ max.block.ms=0
+
+
diff --git a/seata/conf/logback/logstash-appender.xml b/seata/conf/logback/logstash-appender.xml
new file mode 100644
index 00000000..2c2f9721
--- /dev/null
+++ b/seata/conf/logback/logstash-appender.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+ ${LOGSTASH_DESTINATION}
+
+
+
+
+
+ {
+ "app_name": "${APPLICATION_NAME:-seata-server}"
+ }
+
+
+
+ net.logstash.logback.composite.LogstashVersionJsonProvider
+
+ net.logstash.logback.composite.loggingevent.JsonMessageJsonProvider
+ net.logstash.logback.composite.loggingevent.TagsJsonProvider
+ net.logstash.logback.composite.loggingevent.LogstashMarkersJsonProvider
+ net.logstash.logback.composite.loggingevent.ArgumentsJsonProvider
+
+
+
diff --git a/seata/conf/logback/metric-appender.xml b/seata/conf/logback/metric-appender.xml
new file mode 100644
index 00000000..5527239e
--- /dev/null
+++ b/seata/conf/logback/metric-appender.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/seata/ext/apm-skywalking/plugins/apm-jdbc-commons-8.6.0.jar b/seata/ext/apm-skywalking/plugins/apm-jdbc-commons-8.6.0.jar
new file mode 100644
index 00000000..588f8145
Binary files /dev/null and b/seata/ext/apm-skywalking/plugins/apm-jdbc-commons-8.6.0.jar differ
diff --git a/seata/ext/apm-skywalking/plugins/apm-mysql-5.x-plugin-8.6.0.jar b/seata/ext/apm-skywalking/plugins/apm-mysql-5.x-plugin-8.6.0.jar
new file mode 100644
index 00000000..3e750d3e
Binary files /dev/null and b/seata/ext/apm-skywalking/plugins/apm-mysql-5.x-plugin-8.6.0.jar differ
diff --git a/seata/ext/apm-skywalking/plugins/apm-mysql-6.x-plugin-8.6.0.jar b/seata/ext/apm-skywalking/plugins/apm-mysql-6.x-plugin-8.6.0.jar
new file mode 100644
index 00000000..c07ec0ab
Binary files /dev/null and b/seata/ext/apm-skywalking/plugins/apm-mysql-6.x-plugin-8.6.0.jar differ
diff --git a/seata/ext/apm-skywalking/plugins/apm-mysql-8.x-plugin-8.6.0.jar b/seata/ext/apm-skywalking/plugins/apm-mysql-8.x-plugin-8.6.0.jar
new file mode 100644
index 00000000..2e965498
Binary files /dev/null and b/seata/ext/apm-skywalking/plugins/apm-mysql-8.x-plugin-8.6.0.jar differ
diff --git a/seata/ext/apm-skywalking/plugins/apm-mysql-commons-8.6.0.jar b/seata/ext/apm-skywalking/plugins/apm-mysql-commons-8.6.0.jar
new file mode 100644
index 00000000..e9ea6b16
Binary files /dev/null and b/seata/ext/apm-skywalking/plugins/apm-mysql-commons-8.6.0.jar differ
diff --git a/seata/ext/apm-skywalking/plugins/apm-seata-skywalking-plugin-2.0.0.jar b/seata/ext/apm-skywalking/plugins/apm-seata-skywalking-plugin-2.0.0.jar
new file mode 100644
index 00000000..2369d12e
Binary files /dev/null and b/seata/ext/apm-skywalking/plugins/apm-seata-skywalking-plugin-2.0.0.jar differ
diff --git a/seata/ext/apm-skywalking/skywalking-agent.jar b/seata/ext/apm-skywalking/skywalking-agent.jar
new file mode 100644
index 00000000..2f9db599
Binary files /dev/null and b/seata/ext/apm-skywalking/skywalking-agent.jar differ
diff --git a/seata/lib/DmJdbcDriver18-8.1.2.192.jar b/seata/lib/DmJdbcDriver18-8.1.2.192.jar
new file mode 100644
index 00000000..2374edf5
Binary files /dev/null and b/seata/lib/DmJdbcDriver18-8.1.2.192.jar differ
diff --git a/seata/lib/HikariCP-4.0.3.jar b/seata/lib/HikariCP-4.0.3.jar
new file mode 100644
index 00000000..f328920f
Binary files /dev/null and b/seata/lib/HikariCP-4.0.3.jar differ
diff --git a/seata/lib/animal-sniffer-annotations-1.18.jar b/seata/lib/animal-sniffer-annotations-1.18.jar
new file mode 100644
index 00000000..39252732
Binary files /dev/null and b/seata/lib/animal-sniffer-annotations-1.18.jar differ
diff --git a/seata/lib/annotations-4.1.1.4.jar b/seata/lib/annotations-4.1.1.4.jar
new file mode 100644
index 00000000..8cbf103f
Binary files /dev/null and b/seata/lib/annotations-4.1.1.4.jar differ
diff --git a/seata/lib/ant-1.10.12.jar b/seata/lib/ant-1.10.12.jar
new file mode 100644
index 00000000..1a1d3ea8
Binary files /dev/null and b/seata/lib/ant-1.10.12.jar differ
diff --git a/seata/lib/ant-launcher-1.10.12.jar b/seata/lib/ant-launcher-1.10.12.jar
new file mode 100644
index 00000000..f7dd54b7
Binary files /dev/null and b/seata/lib/ant-launcher-1.10.12.jar differ
diff --git a/seata/lib/antlr-2.7.7.jar b/seata/lib/antlr-2.7.7.jar
new file mode 100644
index 00000000..5e5f14b3
Binary files /dev/null and b/seata/lib/antlr-2.7.7.jar differ
diff --git a/seata/lib/antlr-runtime-3.4.jar b/seata/lib/antlr-runtime-3.4.jar
new file mode 100644
index 00000000..865a537b
Binary files /dev/null and b/seata/lib/antlr-runtime-3.4.jar differ
diff --git a/seata/lib/aopalliance-1.0.jar b/seata/lib/aopalliance-1.0.jar
new file mode 100644
index 00000000..578b1a0c
Binary files /dev/null and b/seata/lib/aopalliance-1.0.jar differ
diff --git a/seata/lib/apollo-client-2.0.1.jar b/seata/lib/apollo-client-2.0.1.jar
new file mode 100644
index 00000000..90b00ec4
Binary files /dev/null and b/seata/lib/apollo-client-2.0.1.jar differ
diff --git a/seata/lib/apollo-core-2.0.1.jar b/seata/lib/apollo-core-2.0.1.jar
new file mode 100644
index 00000000..f64ce3a7
Binary files /dev/null and b/seata/lib/apollo-core-2.0.1.jar differ
diff --git a/seata/lib/archaius-core-0.7.6.jar b/seata/lib/archaius-core-0.7.6.jar
new file mode 100644
index 00000000..58182d16
Binary files /dev/null and b/seata/lib/archaius-core-0.7.6.jar differ
diff --git a/seata/lib/asm-6.0.jar b/seata/lib/asm-6.0.jar
new file mode 100644
index 00000000..cf2de272
Binary files /dev/null and b/seata/lib/asm-6.0.jar differ
diff --git a/seata/lib/audience-annotations-0.5.0.jar b/seata/lib/audience-annotations-0.5.0.jar
new file mode 100644
index 00000000..52491a7e
Binary files /dev/null and b/seata/lib/audience-annotations-0.5.0.jar differ
diff --git a/seata/lib/bolt-1.6.4.jar b/seata/lib/bolt-1.6.4.jar
new file mode 100644
index 00000000..46e1c57f
Binary files /dev/null and b/seata/lib/bolt-1.6.4.jar differ
diff --git a/seata/lib/byte-buddy-1.12.23.jar b/seata/lib/byte-buddy-1.12.23.jar
new file mode 100644
index 00000000..8078f039
Binary files /dev/null and b/seata/lib/byte-buddy-1.12.23.jar differ
diff --git a/seata/lib/checker-qual-3.5.0.jar b/seata/lib/checker-qual-3.5.0.jar
new file mode 100644
index 00000000..f98cde8b
Binary files /dev/null and b/seata/lib/checker-qual-3.5.0.jar differ
diff --git a/seata/lib/commons-codec-1.15.jar b/seata/lib/commons-codec-1.15.jar
new file mode 100644
index 00000000..f14985ac
Binary files /dev/null and b/seata/lib/commons-codec-1.15.jar differ
diff --git a/seata/lib/commons-compiler-3.1.10.jar b/seata/lib/commons-compiler-3.1.10.jar
new file mode 100644
index 00000000..0f6dfe2a
Binary files /dev/null and b/seata/lib/commons-compiler-3.1.10.jar differ
diff --git a/seata/lib/commons-configuration-1.10.jar b/seata/lib/commons-configuration-1.10.jar
new file mode 100644
index 00000000..79224366
Binary files /dev/null and b/seata/lib/commons-configuration-1.10.jar differ
diff --git a/seata/lib/commons-dbcp2-2.9.0.jar b/seata/lib/commons-dbcp2-2.9.0.jar
new file mode 100644
index 00000000..ddfd42c8
Binary files /dev/null and b/seata/lib/commons-dbcp2-2.9.0.jar differ
diff --git a/seata/lib/commons-io-2.8.0.jar b/seata/lib/commons-io-2.8.0.jar
new file mode 100644
index 00000000..177e58dc
Binary files /dev/null and b/seata/lib/commons-io-2.8.0.jar differ
diff --git a/seata/lib/commons-jxpath-1.3.jar b/seata/lib/commons-jxpath-1.3.jar
new file mode 100644
index 00000000..e344a1e6
Binary files /dev/null and b/seata/lib/commons-jxpath-1.3.jar differ
diff --git a/seata/lib/commons-lang-2.6.jar b/seata/lib/commons-lang-2.6.jar
new file mode 100644
index 00000000..98467d3a
Binary files /dev/null and b/seata/lib/commons-lang-2.6.jar differ
diff --git a/seata/lib/commons-logging-1.2.jar b/seata/lib/commons-logging-1.2.jar
new file mode 100644
index 00000000..93a3b9f6
Binary files /dev/null and b/seata/lib/commons-logging-1.2.jar differ
diff --git a/seata/lib/commons-math-2.2.jar b/seata/lib/commons-math-2.2.jar
new file mode 100644
index 00000000..b29a39c5
Binary files /dev/null and b/seata/lib/commons-math-2.2.jar differ
diff --git a/seata/lib/commons-pool-1.6.jar b/seata/lib/commons-pool-1.6.jar
new file mode 100644
index 00000000..72ca75a3
Binary files /dev/null and b/seata/lib/commons-pool-1.6.jar differ
diff --git a/seata/lib/commons-pool2-2.11.1.jar b/seata/lib/commons-pool2-2.11.1.jar
new file mode 100644
index 00000000..8da8a827
Binary files /dev/null and b/seata/lib/commons-pool2-2.11.1.jar differ
diff --git a/seata/lib/compactmap-2.0.jar b/seata/lib/compactmap-2.0.jar
new file mode 100644
index 00000000..9e6686dc
Binary files /dev/null and b/seata/lib/compactmap-2.0.jar differ
diff --git a/seata/lib/config-1.2.1.jar b/seata/lib/config-1.2.1.jar
new file mode 100644
index 00000000..d2ed5a6e
Binary files /dev/null and b/seata/lib/config-1.2.1.jar differ
diff --git a/seata/lib/consul-api-1.4.2.jar b/seata/lib/consul-api-1.4.2.jar
new file mode 100644
index 00000000..6a671d54
Binary files /dev/null and b/seata/lib/consul-api-1.4.2.jar differ
diff --git a/seata/lib/dexx-collections-0.2.jar b/seata/lib/dexx-collections-0.2.jar
new file mode 100644
index 00000000..eb2f763a
Binary files /dev/null and b/seata/lib/dexx-collections-0.2.jar differ
diff --git a/seata/lib/disruptor-3.3.7.jar b/seata/lib/disruptor-3.3.7.jar
new file mode 100644
index 00000000..1777a375
Binary files /dev/null and b/seata/lib/disruptor-3.3.7.jar differ
diff --git a/seata/lib/druid-1.2.7.jar b/seata/lib/druid-1.2.7.jar
new file mode 100644
index 00000000..811a80ec
Binary files /dev/null and b/seata/lib/druid-1.2.7.jar differ
diff --git a/seata/lib/error_prone_annotations-2.3.4.jar b/seata/lib/error_prone_annotations-2.3.4.jar
new file mode 100644
index 00000000..c9bea2ab
Binary files /dev/null and b/seata/lib/error_prone_annotations-2.3.4.jar differ
diff --git a/seata/lib/eureka-client-1.10.17.jar b/seata/lib/eureka-client-1.10.17.jar
new file mode 100644
index 00000000..8bc7ce71
Binary files /dev/null and b/seata/lib/eureka-client-1.10.17.jar differ
diff --git a/seata/lib/failsafe-2.3.3.jar b/seata/lib/failsafe-2.3.3.jar
new file mode 100644
index 00000000..a1f9541d
Binary files /dev/null and b/seata/lib/failsafe-2.3.3.jar differ
diff --git a/seata/lib/failureaccess-1.0.1.jar b/seata/lib/failureaccess-1.0.1.jar
new file mode 100644
index 00000000..9b56dc75
Binary files /dev/null and b/seata/lib/failureaccess-1.0.1.jar differ
diff --git a/seata/lib/fastjson-1.2.83.jar b/seata/lib/fastjson-1.2.83.jar
new file mode 100644
index 00000000..fd843ae9
Binary files /dev/null and b/seata/lib/fastjson-1.2.83.jar differ
diff --git a/seata/lib/grpc-api-1.27.1.jar b/seata/lib/grpc-api-1.27.1.jar
new file mode 100644
index 00000000..53bfc300
Binary files /dev/null and b/seata/lib/grpc-api-1.27.1.jar differ
diff --git a/seata/lib/grpc-context-1.27.1.jar b/seata/lib/grpc-context-1.27.1.jar
new file mode 100644
index 00000000..b742f7ca
Binary files /dev/null and b/seata/lib/grpc-context-1.27.1.jar differ
diff --git a/seata/lib/grpc-core-1.27.1.jar b/seata/lib/grpc-core-1.27.1.jar
new file mode 100644
index 00000000..ecbdf18a
Binary files /dev/null and b/seata/lib/grpc-core-1.27.1.jar differ
diff --git a/seata/lib/grpc-grpclb-1.27.1.jar b/seata/lib/grpc-grpclb-1.27.1.jar
new file mode 100644
index 00000000..8bc38961
Binary files /dev/null and b/seata/lib/grpc-grpclb-1.27.1.jar differ
diff --git a/seata/lib/grpc-netty-1.27.1.jar b/seata/lib/grpc-netty-1.27.1.jar
new file mode 100644
index 00000000..fd6d0b52
Binary files /dev/null and b/seata/lib/grpc-netty-1.27.1.jar differ
diff --git a/seata/lib/grpc-protobuf-1.27.1.jar b/seata/lib/grpc-protobuf-1.27.1.jar
new file mode 100644
index 00000000..44880f2a
Binary files /dev/null and b/seata/lib/grpc-protobuf-1.27.1.jar differ
diff --git a/seata/lib/grpc-protobuf-lite-1.27.1.jar b/seata/lib/grpc-protobuf-lite-1.27.1.jar
new file mode 100644
index 00000000..b628257c
Binary files /dev/null and b/seata/lib/grpc-protobuf-lite-1.27.1.jar differ
diff --git a/seata/lib/grpc-stub-1.27.1.jar b/seata/lib/grpc-stub-1.27.1.jar
new file mode 100644
index 00000000..dbb3a7ea
Binary files /dev/null and b/seata/lib/grpc-stub-1.27.1.jar differ
diff --git a/seata/lib/gson-2.9.1.jar b/seata/lib/gson-2.9.1.jar
new file mode 100644
index 00000000..8a663ecc
Binary files /dev/null and b/seata/lib/gson-2.9.1.jar differ
diff --git a/seata/lib/guava-30.1-jre.jar b/seata/lib/guava-30.1-jre.jar
new file mode 100644
index 00000000..4244e8a2
Binary files /dev/null and b/seata/lib/guava-30.1-jre.jar differ
diff --git a/seata/lib/guice-5.0.1.jar b/seata/lib/guice-5.0.1.jar
new file mode 100644
index 00000000..ce6a9d49
Binary files /dev/null and b/seata/lib/guice-5.0.1.jar differ
diff --git a/seata/lib/h2-2.1.214.jar b/seata/lib/h2-2.1.214.jar
new file mode 100644
index 00000000..e8e3efc6
Binary files /dev/null and b/seata/lib/h2-2.1.214.jar differ
diff --git a/seata/lib/hessian-4.0.3.jar b/seata/lib/hessian-4.0.3.jar
new file mode 100644
index 00000000..618e194f
Binary files /dev/null and b/seata/lib/hessian-4.0.3.jar differ
diff --git a/seata/lib/hessian-4.0.63.jar b/seata/lib/hessian-4.0.63.jar
new file mode 100644
index 00000000..873749e8
Binary files /dev/null and b/seata/lib/hessian-4.0.63.jar differ
diff --git a/seata/lib/httpasyncclient-4.1.5.jar b/seata/lib/httpasyncclient-4.1.5.jar
new file mode 100644
index 00000000..5a63e4d7
Binary files /dev/null and b/seata/lib/httpasyncclient-4.1.5.jar differ
diff --git a/seata/lib/httpclient-4.5.14.jar b/seata/lib/httpclient-4.5.14.jar
new file mode 100644
index 00000000..2bb7c073
Binary files /dev/null and b/seata/lib/httpclient-4.5.14.jar differ
diff --git a/seata/lib/httpcore-4.4.16.jar b/seata/lib/httpcore-4.4.16.jar
new file mode 100644
index 00000000..f0bdebeb
Binary files /dev/null and b/seata/lib/httpcore-4.4.16.jar differ
diff --git a/seata/lib/httpcore-nio-4.4.16.jar b/seata/lib/httpcore-nio-4.4.16.jar
new file mode 100644
index 00000000..d52d8922
Binary files /dev/null and b/seata/lib/httpcore-nio-4.4.16.jar differ
diff --git a/seata/lib/j2objc-annotations-1.3.jar b/seata/lib/j2objc-annotations-1.3.jar
new file mode 100644
index 00000000..a429c721
Binary files /dev/null and b/seata/lib/j2objc-annotations-1.3.jar differ
diff --git a/seata/lib/jackson-annotations-2.13.5.jar b/seata/lib/jackson-annotations-2.13.5.jar
new file mode 100644
index 00000000..20ecaedc
Binary files /dev/null and b/seata/lib/jackson-annotations-2.13.5.jar differ
diff --git a/seata/lib/jackson-core-2.13.5.jar b/seata/lib/jackson-core-2.13.5.jar
new file mode 100644
index 00000000..401dee31
Binary files /dev/null and b/seata/lib/jackson-core-2.13.5.jar differ
diff --git a/seata/lib/jackson-databind-2.13.5.jar b/seata/lib/jackson-databind-2.13.5.jar
new file mode 100644
index 00000000..fde442b1
Binary files /dev/null and b/seata/lib/jackson-databind-2.13.5.jar differ
diff --git a/seata/lib/jackson-datatype-jdk8-2.13.5.jar b/seata/lib/jackson-datatype-jdk8-2.13.5.jar
new file mode 100644
index 00000000..b002723d
Binary files /dev/null and b/seata/lib/jackson-datatype-jdk8-2.13.5.jar differ
diff --git a/seata/lib/jackson-datatype-jsr310-2.13.5.jar b/seata/lib/jackson-datatype-jsr310-2.13.5.jar
new file mode 100644
index 00000000..adf48ed8
Binary files /dev/null and b/seata/lib/jackson-datatype-jsr310-2.13.5.jar differ
diff --git a/seata/lib/jackson-module-parameter-names-2.13.5.jar b/seata/lib/jackson-module-parameter-names-2.13.5.jar
new file mode 100644
index 00000000..1208f7c3
Binary files /dev/null and b/seata/lib/jackson-module-parameter-names-2.13.5.jar differ
diff --git a/seata/lib/jakarta.annotation-api-1.3.5.jar b/seata/lib/jakarta.annotation-api-1.3.5.jar
new file mode 100644
index 00000000..606d992e
Binary files /dev/null and b/seata/lib/jakarta.annotation-api-1.3.5.jar differ
diff --git a/seata/lib/janino-3.1.10.jar b/seata/lib/janino-3.1.10.jar
new file mode 100644
index 00000000..a876fbd7
Binary files /dev/null and b/seata/lib/janino-3.1.10.jar differ
diff --git a/seata/lib/javax.inject-1.jar b/seata/lib/javax.inject-1.jar
new file mode 100644
index 00000000..b2a9d0bf
Binary files /dev/null and b/seata/lib/javax.inject-1.jar differ
diff --git a/seata/lib/javax.servlet-api-4.0.1.jar b/seata/lib/javax.servlet-api-4.0.1.jar
new file mode 100644
index 00000000..844ec7f1
Binary files /dev/null and b/seata/lib/javax.servlet-api-4.0.1.jar differ
diff --git a/seata/lib/jcommander-1.82.jar b/seata/lib/jcommander-1.82.jar
new file mode 100644
index 00000000..90f44247
Binary files /dev/null and b/seata/lib/jcommander-1.82.jar differ
diff --git a/seata/lib/jctools-core-2.1.1.jar b/seata/lib/jctools-core-2.1.1.jar
new file mode 100644
index 00000000..289dfb1c
Binary files /dev/null and b/seata/lib/jctools-core-2.1.1.jar differ
diff --git a/seata/lib/jdbc/mysql-connector-java-5.1.42.jar b/seata/lib/jdbc/mysql-connector-java-5.1.42.jar
new file mode 100644
index 00000000..cf242a7d
Binary files /dev/null and b/seata/lib/jdbc/mysql-connector-java-5.1.42.jar differ
diff --git a/seata/lib/jdbc/mysql-connector-java-8.0.27.jar b/seata/lib/jdbc/mysql-connector-java-8.0.27.jar
new file mode 100644
index 00000000..683ac268
Binary files /dev/null and b/seata/lib/jdbc/mysql-connector-java-8.0.27.jar differ
diff --git a/seata/lib/jedis-3.8.0.jar b/seata/lib/jedis-3.8.0.jar
new file mode 100644
index 00000000..eb9d4182
Binary files /dev/null and b/seata/lib/jedis-3.8.0.jar differ
diff --git a/seata/lib/jersey-apache-client4-1.19.1.jar b/seata/lib/jersey-apache-client4-1.19.1.jar
new file mode 100644
index 00000000..d88eab76
Binary files /dev/null and b/seata/lib/jersey-apache-client4-1.19.1.jar differ
diff --git a/seata/lib/jersey-client-1.19.1.jar b/seata/lib/jersey-client-1.19.1.jar
new file mode 100644
index 00000000..455a7f28
Binary files /dev/null and b/seata/lib/jersey-client-1.19.1.jar differ
diff --git a/seata/lib/jersey-core-1.19.1.jar b/seata/lib/jersey-core-1.19.1.jar
new file mode 100644
index 00000000..8e5185d2
Binary files /dev/null and b/seata/lib/jersey-core-1.19.1.jar differ
diff --git a/seata/lib/jetcd-common-0.5.0.jar b/seata/lib/jetcd-common-0.5.0.jar
new file mode 100644
index 00000000..8aae76da
Binary files /dev/null and b/seata/lib/jetcd-common-0.5.0.jar differ
diff --git a/seata/lib/jetcd-core-0.5.0.jar b/seata/lib/jetcd-core-0.5.0.jar
new file mode 100644
index 00000000..e1b7ee1d
Binary files /dev/null and b/seata/lib/jetcd-core-0.5.0.jar differ
diff --git a/seata/lib/jetcd-resolver-0.5.0.jar b/seata/lib/jetcd-resolver-0.5.0.jar
new file mode 100644
index 00000000..85351a20
Binary files /dev/null and b/seata/lib/jetcd-resolver-0.5.0.jar differ
diff --git a/seata/lib/jettison-1.4.0.jar b/seata/lib/jettison-1.4.0.jar
new file mode 100644
index 00000000..a823cf91
Binary files /dev/null and b/seata/lib/jettison-1.4.0.jar differ
diff --git a/seata/lib/jjwt-api-0.10.5.jar b/seata/lib/jjwt-api-0.10.5.jar
new file mode 100644
index 00000000..9ff2d9cd
Binary files /dev/null and b/seata/lib/jjwt-api-0.10.5.jar differ
diff --git a/seata/lib/jjwt-impl-0.10.5.jar b/seata/lib/jjwt-impl-0.10.5.jar
new file mode 100644
index 00000000..3f7a0ac7
Binary files /dev/null and b/seata/lib/jjwt-impl-0.10.5.jar differ
diff --git a/seata/lib/jjwt-jackson-0.10.5.jar b/seata/lib/jjwt-jackson-0.10.5.jar
new file mode 100644
index 00000000..513b6717
Binary files /dev/null and b/seata/lib/jjwt-jackson-0.10.5.jar differ
diff --git a/seata/lib/jna-5.5.0.jar b/seata/lib/jna-5.5.0.jar
new file mode 100644
index 00000000..ff423c8f
Binary files /dev/null and b/seata/lib/jna-5.5.0.jar differ
diff --git a/seata/lib/joda-time-2.3.jar b/seata/lib/joda-time-2.3.jar
new file mode 100644
index 00000000..9dce4f92
Binary files /dev/null and b/seata/lib/joda-time-2.3.jar differ
diff --git a/seata/lib/jraft-core-1.3.13.jar b/seata/lib/jraft-core-1.3.13.jar
new file mode 100644
index 00000000..7cf33ca8
Binary files /dev/null and b/seata/lib/jraft-core-1.3.13.jar differ
diff --git a/seata/lib/jsr305-3.0.2.jar b/seata/lib/jsr305-3.0.2.jar
new file mode 100644
index 00000000..59222d9c
Binary files /dev/null and b/seata/lib/jsr305-3.0.2.jar differ
diff --git a/seata/lib/jsr311-api-1.1.1.jar b/seata/lib/jsr311-api-1.1.1.jar
new file mode 100644
index 00000000..ec8bc818
Binary files /dev/null and b/seata/lib/jsr311-api-1.1.1.jar differ
diff --git a/seata/lib/jul-to-slf4j-1.7.36.jar b/seata/lib/jul-to-slf4j-1.7.36.jar
new file mode 100644
index 00000000..ae8f815e
Binary files /dev/null and b/seata/lib/jul-to-slf4j-1.7.36.jar differ
diff --git a/seata/lib/kafka-clients-3.1.2.jar b/seata/lib/kafka-clients-3.1.2.jar
new file mode 100644
index 00000000..46d0f2dc
Binary files /dev/null and b/seata/lib/kafka-clients-3.1.2.jar differ
diff --git a/seata/lib/kryo-5.4.0.jar b/seata/lib/kryo-5.4.0.jar
new file mode 100644
index 00000000..bf84ecb2
Binary files /dev/null and b/seata/lib/kryo-5.4.0.jar differ
diff --git a/seata/lib/kryo-serializers-0.45.jar b/seata/lib/kryo-serializers-0.45.jar
new file mode 100644
index 00000000..faafbfbe
Binary files /dev/null and b/seata/lib/kryo-serializers-0.45.jar differ
diff --git a/seata/lib/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar b/seata/lib/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
new file mode 100644
index 00000000..45832c05
Binary files /dev/null and b/seata/lib/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar differ
diff --git a/seata/lib/logback-classic-1.2.12.jar b/seata/lib/logback-classic-1.2.12.jar
new file mode 100644
index 00000000..b33d4d5f
Binary files /dev/null and b/seata/lib/logback-classic-1.2.12.jar differ
diff --git a/seata/lib/logback-core-1.2.12.jar b/seata/lib/logback-core-1.2.12.jar
new file mode 100644
index 00000000..64fac138
Binary files /dev/null and b/seata/lib/logback-core-1.2.12.jar differ
diff --git a/seata/lib/logback-kafka-appender-0.2.0-RC2.jar b/seata/lib/logback-kafka-appender-0.2.0-RC2.jar
new file mode 100644
index 00000000..37742a15
Binary files /dev/null and b/seata/lib/logback-kafka-appender-0.2.0-RC2.jar differ
diff --git a/seata/lib/logstash-logback-encoder-6.5.jar b/seata/lib/logstash-logback-encoder-6.5.jar
new file mode 100644
index 00000000..f7ef12f7
Binary files /dev/null and b/seata/lib/logstash-logback-encoder-6.5.jar differ
diff --git a/seata/lib/lz4-java-1.7.1.jar b/seata/lib/lz4-java-1.7.1.jar
new file mode 100644
index 00000000..95f57ca1
Binary files /dev/null and b/seata/lib/lz4-java-1.7.1.jar differ
diff --git a/seata/lib/metrics-core-4.2.21.jar b/seata/lib/metrics-core-4.2.21.jar
new file mode 100644
index 00000000..c27f0e00
Binary files /dev/null and b/seata/lib/metrics-core-4.2.21.jar differ
diff --git a/seata/lib/minlog-1.3.1.jar b/seata/lib/minlog-1.3.1.jar
new file mode 100644
index 00000000..9a155709
Binary files /dev/null and b/seata/lib/minlog-1.3.1.jar differ
diff --git a/seata/lib/mxparser-1.2.2.jar b/seata/lib/mxparser-1.2.2.jar
new file mode 100644
index 00000000..f32ad580
Binary files /dev/null and b/seata/lib/mxparser-1.2.2.jar differ
diff --git a/seata/lib/nacos-api-1.4.2.jar b/seata/lib/nacos-api-1.4.2.jar
new file mode 100644
index 00000000..1fad7a7c
Binary files /dev/null and b/seata/lib/nacos-api-1.4.2.jar differ
diff --git a/seata/lib/nacos-client-1.4.2.jar b/seata/lib/nacos-client-1.4.2.jar
new file mode 100644
index 00000000..8c5b92df
Binary files /dev/null and b/seata/lib/nacos-client-1.4.2.jar differ
diff --git a/seata/lib/nacos-common-1.4.2.jar b/seata/lib/nacos-common-1.4.2.jar
new file mode 100644
index 00000000..c0912e55
Binary files /dev/null and b/seata/lib/nacos-common-1.4.2.jar differ
diff --git a/seata/lib/netflix-eventbus-0.3.0.jar b/seata/lib/netflix-eventbus-0.3.0.jar
new file mode 100644
index 00000000..b910dc37
Binary files /dev/null and b/seata/lib/netflix-eventbus-0.3.0.jar differ
diff --git a/seata/lib/netflix-infix-0.3.0.jar b/seata/lib/netflix-infix-0.3.0.jar
new file mode 100644
index 00000000..cb1b67e0
Binary files /dev/null and b/seata/lib/netflix-infix-0.3.0.jar differ
diff --git a/seata/lib/netty-all-4.1.100.Final.jar b/seata/lib/netty-all-4.1.100.Final.jar
new file mode 100644
index 00000000..57f42560
Binary files /dev/null and b/seata/lib/netty-all-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-buffer-4.1.100.Final.jar b/seata/lib/netty-buffer-4.1.100.Final.jar
new file mode 100644
index 00000000..055ecf3b
Binary files /dev/null and b/seata/lib/netty-buffer-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-codec-4.1.100.Final.jar b/seata/lib/netty-codec-4.1.100.Final.jar
new file mode 100644
index 00000000..04c2f74b
Binary files /dev/null and b/seata/lib/netty-codec-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-codec-dns-4.1.100.Final.jar b/seata/lib/netty-codec-dns-4.1.100.Final.jar
new file mode 100644
index 00000000..56b94595
Binary files /dev/null and b/seata/lib/netty-codec-dns-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-codec-haproxy-4.1.100.Final.jar b/seata/lib/netty-codec-haproxy-4.1.100.Final.jar
new file mode 100644
index 00000000..97097fe9
Binary files /dev/null and b/seata/lib/netty-codec-haproxy-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-codec-http-4.1.100.Final.jar b/seata/lib/netty-codec-http-4.1.100.Final.jar
new file mode 100644
index 00000000..50e5a9b0
Binary files /dev/null and b/seata/lib/netty-codec-http-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-codec-http2-4.1.100.Final.jar b/seata/lib/netty-codec-http2-4.1.100.Final.jar
new file mode 100644
index 00000000..c9b4d8f8
Binary files /dev/null and b/seata/lib/netty-codec-http2-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-codec-memcache-4.1.100.Final.jar b/seata/lib/netty-codec-memcache-4.1.100.Final.jar
new file mode 100644
index 00000000..914c26f7
Binary files /dev/null and b/seata/lib/netty-codec-memcache-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-codec-mqtt-4.1.100.Final.jar b/seata/lib/netty-codec-mqtt-4.1.100.Final.jar
new file mode 100644
index 00000000..43376269
Binary files /dev/null and b/seata/lib/netty-codec-mqtt-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-codec-redis-4.1.100.Final.jar b/seata/lib/netty-codec-redis-4.1.100.Final.jar
new file mode 100644
index 00000000..4289ff9b
Binary files /dev/null and b/seata/lib/netty-codec-redis-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-codec-smtp-4.1.100.Final.jar b/seata/lib/netty-codec-smtp-4.1.100.Final.jar
new file mode 100644
index 00000000..9ed5f4fc
Binary files /dev/null and b/seata/lib/netty-codec-smtp-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-codec-socks-4.1.100.Final.jar b/seata/lib/netty-codec-socks-4.1.100.Final.jar
new file mode 100644
index 00000000..e02c3ff0
Binary files /dev/null and b/seata/lib/netty-codec-socks-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-codec-stomp-4.1.100.Final.jar b/seata/lib/netty-codec-stomp-4.1.100.Final.jar
new file mode 100644
index 00000000..73d4434e
Binary files /dev/null and b/seata/lib/netty-codec-stomp-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-codec-xml-4.1.100.Final.jar b/seata/lib/netty-codec-xml-4.1.100.Final.jar
new file mode 100644
index 00000000..a09fbee0
Binary files /dev/null and b/seata/lib/netty-codec-xml-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-common-4.1.100.Final.jar b/seata/lib/netty-common-4.1.100.Final.jar
new file mode 100644
index 00000000..2946576e
Binary files /dev/null and b/seata/lib/netty-common-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-handler-4.1.100.Final.jar b/seata/lib/netty-handler-4.1.100.Final.jar
new file mode 100644
index 00000000..8a42dbb7
Binary files /dev/null and b/seata/lib/netty-handler-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-handler-proxy-4.1.100.Final.jar b/seata/lib/netty-handler-proxy-4.1.100.Final.jar
new file mode 100644
index 00000000..14315ff1
Binary files /dev/null and b/seata/lib/netty-handler-proxy-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-handler-ssl-ocsp-4.1.100.Final.jar b/seata/lib/netty-handler-ssl-ocsp-4.1.100.Final.jar
new file mode 100644
index 00000000..1d0281d3
Binary files /dev/null and b/seata/lib/netty-handler-ssl-ocsp-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-resolver-4.1.100.Final.jar b/seata/lib/netty-resolver-4.1.100.Final.jar
new file mode 100644
index 00000000..7292648b
Binary files /dev/null and b/seata/lib/netty-resolver-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-resolver-dns-4.1.100.Final.jar b/seata/lib/netty-resolver-dns-4.1.100.Final.jar
new file mode 100644
index 00000000..a4c254f8
Binary files /dev/null and b/seata/lib/netty-resolver-dns-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-resolver-dns-classes-macos-4.1.100.Final.jar b/seata/lib/netty-resolver-dns-classes-macos-4.1.100.Final.jar
new file mode 100644
index 00000000..268dde97
Binary files /dev/null and b/seata/lib/netty-resolver-dns-classes-macos-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-resolver-dns-native-macos-4.1.100.Final-osx-aarch_64.jar b/seata/lib/netty-resolver-dns-native-macos-4.1.100.Final-osx-aarch_64.jar
new file mode 100644
index 00000000..594ae545
Binary files /dev/null and b/seata/lib/netty-resolver-dns-native-macos-4.1.100.Final-osx-aarch_64.jar differ
diff --git a/seata/lib/netty-resolver-dns-native-macos-4.1.100.Final-osx-x86_64.jar b/seata/lib/netty-resolver-dns-native-macos-4.1.100.Final-osx-x86_64.jar
new file mode 100644
index 00000000..2e197eb2
Binary files /dev/null and b/seata/lib/netty-resolver-dns-native-macos-4.1.100.Final-osx-x86_64.jar differ
diff --git a/seata/lib/netty-transport-4.1.100.Final.jar b/seata/lib/netty-transport-4.1.100.Final.jar
new file mode 100644
index 00000000..124a8973
Binary files /dev/null and b/seata/lib/netty-transport-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-transport-classes-epoll-4.1.100.Final.jar b/seata/lib/netty-transport-classes-epoll-4.1.100.Final.jar
new file mode 100644
index 00000000..4511b1d2
Binary files /dev/null and b/seata/lib/netty-transport-classes-epoll-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-transport-classes-kqueue-4.1.100.Final.jar b/seata/lib/netty-transport-classes-kqueue-4.1.100.Final.jar
new file mode 100644
index 00000000..2805d6c7
Binary files /dev/null and b/seata/lib/netty-transport-classes-kqueue-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-transport-native-epoll-4.1.100.Final-linux-aarch_64.jar b/seata/lib/netty-transport-native-epoll-4.1.100.Final-linux-aarch_64.jar
new file mode 100644
index 00000000..b95b4bf3
Binary files /dev/null and b/seata/lib/netty-transport-native-epoll-4.1.100.Final-linux-aarch_64.jar differ
diff --git a/seata/lib/netty-transport-native-epoll-4.1.100.Final-linux-x86_64.jar b/seata/lib/netty-transport-native-epoll-4.1.100.Final-linux-x86_64.jar
new file mode 100644
index 00000000..6583f16c
Binary files /dev/null and b/seata/lib/netty-transport-native-epoll-4.1.100.Final-linux-x86_64.jar differ
diff --git a/seata/lib/netty-transport-native-epoll-4.1.100.Final.jar b/seata/lib/netty-transport-native-epoll-4.1.100.Final.jar
new file mode 100644
index 00000000..601bf37c
Binary files /dev/null and b/seata/lib/netty-transport-native-epoll-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-transport-native-kqueue-4.1.100.Final-osx-aarch_64.jar b/seata/lib/netty-transport-native-kqueue-4.1.100.Final-osx-aarch_64.jar
new file mode 100644
index 00000000..484abb12
Binary files /dev/null and b/seata/lib/netty-transport-native-kqueue-4.1.100.Final-osx-aarch_64.jar differ
diff --git a/seata/lib/netty-transport-native-kqueue-4.1.100.Final-osx-x86_64.jar b/seata/lib/netty-transport-native-kqueue-4.1.100.Final-osx-x86_64.jar
new file mode 100644
index 00000000..5370e5d6
Binary files /dev/null and b/seata/lib/netty-transport-native-kqueue-4.1.100.Final-osx-x86_64.jar differ
diff --git a/seata/lib/netty-transport-native-unix-common-4.1.100.Final.jar b/seata/lib/netty-transport-native-unix-common-4.1.100.Final.jar
new file mode 100644
index 00000000..557b3d53
Binary files /dev/null and b/seata/lib/netty-transport-native-unix-common-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-transport-rxtx-4.1.100.Final.jar b/seata/lib/netty-transport-rxtx-4.1.100.Final.jar
new file mode 100644
index 00000000..1665a651
Binary files /dev/null and b/seata/lib/netty-transport-rxtx-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-transport-sctp-4.1.100.Final.jar b/seata/lib/netty-transport-sctp-4.1.100.Final.jar
new file mode 100644
index 00000000..de301b87
Binary files /dev/null and b/seata/lib/netty-transport-sctp-4.1.100.Final.jar differ
diff --git a/seata/lib/netty-transport-udt-4.1.100.Final.jar b/seata/lib/netty-transport-udt-4.1.100.Final.jar
new file mode 100644
index 00000000..24842885
Binary files /dev/null and b/seata/lib/netty-transport-udt-4.1.100.Final.jar differ
diff --git a/seata/lib/objenesis-3.2.jar b/seata/lib/objenesis-3.2.jar
new file mode 100644
index 00000000..1888e2ea
Binary files /dev/null and b/seata/lib/objenesis-3.2.jar differ
diff --git a/seata/lib/perfmark-api-0.19.0.jar b/seata/lib/perfmark-api-0.19.0.jar
new file mode 100644
index 00000000..557a0563
Binary files /dev/null and b/seata/lib/perfmark-api-0.19.0.jar differ
diff --git a/seata/lib/postgresql-42.3.8.jar b/seata/lib/postgresql-42.3.8.jar
new file mode 100644
index 00000000..4dab8a5d
Binary files /dev/null and b/seata/lib/postgresql-42.3.8.jar differ
diff --git a/seata/lib/proto-google-common-protos-1.17.0.jar b/seata/lib/proto-google-common-protos-1.17.0.jar
new file mode 100644
index 00000000..990ff3a3
Binary files /dev/null and b/seata/lib/proto-google-common-protos-1.17.0.jar differ
diff --git a/seata/lib/protobuf-java-3.16.3.jar b/seata/lib/protobuf-java-3.16.3.jar
new file mode 100644
index 00000000..fffc4cd6
Binary files /dev/null and b/seata/lib/protobuf-java-3.16.3.jar differ
diff --git a/seata/lib/protobuf-java-util-3.11.0.jar b/seata/lib/protobuf-java-util-3.11.0.jar
new file mode 100644
index 00000000..2a8639cc
Binary files /dev/null and b/seata/lib/protobuf-java-util-3.11.0.jar differ
diff --git a/seata/lib/reflectasm-1.11.9.jar b/seata/lib/reflectasm-1.11.9.jar
new file mode 100644
index 00000000..050129b5
Binary files /dev/null and b/seata/lib/reflectasm-1.11.9.jar differ
diff --git a/seata/lib/registry-client-all-6.3.0.jar b/seata/lib/registry-client-all-6.3.0.jar
new file mode 100644
index 00000000..bc61a6f5
Binary files /dev/null and b/seata/lib/registry-client-all-6.3.0.jar differ
diff --git a/seata/lib/rocksdbjni-7.7.3.jar b/seata/lib/rocksdbjni-7.7.3.jar
new file mode 100644
index 00000000..251b211a
Binary files /dev/null and b/seata/lib/rocksdbjni-7.7.3.jar differ
diff --git a/seata/lib/seata-common-2.0.0.jar b/seata/lib/seata-common-2.0.0.jar
new file mode 100644
index 00000000..67690442
Binary files /dev/null and b/seata/lib/seata-common-2.0.0.jar differ
diff --git a/seata/lib/seata-compressor-all-2.0.0.jar b/seata/lib/seata-compressor-all-2.0.0.jar
new file mode 100644
index 00000000..c6033282
Binary files /dev/null and b/seata/lib/seata-compressor-all-2.0.0.jar differ
diff --git a/seata/lib/seata-compressor-bzip2-2.0.0.jar b/seata/lib/seata-compressor-bzip2-2.0.0.jar
new file mode 100644
index 00000000..25b0c5b8
Binary files /dev/null and b/seata/lib/seata-compressor-bzip2-2.0.0.jar differ
diff --git a/seata/lib/seata-compressor-deflater-2.0.0.jar b/seata/lib/seata-compressor-deflater-2.0.0.jar
new file mode 100644
index 00000000..8dceff3b
Binary files /dev/null and b/seata/lib/seata-compressor-deflater-2.0.0.jar differ
diff --git a/seata/lib/seata-compressor-gzip-2.0.0.jar b/seata/lib/seata-compressor-gzip-2.0.0.jar
new file mode 100644
index 00000000..85dd48c2
Binary files /dev/null and b/seata/lib/seata-compressor-gzip-2.0.0.jar differ
diff --git a/seata/lib/seata-compressor-lz4-2.0.0.jar b/seata/lib/seata-compressor-lz4-2.0.0.jar
new file mode 100644
index 00000000..34d353ea
Binary files /dev/null and b/seata/lib/seata-compressor-lz4-2.0.0.jar differ
diff --git a/seata/lib/seata-compressor-zip-2.0.0.jar b/seata/lib/seata-compressor-zip-2.0.0.jar
new file mode 100644
index 00000000..a636374f
Binary files /dev/null and b/seata/lib/seata-compressor-zip-2.0.0.jar differ
diff --git a/seata/lib/seata-compressor-zstd-2.0.0.jar b/seata/lib/seata-compressor-zstd-2.0.0.jar
new file mode 100644
index 00000000..0a996920
Binary files /dev/null and b/seata/lib/seata-compressor-zstd-2.0.0.jar differ
diff --git a/seata/lib/seata-config-all-2.0.0.jar b/seata/lib/seata-config-all-2.0.0.jar
new file mode 100644
index 00000000..b013e192
Binary files /dev/null and b/seata/lib/seata-config-all-2.0.0.jar differ
diff --git a/seata/lib/seata-config-apollo-2.0.0.jar b/seata/lib/seata-config-apollo-2.0.0.jar
new file mode 100644
index 00000000..ee97ec8a
Binary files /dev/null and b/seata/lib/seata-config-apollo-2.0.0.jar differ
diff --git a/seata/lib/seata-config-consul-2.0.0.jar b/seata/lib/seata-config-consul-2.0.0.jar
new file mode 100644
index 00000000..ced82e44
Binary files /dev/null and b/seata/lib/seata-config-consul-2.0.0.jar differ
diff --git a/seata/lib/seata-config-core-2.0.0.jar b/seata/lib/seata-config-core-2.0.0.jar
new file mode 100644
index 00000000..8b299bb3
Binary files /dev/null and b/seata/lib/seata-config-core-2.0.0.jar differ
diff --git a/seata/lib/seata-config-etcd3-2.0.0.jar b/seata/lib/seata-config-etcd3-2.0.0.jar
new file mode 100644
index 00000000..d21de7c1
Binary files /dev/null and b/seata/lib/seata-config-etcd3-2.0.0.jar differ
diff --git a/seata/lib/seata-config-nacos-2.0.0.jar b/seata/lib/seata-config-nacos-2.0.0.jar
new file mode 100644
index 00000000..7cb33ef9
Binary files /dev/null and b/seata/lib/seata-config-nacos-2.0.0.jar differ
diff --git a/seata/lib/seata-config-spring-cloud-2.0.0.jar b/seata/lib/seata-config-spring-cloud-2.0.0.jar
new file mode 100644
index 00000000..1adf27aa
Binary files /dev/null and b/seata/lib/seata-config-spring-cloud-2.0.0.jar differ
diff --git a/seata/lib/seata-config-zk-2.0.0.jar b/seata/lib/seata-config-zk-2.0.0.jar
new file mode 100644
index 00000000..1b8d7183
Binary files /dev/null and b/seata/lib/seata-config-zk-2.0.0.jar differ
diff --git a/seata/lib/seata-console-2.0.0.jar b/seata/lib/seata-console-2.0.0.jar
new file mode 100644
index 00000000..1fd11fcc
Binary files /dev/null and b/seata/lib/seata-console-2.0.0.jar differ
diff --git a/seata/lib/seata-core-2.0.0.jar b/seata/lib/seata-core-2.0.0.jar
new file mode 100644
index 00000000..dc5af8c0
Binary files /dev/null and b/seata/lib/seata-core-2.0.0.jar differ
diff --git a/seata/lib/seata-discovery-all-2.0.0.jar b/seata/lib/seata-discovery-all-2.0.0.jar
new file mode 100644
index 00000000..33ff5025
Binary files /dev/null and b/seata/lib/seata-discovery-all-2.0.0.jar differ
diff --git a/seata/lib/seata-discovery-consul-2.0.0.jar b/seata/lib/seata-discovery-consul-2.0.0.jar
new file mode 100644
index 00000000..24f714fb
Binary files /dev/null and b/seata/lib/seata-discovery-consul-2.0.0.jar differ
diff --git a/seata/lib/seata-discovery-core-2.0.0.jar b/seata/lib/seata-discovery-core-2.0.0.jar
new file mode 100644
index 00000000..728a9462
Binary files /dev/null and b/seata/lib/seata-discovery-core-2.0.0.jar differ
diff --git a/seata/lib/seata-discovery-custom-2.0.0.jar b/seata/lib/seata-discovery-custom-2.0.0.jar
new file mode 100644
index 00000000..d634715d
Binary files /dev/null and b/seata/lib/seata-discovery-custom-2.0.0.jar differ
diff --git a/seata/lib/seata-discovery-etcd3-2.0.0.jar b/seata/lib/seata-discovery-etcd3-2.0.0.jar
new file mode 100644
index 00000000..e41668c2
Binary files /dev/null and b/seata/lib/seata-discovery-etcd3-2.0.0.jar differ
diff --git a/seata/lib/seata-discovery-eureka-2.0.0.jar b/seata/lib/seata-discovery-eureka-2.0.0.jar
new file mode 100644
index 00000000..acff19e9
Binary files /dev/null and b/seata/lib/seata-discovery-eureka-2.0.0.jar differ
diff --git a/seata/lib/seata-discovery-nacos-2.0.0.jar b/seata/lib/seata-discovery-nacos-2.0.0.jar
new file mode 100644
index 00000000..9ed79e1a
Binary files /dev/null and b/seata/lib/seata-discovery-nacos-2.0.0.jar differ
diff --git a/seata/lib/seata-discovery-redis-2.0.0.jar b/seata/lib/seata-discovery-redis-2.0.0.jar
new file mode 100644
index 00000000..5ff4bcce
Binary files /dev/null and b/seata/lib/seata-discovery-redis-2.0.0.jar differ
diff --git a/seata/lib/seata-discovery-sofa-2.0.0.jar b/seata/lib/seata-discovery-sofa-2.0.0.jar
new file mode 100644
index 00000000..17fc9d8d
Binary files /dev/null and b/seata/lib/seata-discovery-sofa-2.0.0.jar differ
diff --git a/seata/lib/seata-discovery-zk-2.0.0.jar b/seata/lib/seata-discovery-zk-2.0.0.jar
new file mode 100644
index 00000000..69316c9a
Binary files /dev/null and b/seata/lib/seata-discovery-zk-2.0.0.jar differ
diff --git a/seata/lib/seata-metrics-all-2.0.0.jar b/seata/lib/seata-metrics-all-2.0.0.jar
new file mode 100644
index 00000000..de512631
Binary files /dev/null and b/seata/lib/seata-metrics-all-2.0.0.jar differ
diff --git a/seata/lib/seata-metrics-api-2.0.0.jar b/seata/lib/seata-metrics-api-2.0.0.jar
new file mode 100644
index 00000000..39b18353
Binary files /dev/null and b/seata/lib/seata-metrics-api-2.0.0.jar differ
diff --git a/seata/lib/seata-metrics-core-2.0.0.jar b/seata/lib/seata-metrics-core-2.0.0.jar
new file mode 100644
index 00000000..59b85950
Binary files /dev/null and b/seata/lib/seata-metrics-core-2.0.0.jar differ
diff --git a/seata/lib/seata-metrics-exporter-prometheus-2.0.0.jar b/seata/lib/seata-metrics-exporter-prometheus-2.0.0.jar
new file mode 100644
index 00000000..1c0f6d14
Binary files /dev/null and b/seata/lib/seata-metrics-exporter-prometheus-2.0.0.jar differ
diff --git a/seata/lib/seata-metrics-registry-compact-2.0.0.jar b/seata/lib/seata-metrics-registry-compact-2.0.0.jar
new file mode 100644
index 00000000..a8344282
Binary files /dev/null and b/seata/lib/seata-metrics-registry-compact-2.0.0.jar differ
diff --git a/seata/lib/seata-serializer-all-2.0.0.jar b/seata/lib/seata-serializer-all-2.0.0.jar
new file mode 100644
index 00000000..530bed1a
Binary files /dev/null and b/seata/lib/seata-serializer-all-2.0.0.jar differ
diff --git a/seata/lib/seata-serializer-hessian-2.0.0.jar b/seata/lib/seata-serializer-hessian-2.0.0.jar
new file mode 100644
index 00000000..537cf5e3
Binary files /dev/null and b/seata/lib/seata-serializer-hessian-2.0.0.jar differ
diff --git a/seata/lib/seata-serializer-kryo-2.0.0.jar b/seata/lib/seata-serializer-kryo-2.0.0.jar
new file mode 100644
index 00000000..962de9ce
Binary files /dev/null and b/seata/lib/seata-serializer-kryo-2.0.0.jar differ
diff --git a/seata/lib/seata-serializer-protobuf-2.0.0.jar b/seata/lib/seata-serializer-protobuf-2.0.0.jar
new file mode 100644
index 00000000..306e7768
Binary files /dev/null and b/seata/lib/seata-serializer-protobuf-2.0.0.jar differ
diff --git a/seata/lib/seata-serializer-seata-2.0.0.jar b/seata/lib/seata-serializer-seata-2.0.0.jar
new file mode 100644
index 00000000..38513c65
Binary files /dev/null and b/seata/lib/seata-serializer-seata-2.0.0.jar differ
diff --git a/seata/lib/seata-spring-autoconfigure-core-2.0.0.jar b/seata/lib/seata-spring-autoconfigure-core-2.0.0.jar
new file mode 100644
index 00000000..92b1cb15
Binary files /dev/null and b/seata/lib/seata-spring-autoconfigure-core-2.0.0.jar differ
diff --git a/seata/lib/seata-spring-autoconfigure-server-2.0.0.jar b/seata/lib/seata-spring-autoconfigure-server-2.0.0.jar
new file mode 100644
index 00000000..8c84fe93
Binary files /dev/null and b/seata/lib/seata-spring-autoconfigure-server-2.0.0.jar differ
diff --git a/seata/lib/servo-core-0.12.21.jar b/seata/lib/servo-core-0.12.21.jar
new file mode 100644
index 00000000..731431d1
Binary files /dev/null and b/seata/lib/servo-core-0.12.21.jar differ
diff --git a/seata/lib/simpleclient-0.15.0.jar b/seata/lib/simpleclient-0.15.0.jar
new file mode 100644
index 00000000..b6d23482
Binary files /dev/null and b/seata/lib/simpleclient-0.15.0.jar differ
diff --git a/seata/lib/simpleclient_common-0.15.0.jar b/seata/lib/simpleclient_common-0.15.0.jar
new file mode 100644
index 00000000..7580a8c0
Binary files /dev/null and b/seata/lib/simpleclient_common-0.15.0.jar differ
diff --git a/seata/lib/simpleclient_httpserver-0.15.0.jar b/seata/lib/simpleclient_httpserver-0.15.0.jar
new file mode 100644
index 00000000..a0cf9f3c
Binary files /dev/null and b/seata/lib/simpleclient_httpserver-0.15.0.jar differ
diff --git a/seata/lib/simpleclient_tracer_common-0.15.0.jar b/seata/lib/simpleclient_tracer_common-0.15.0.jar
new file mode 100644
index 00000000..92b1a2f2
Binary files /dev/null and b/seata/lib/simpleclient_tracer_common-0.15.0.jar differ
diff --git a/seata/lib/simpleclient_tracer_otel-0.15.0.jar b/seata/lib/simpleclient_tracer_otel-0.15.0.jar
new file mode 100644
index 00000000..1cfefd16
Binary files /dev/null and b/seata/lib/simpleclient_tracer_otel-0.15.0.jar differ
diff --git a/seata/lib/simpleclient_tracer_otel_agent-0.15.0.jar b/seata/lib/simpleclient_tracer_otel_agent-0.15.0.jar
new file mode 100644
index 00000000..b33308a7
Binary files /dev/null and b/seata/lib/simpleclient_tracer_otel_agent-0.15.0.jar differ
diff --git a/seata/lib/slf4j-api-1.7.36.jar b/seata/lib/slf4j-api-1.7.36.jar
new file mode 100644
index 00000000..7d3ce68d
Binary files /dev/null and b/seata/lib/slf4j-api-1.7.36.jar differ
diff --git a/seata/lib/snakeyaml-2.0.jar b/seata/lib/snakeyaml-2.0.jar
new file mode 100644
index 00000000..469b0430
Binary files /dev/null and b/seata/lib/snakeyaml-2.0.jar differ
diff --git a/seata/lib/snappy-java-1.1.8.4.jar b/seata/lib/snappy-java-1.1.8.4.jar
new file mode 100644
index 00000000..aa5231eb
Binary files /dev/null and b/seata/lib/snappy-java-1.1.8.4.jar differ
diff --git a/seata/lib/sofa-common-tools-1.0.12.jar b/seata/lib/sofa-common-tools-1.0.12.jar
new file mode 100644
index 00000000..d28e2343
Binary files /dev/null and b/seata/lib/sofa-common-tools-1.0.12.jar differ
diff --git a/seata/lib/spring-aop-5.3.30.jar b/seata/lib/spring-aop-5.3.30.jar
new file mode 100644
index 00000000..df9e3ef4
Binary files /dev/null and b/seata/lib/spring-aop-5.3.30.jar differ
diff --git a/seata/lib/spring-beans-5.3.30.jar b/seata/lib/spring-beans-5.3.30.jar
new file mode 100644
index 00000000..772d69d4
Binary files /dev/null and b/seata/lib/spring-beans-5.3.30.jar differ
diff --git a/seata/lib/spring-boot-2.7.17.jar b/seata/lib/spring-boot-2.7.17.jar
new file mode 100644
index 00000000..fd8e0ef7
Binary files /dev/null and b/seata/lib/spring-boot-2.7.17.jar differ
diff --git a/seata/lib/spring-boot-autoconfigure-2.7.17.jar b/seata/lib/spring-boot-autoconfigure-2.7.17.jar
new file mode 100644
index 00000000..5ae6cfc2
Binary files /dev/null and b/seata/lib/spring-boot-autoconfigure-2.7.17.jar differ
diff --git a/seata/lib/spring-boot-starter-2.7.17.jar b/seata/lib/spring-boot-starter-2.7.17.jar
new file mode 100644
index 00000000..ff72c502
Binary files /dev/null and b/seata/lib/spring-boot-starter-2.7.17.jar differ
diff --git a/seata/lib/spring-boot-starter-json-2.7.17.jar b/seata/lib/spring-boot-starter-json-2.7.17.jar
new file mode 100644
index 00000000..5509a30b
Binary files /dev/null and b/seata/lib/spring-boot-starter-json-2.7.17.jar differ
diff --git a/seata/lib/spring-boot-starter-logging-2.7.17.jar b/seata/lib/spring-boot-starter-logging-2.7.17.jar
new file mode 100644
index 00000000..b76223e6
Binary files /dev/null and b/seata/lib/spring-boot-starter-logging-2.7.17.jar differ
diff --git a/seata/lib/spring-boot-starter-security-2.7.17.jar b/seata/lib/spring-boot-starter-security-2.7.17.jar
new file mode 100644
index 00000000..f1b0578f
Binary files /dev/null and b/seata/lib/spring-boot-starter-security-2.7.17.jar differ
diff --git a/seata/lib/spring-boot-starter-tomcat-2.7.17.jar b/seata/lib/spring-boot-starter-tomcat-2.7.17.jar
new file mode 100644
index 00000000..f3be8eda
Binary files /dev/null and b/seata/lib/spring-boot-starter-tomcat-2.7.17.jar differ
diff --git a/seata/lib/spring-boot-starter-web-2.7.17.jar b/seata/lib/spring-boot-starter-web-2.7.17.jar
new file mode 100644
index 00000000..bc7c0b92
Binary files /dev/null and b/seata/lib/spring-boot-starter-web-2.7.17.jar differ
diff --git a/seata/lib/spring-context-5.3.30.jar b/seata/lib/spring-context-5.3.30.jar
new file mode 100644
index 00000000..7d5483d9
Binary files /dev/null and b/seata/lib/spring-context-5.3.30.jar differ
diff --git a/seata/lib/spring-core-5.3.30.jar b/seata/lib/spring-core-5.3.30.jar
new file mode 100644
index 00000000..80650695
Binary files /dev/null and b/seata/lib/spring-core-5.3.30.jar differ
diff --git a/seata/lib/spring-expression-5.3.30.jar b/seata/lib/spring-expression-5.3.30.jar
new file mode 100644
index 00000000..f248a27c
Binary files /dev/null and b/seata/lib/spring-expression-5.3.30.jar differ
diff --git a/seata/lib/spring-jcl-5.3.30.jar b/seata/lib/spring-jcl-5.3.30.jar
new file mode 100644
index 00000000..ce31f759
Binary files /dev/null and b/seata/lib/spring-jcl-5.3.30.jar differ
diff --git a/seata/lib/spring-security-config-5.7.11.jar b/seata/lib/spring-security-config-5.7.11.jar
new file mode 100644
index 00000000..43ebe7ab
Binary files /dev/null and b/seata/lib/spring-security-config-5.7.11.jar differ
diff --git a/seata/lib/spring-security-core-5.7.11.jar b/seata/lib/spring-security-core-5.7.11.jar
new file mode 100644
index 00000000..8aa839d9
Binary files /dev/null and b/seata/lib/spring-security-core-5.7.11.jar differ
diff --git a/seata/lib/spring-security-crypto-5.7.11.jar b/seata/lib/spring-security-crypto-5.7.11.jar
new file mode 100644
index 00000000..68456ab3
Binary files /dev/null and b/seata/lib/spring-security-crypto-5.7.11.jar differ
diff --git a/seata/lib/spring-security-web-5.7.11.jar b/seata/lib/spring-security-web-5.7.11.jar
new file mode 100644
index 00000000..5e9ef0b8
Binary files /dev/null and b/seata/lib/spring-security-web-5.7.11.jar differ
diff --git a/seata/lib/spring-web-5.3.30.jar b/seata/lib/spring-web-5.3.30.jar
new file mode 100644
index 00000000..ff1bc946
Binary files /dev/null and b/seata/lib/spring-web-5.3.30.jar differ
diff --git a/seata/lib/spring-webmvc-5.3.30.jar b/seata/lib/spring-webmvc-5.3.30.jar
new file mode 100644
index 00000000..45664049
Binary files /dev/null and b/seata/lib/spring-webmvc-5.3.30.jar differ
diff --git a/seata/lib/stringtemplate-3.2.1.jar b/seata/lib/stringtemplate-3.2.1.jar
new file mode 100644
index 00000000..d0e11b71
Binary files /dev/null and b/seata/lib/stringtemplate-3.2.1.jar differ
diff --git a/seata/lib/tomcat-embed-core-9.0.82.jar b/seata/lib/tomcat-embed-core-9.0.82.jar
new file mode 100644
index 00000000..4e84690f
Binary files /dev/null and b/seata/lib/tomcat-embed-core-9.0.82.jar differ
diff --git a/seata/lib/tomcat-embed-el-9.0.82.jar b/seata/lib/tomcat-embed-el-9.0.82.jar
new file mode 100644
index 00000000..0815ee60
Binary files /dev/null and b/seata/lib/tomcat-embed-el-9.0.82.jar differ
diff --git a/seata/lib/tomcat-embed-websocket-9.0.82.jar b/seata/lib/tomcat-embed-websocket-9.0.82.jar
new file mode 100644
index 00000000..9b7cc999
Binary files /dev/null and b/seata/lib/tomcat-embed-websocket-9.0.82.jar differ
diff --git a/seata/lib/xstream-1.4.20.jar b/seata/lib/xstream-1.4.20.jar
new file mode 100644
index 00000000..a8f7cd80
Binary files /dev/null and b/seata/lib/xstream-1.4.20.jar differ
diff --git a/seata/lib/zkclient-0.11.jar b/seata/lib/zkclient-0.11.jar
new file mode 100644
index 00000000..dba04fb0
Binary files /dev/null and b/seata/lib/zkclient-0.11.jar differ
diff --git a/seata/lib/zookeeper-3.5.9.jar b/seata/lib/zookeeper-3.5.9.jar
new file mode 100644
index 00000000..f5eceaab
Binary files /dev/null and b/seata/lib/zookeeper-3.5.9.jar differ
diff --git a/seata/lib/zookeeper-jute-3.5.9.jar b/seata/lib/zookeeper-jute-3.5.9.jar
new file mode 100644
index 00000000..3c9c184a
Binary files /dev/null and b/seata/lib/zookeeper-jute-3.5.9.jar differ
diff --git a/seata/lib/zstd-jni-1.5.0-4.jar b/seata/lib/zstd-jni-1.5.0-4.jar
new file mode 100644
index 00000000..f51ad882
Binary files /dev/null and b/seata/lib/zstd-jni-1.5.0-4.jar differ
diff --git a/seata/logs/start.out b/seata/logs/start.out
new file mode 100644
index 00000000..84d9c401
--- /dev/null
+++ b/seata/logs/start.out
@@ -0,0 +1,2 @@
+/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/bin/java -server -Dloader.path=../lib -Xmx2048m -Xms2048m -Xmn1024m -Xss512k -XX:SurvivorRatio=10 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:MaxDirectMemorySize=1024m -XX:-OmitStackTraceInFastThrow -XX:-UseAdaptiveSizePolicy -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/min.ji/Git/github/seata/distribution/logs/java_heapdump.hprof -XX:+DisableExplicitGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -Xloggc:/Users/min.ji/Git/github/seata/distribution/logs/seata_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dio.netty.leakDetectionLevel=advanced -Dapp.name=seata-server -Dapp.pid=68288 -Dapp.home=/Users/min.ji/Git/github/seata/distribution -Dbasedir=/Users/min.ji/Git/github/seata/distribution -Dspring.config.location=/Users/min.ji/Git/github/seata/distribution/conf/application.yml -Dlogging.config=/Users/min.ji/Git/github/seata/distribution/conf/logback-spring.xml -jar /Users/min.ji/Git/github/seata/distribution/target/seata-server.jar
+Error: Unable to access jarfile /Users/min.ji/Git/github/seata/distribution/target/seata-server.jar
diff --git a/seata/script/config-center/README.md b/seata/script/config-center/README.md
new file mode 100644
index 00000000..b255d6fa
--- /dev/null
+++ b/seata/script/config-center/README.md
@@ -0,0 +1,274 @@
+# Script usage demo
+
+
+## important attributes
+
+you only need to follow the instructions below and keep the corresponding configuration in 'config.txt' to run. For more configuration information, please visit [seata.io](https://seata.io/)
+
+| server | client |
+| ------------------------ | ------------------------------------------------------------ |
+| store.mode: file,db | config.type: file、nacos 、apollo、zk、consul、etcd3、custom |
+| #only db: | #only file: |
+| store.db.driverClassName | service.default.grouplist |
+| store.db.url | #All: |
+| store.db.user | service.vgroupMapping.default_tx_group |
+| store.db.password | service.disableGlobalTransaction |
+
+## Script Introduction
+
+The Script has interactive and non-interactive configuration modes,different patterns are distinguished by different file names.
+
+interactive mode(*-config-interactive.sh or *-config-interactive.py): the script starts the config program in interactive mode on the command line, prompting you for each option.
+
+non-interactive mode(*-config.sh or *-config.py): the script use additional config options to specify values for the options you choose during interactive mode, thus scripting the config process.
+
+## Nacos
+
+shell:
+
+- Interactive Mode
+
+```bash
+sh ${SEATAPATH}/script/config-center/nacos/nacos-config-interactive.sh
+```
+
+This command will generate interactive configuration mode, eg:
+
+```
+Please enter the host of nacos.
+请输入nacos的host [localhost]:
+>>>
+Please enter the port of nacos.
+请输入nacos的port [8848]:
+>>>
+Please enter the group of nacos.
+请输入nacos的group [SEATA_GROUP]:
+>>>
+Please enter the tenant of nacos.
+请输入nacos的tenant:
+>>>
+Please enter the username of nacos.
+请输入nacos的username:
+>>>
+Please enter the password of nacos.
+请输入nacos的password:
+>>>
+Are you sure to continue? [y/n]
+```
+
+- Non-Interactive Mode
+
+```bash
+sh ${SEATAPATH}/script/config-center/nacos/nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 5a3c7d6c-f497-4d68-a71a-2e5e3340b3ca -u username -w password
+```
+
+python:
+
+- Interactive Mode
+
+
+```bash
+python ${SEATAPATH}/script/config-center/nacos/nacos-config-interactive.py
+```
+
+This command will generate interactive configuration mode like nacos-config-interactive.sh.
+
+- Non-Interactive Mode
+
+
+```bash
+python ${SEATAPATH}/script/config-center/nacos/nacos-config.py localhost:8848
+```
+
+Parameter Description:
+
+-h: host, the default value is localhost.
+
+-p: port, the default value is 8848.
+
+-g: Configure grouping, the default value is 'SEATA_GROUP'.
+
+-t: Tenant information, corresponding to the namespace ID field of Nacos, the default value is ''.
+
+-u: username, nacos 1.2.0+ on permission control, the default value is ''.
+
+-w: password, nacos 1.2.0+ on permission control, the default value is ''.
+
+## Apollo
+
+- Interactive Mode
+
+
+```bash
+sh ${SEATAPATH}/script/config-center/apollo/apollo-config-interactive.sh
+```
+
+This command will generate interactive configuration mode, eg:
+
+```
+Please enter the host of apollo.
+请输入apollo的host [localhost]:
+>>>
+Please enter the port of apollo.
+请输入apollo的port [8070]:
+>>>
+Please enter the env of apollo.
+请输入apollo的env [DEV]:
+>>>
+Please enter the appId of apollo.
+请输入apollo的appId [seata-server]:
+>>>
+Please enter the clusterName of apollo.
+请输入apollo的clusterName [default]:
+>>>
+Please enter the namespaceName of apollo.
+请输入apollo的namespaceName [application]:
+>>>
+Please enter the dataChangeCreatedBy of apollo.
+请输入apollo的dataChangeCreatedBy:
+>>>
+Please enter the releasedBy of apollo.
+请输入apollo的releasedBy:
+>>>
+Please enter the token of apollo.
+请输入apollo的token:
+>>>
+Are you sure to continue? [y/n]
+```
+
+- Non-Interactive Mode
+
+
+```bash
+sh ${SEATAPATH}/script/config-center/apollo/apollo-config.sh -h localhost -p 8070 -e DEV -a seata-server -c default -n application -d apollo -r apollo -t 3aa026fc8435d0fc4505b345b8fa4578fb646a2c
+```
+Parameter Description:
+
+-h: host, the default value is localhost.
+
+-p: port, the default value is 8070.
+
+-e: Managed configuration environment, the default value is DEV.
+
+-a: AppId to which the namespace belongs, the default value is seata-server.
+
+-c: Managed configuration cluster name, Generally, you can pass in default. If it is a special cluster, just pass in the name of the corresponding cluster,the default value is default.
+
+-n: Name of the managed namespace, If the format is not properties, you need to add a suffix name, such as sample.yml, the default value is application.
+
+-d: The creator of the item, in the format of a domain account, which is the User ID of the sso system.
+
+-r: Publisher, domain account, note: if namespace.lock.switch in ApolloConfigDB.ServerConfig is set to true (default is false), Then the environment does not allow the publisher and editor to be the same person. So if the editor is zhangsan, the publisher can no longer be zhangsan.
+
+-t: Apollo admin creates third-party applications in http://{portal_address}/open/manage.html, It is best to check whether this AppId has been created before creation. After successful creation, a token will be generated.
+
+For details of the above parameter descriptions, please see:
+
+https://github.com/ctripcorp/apollo/wiki/Apollo%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0
+
+## Consul
+
+- Interactive Mode
+
+
+```bash
+sh ${SEATAPATH}/script/config-center/consul/consul-config-interactive.sh
+```
+
+This command will generate interactive configuration mode, eg:
+
+```
+Please enter the host of consul.
+请输入consul的host [localhost]:
+>>>
+Please enter the port of consul.
+请输入consul的port [8500]:
+>>>
+Are you sure to continue? [y/n]
+```
+
+- Non-Interactive Mode
+
+
+```bash
+sh ${SEATAPATH}/script/config-center/consul/consul-config.sh -h localhost -p 8500
+```
+
+Parameter Description:
+
+-h: host, the default value is localhost.
+
+-p: port, the default value is 8500.
+
+## Etcd3
+
+- Interactive Mode
+
+
+```bash
+sh ${SEATAPATH}/script/config-center/etcd3/etcd3-config-interactive.sh
+```
+
+This command will generate interactive configuration mode, eg:
+
+```
+Please enter the host of etcd3.
+请输入etcd3的host [localhost]:"
+>>>
+Please enter the port of etcd3.
+请输入etcd3的port [2379]:
+>>>
+Are you sure to continue? [y/n]
+```
+
+- Non-Interactive Mode
+
+
+```bash
+sh ${SEATAPATH}/script/config-center/etcd3/etcd3-config.sh -h localhost -p 2379
+```
+
+Parameter Description:
+
+-h: host, the default value is localhost.
+
+-p: port, the default value is 2379.
+
+## ZK
+
+- Interactive Mode
+
+
+```bash
+sh ${SEATAPATH}/script/config-center/zk/zk-config-interactive.sh
+```
+
+This command will generate interactive configuration mode, eg:
+
+```
+Please enter the host of zookeeper.
+请输入zookeeper的host [localhost]:
+>>>
+Please enter the port of zookeeper.
+请输入zookeeper的port [2181]:
+>>>
+Please enter the zkHome of zookeeper.
+请输入zookeeper的zkHome:
+>>>
+Are you sure to continue? [y/n]
+```
+
+- Non-Interactive Mode
+
+
+```bash
+sh ${SEATAPATH}/script/config-center/zk/zk-config.sh -h localhost -p 2181 -z "/Users/zhangchenghui/zookeeper-3.4.14"
+```
+Parameter Description:
+
+-h: host, the default value is localhost.
+
+-p: port, the default value is 2181.
+
+-z: zk path.
+
diff --git a/seata/script/config-center/apollo/apollo-config-interactive.sh b/seata/script/config-center/apollo/apollo-config-interactive.sh
new file mode 100644
index 00000000..a97dbd56
--- /dev/null
+++ b/seata/script/config-center/apollo/apollo-config-interactive.sh
@@ -0,0 +1,152 @@
+#!/usr/bin/env bash
+# Copyright 1999-2019 Seata.io Group.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at、
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# apollo open api, click on the link for details:
+# https://github.com/ctripcorp/apollo/wiki/Apollo%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0
+
+# add config: http://{portal_address}/openapi/v1/envs/{env}/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/items
+# publish config: http://{portal_address}/openapi/v1/envs/{env}/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/releases
+
+echo -e "Please enter the host of apollo.\n请输入apollo的host [localhost]:"
+read -p ">>> " host
+echo -e "Please enter the port of apollo.\n请输入apollo的port [8070]:"
+read -p ">>> " port
+echo -e "Please enter the env of apollo.\n请输入apollo的env [DEV]:"
+read -p ">>> " env
+echo -e "Please enter the appId of apollo.\n请输入apollo的appId [seata-server]:"
+read -p ">>> " appId
+echo -e "Please enter the clusterName of apollo.\n请输入apollo的clusterName [default]:"
+read -p ">>> " clusterName
+echo -e "Please enter the namespaceName of apollo.\n请输入apollo的namespaceName [application]:"
+read -p ">>> " namespaceName
+echo -e "Please enter the dataChangeCreatedBy of apollo.\n请输入apollo的dataChangeCreatedBy:"
+read -p ">>> " dataChangeCreatedBy
+echo -e "Please enter the releasedBy of apollo.\n请输入apollo的releasedBy:"
+read -p ">>> " releasedBy
+echo -e "Please enter the token of apollo.\n请输入apollo的token:"
+read -p ">>> " token
+read -p "Are you sure to continue? [y/n]" input
+case $input in
+ [yY]*)
+ if [[ -z ${host} ]]; then
+ host=localhost
+ fi
+ if [[ -z ${port} ]]; then
+ port=8070
+ fi
+ if [[ -z ${env} ]]; then
+ env=DEV
+ fi
+ if [[ -z ${appId} ]]; then
+ appId=seata-server
+ fi
+ if [[ -z ${clusterName} ]]; then
+ clusterName=default
+ fi
+ if [[ -z ${namespaceName} ]]; then
+ namespaceName=application
+ fi
+ if [[ -z ${dataChangeCreatedBy} ]]; then
+ echo " dataChangeCreatedBy is empty, please input it "
+ exit 1
+ fi
+ if [[ -z ${releasedBy} ]]; then
+ echo " releasedBy is empty, please input it "
+ exit 1
+ fi
+ if [[ -z ${token} ]]; then
+ echo " token is empty, please input it "
+ exit 1
+ fi
+ ;;
+ [nN]*)
+ exit
+ ;;
+ *)
+ echo "Just enter y or n, please."
+ exit
+ ;;
+esac
+
+portalAddr=$host:$port
+contentType="content-type:application/json;charset=UTF-8"
+authorization="Authorization:$token"
+publishBody="{\"releaseTitle\":\"$(date +%Y%m%d%H%M%S)\",\"releaseComment\":\"\",\"releasedBy\":\"${releasedBy}\"}"
+
+echo "portalAddr is ${portalAddr}"
+echo "env is ${env}"
+echo "appId is ${appId}"
+echo "clusterName is ${clusterName}"
+echo "namespaceName is ${namespaceName}"
+echo "dataChangeCreatedBy is ${dataChangeCreatedBy}"
+echo "releasedBy is ${releasedBy}"
+echo "token is ${token}"
+
+failCount=0
+tempLog=$(mktemp -u)
+function addConfig() {
+ curl -X POST -H "${1}" -H "${2}" -d "${3}" "http://${4}/openapi/v1/envs/${5}/apps/${6}/clusters/${7}/namespaces/${8}/items" >"${tempLog}" 2>/dev/null
+ log=$(cat "${tempLog}")
+ if [[ ${log} =~ ":401" || ${log} =~ ":403"
+ || ${log} =~ ":404" || ${log} =~ ":405"
+ || ${log} =~ ":500" || ! ${log} =~ "{" ]]; then
+ echo "set $9=${10} failure "
+ (( failCount++ ))
+ else
+ echo "set $9=${10} successfully "
+ fi
+}
+
+function publishConfig() {
+ curl -X POST -H "${1}" -H "${2}" -d "${3}" "http://${4}/openapi/v1/envs/${5}/apps/${6}/clusters/${7}/namespaces/${8}/releases" >"${tempLog}" 2>/dev/null
+ log=$(cat "${tempLog}")
+ if [[ ${log} =~ ":401" || ${log} =~ ":403"
+ || ${log} =~ ":404" || ${log} =~ ":405"
+ || ${log} =~ ":500" || ! ${log} =~ "{" ]]; then
+ echo " Publish fail "
+ exit 1
+ else
+ echo " Publish successfully, please start seata-server. "
+ fi
+}
+
+count=0
+COMMENT_START="#"
+for line in $(cat $(dirname "$PWD")/config.txt | sed s/[[:space:]]//g); do
+ if [[ "$line" =~ ^"${COMMENT_START}".* ]]; then
+ continue
+ fi
+ (( count++ ))
+ key=${line%%=*}
+ value=${line#*=}
+ body="{\"key\":\"${key}\",\"value\":\"${value}\",\"comment\":\"\",\"dataChangeCreatedBy\":\"${dataChangeCreatedBy}\"}"
+ addConfig ${contentType} "${authorization}" "${body}" "${portalAddr}" "${env}" "${appId}" "${clusterName}" "${namespaceName}" "${key}" "${value}"
+done
+
+echo "========================================================================="
+echo " Complete initialization parameters, total-count:$count , failure-count:$failCount "
+echo "========================================================================="
+
+if [[ $failCount -eq 0 ]]; then
+ read -p "Publish now, y/n: " result
+ if [[ ${result} == "y" ]]; then
+ publishConfig "${contentType}" "${authorization}" "${publishBody}" "${portalAddr}" "${env}" "${appId}" "${clusterName}" "${namespaceName}"
+ else
+ echo "Remember to publish later..."
+ fi
+else
+ echo " init apollo config fail. "
+fi
diff --git a/seata/script/config-center/apollo/apollo-config.sh b/seata/script/config-center/apollo/apollo-config.sh
new file mode 100644
index 00000000..e02b2b50
--- /dev/null
+++ b/seata/script/config-center/apollo/apollo-config.sh
@@ -0,0 +1,159 @@
+#!/usr/bin/env bash
+# Copyright 1999-2019 Seata.io Group.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at、
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# apollo open api, click on the link for details:
+# https://github.com/ctripcorp/apollo/wiki/Apollo%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0
+
+# add config: http://{portal_address}/openapi/v1/envs/{env}/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/items
+# publish config: http://{portal_address}/openapi/v1/envs/{env}/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/releases
+
+while getopts ":h:p:e:a:c:n:d:r:t:" opt
+do
+ case $opt in
+ h)
+ host=$OPTARG
+ ;;
+ p)
+ port=$OPTARG
+ ;;
+ e)
+ env=$OPTARG
+ ;;
+ a)
+ appId=$OPTARG
+ ;;
+ c)
+ clusterName=$OPTARG
+ ;;
+ n)
+ namespaceName=$OPTARG
+ ;;
+ d)
+ dataChangeCreatedBy=$OPTARG
+ ;;
+ r)
+ releasedBy=$OPTARG
+ ;;
+ t)
+ token=$OPTARG
+ ;;
+ ?)
+ echo " USAGE OPTION: $0 [-h host] [-p port] [-e env] [a appId] [-c clusterName] [-n namespaceName] [-d dataChangeCreatedBy] [-r releasedBy] [-t token] "
+ exit 1
+ ;;
+ esac
+done
+
+if [[ -z ${host} ]]; then
+ host=localhost
+fi
+if [[ -z ${port} ]]; then
+ port=8070
+fi
+if [[ -z ${env} ]]; then
+ env=DEV
+fi
+if [[ -z ${appId} ]]; then
+ appId=seata-server
+fi
+if [[ -z ${clusterName} ]]; then
+ clusterName=default
+fi
+if [[ -z ${namespaceName} ]]; then
+ namespaceName=application
+fi
+if [[ -z ${dataChangeCreatedBy} ]]; then
+ echo " dataChangeCreatedBy is empty, please usage option: [-d dataChangeCreatedBy] "
+ exit 1
+fi
+if [[ -z ${releasedBy} ]]; then
+ echo " releasedBy is empty, please usage option: [-r releasedBy] "
+ exit 1
+fi
+if [[ -z ${token} ]]; then
+ echo " token is empty, please usage option: [-t token] "
+ exit 1
+fi
+
+portalAddr=$host:$port
+contentType="content-type:application/json;charset=UTF-8"
+authorization="Authorization:$token"
+publishBody="{\"releaseTitle\":\"$(date +%Y%m%d%H%M%S)\",\"releaseComment\":\"\",\"releasedBy\":\"${releasedBy}\"}"
+
+echo "portalAddr is ${portalAddr}"
+echo "env is ${env}"
+echo "appId is ${appId}"
+echo "clusterName is ${clusterName}"
+echo "namespaceName is ${namespaceName}"
+echo "dataChangeCreatedBy is ${dataChangeCreatedBy}"
+echo "releasedBy is ${releasedBy}"
+echo "token is ${token}"
+
+failCount=0
+tempLog=$(mktemp -u)
+function addConfig() {
+ curl -X POST -H "${1}" -H "${2}" -d "${3}" "http://${4}/openapi/v1/envs/${5}/apps/${6}/clusters/${7}/namespaces/${8}/items" >"${tempLog}" 2>/dev/null
+ log=$(cat "${tempLog}")
+ if [[ ${log} =~ ":401" || ${log} =~ ":403"
+ || ${log} =~ ":404" || ${log} =~ ":405"
+ || ${log} =~ ":500" || ! ${log} =~ "{" ]]; then
+ echo "set $9=${10} failure "
+ (( failCount++ ))
+ else
+ echo "set $9=${10} successfully "
+ fi
+}
+
+function publishConfig() {
+ curl -X POST -H "${1}" -H "${2}" -d "${3}" "http://${4}/openapi/v1/envs/${5}/apps/${6}/clusters/${7}/namespaces/${8}/releases" >"${tempLog}" 2>/dev/null
+ log=$(cat "${tempLog}")
+ if [[ ${log} =~ ":401" || ${log} =~ ":403"
+ || ${log} =~ ":404" || ${log} =~ ":405"
+ || ${log} =~ ":500" || ! ${log} =~ "{" ]]; then
+ echo " Publish fail "
+ exit 1
+ else
+ echo " Publish successfully, please start seata-server. "
+ fi
+}
+
+count=0
+COMMENT_START="#"
+for line in $(cat $(dirname "$PWD")/config.txt | sed s/[[:space:]]//g); do
+ if [[ "$line" =~ ^"${COMMENT_START}".* ]]; then
+ continue
+ fi
+ (( count++ ))
+ key=${line%%=*}
+ value=${line#*=}
+ body="{\"key\":\"${key}\",\"value\":\"${value}\",\"comment\":\"\",\"dataChangeCreatedBy\":\"${dataChangeCreatedBy}\"}"
+ addConfig ${contentType} "${authorization}" "${body}" "${portalAddr}" "${env}" "${appId}" "${clusterName}" "${namespaceName}" "${key}" "${value}"
+done
+
+echo "========================================================================="
+echo " Complete initialization parameters, total-count:$count , failure-count:$failCount "
+echo "========================================================================="
+
+if [[ $failCount -eq 0 ]]; then
+ read -p "Publish now, y/n: " result
+ if [[ ${result} == "y" ]]; then
+ publishConfig "${contentType}" "${authorization}" "${publishBody}" "${portalAddr}" "${env}" "${appId}" "${clusterName}" "${namespaceName}"
+ else
+ echo "Remember to publish later..."
+ fi
+else
+ echo " init apollo config fail. "
+fi
diff --git a/seata/script/config-center/config.txt b/seata/script/config-center/config.txt
new file mode 100644
index 00000000..8b3e5cba
--- /dev/null
+++ b/seata/script/config-center/config.txt
@@ -0,0 +1,153 @@
+#For details about configuration items, see https://seata.io/zh-cn/docs/user/configurations.html
+#Transport configuration, for client and server
+transport.type=TCP
+transport.server=NIO
+transport.heartbeat=true
+transport.enableTmClientBatchSendRequest=false
+transport.enableRmClientBatchSendRequest=true
+transport.enableTmClientChannelCheckFailFast=true
+transport.enableRmClientChannelCheckFailFast=true
+transport.enableTcServerBatchSendResponse=false
+transport.rpcRmRequestTimeout=30000
+transport.rpcTmRequestTimeout=30000
+transport.rpcTcRequestTimeout=30000
+transport.threadFactory.bossThreadPrefix=NettyBoss
+transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
+transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
+transport.threadFactory.shareBossWorker=false
+transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
+transport.threadFactory.clientSelectorThreadSize=1
+transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
+transport.threadFactory.bossThreadSize=1
+transport.threadFactory.workerThreadSize=default
+transport.shutdown.wait=3
+transport.serialization=seata
+transport.compressor=none
+
+#Transaction routing rules configuration, only for the client
+service.vgroupMapping.default_tx_group=default
+#If you use a registry, you can ignore it
+service.default.grouplist=127.0.0.1:8091
+service.enableDegrade=false
+service.disableGlobalTransaction=false
+
+client.metadataMaxAgeMs=30000
+#Transaction rule configuration, only for the client
+client.rm.asyncCommitBufferLimit=10000
+client.rm.lock.retryInterval=10
+client.rm.lock.retryTimes=30
+client.rm.lock.retryPolicyBranchRollbackOnConflict=true
+client.rm.reportRetryCount=5
+client.rm.tableMetaCheckEnable=true
+client.rm.tableMetaCheckerInterval=60000
+client.rm.sqlParserType=druid
+client.rm.reportSuccessEnable=false
+client.rm.sagaBranchRegisterEnable=false
+client.rm.sagaJsonParser=fastjson
+client.rm.tccActionInterceptorOrder=-2147482648
+client.rm.sqlParserType=druid
+client.tm.commitRetryCount=5
+client.tm.rollbackRetryCount=5
+client.tm.defaultGlobalTransactionTimeout=60000
+client.tm.degradeCheck=false
+client.tm.degradeCheckAllowTimes=10
+client.tm.degradeCheckPeriod=2000
+client.tm.interceptorOrder=-2147482648
+client.undo.dataValidation=true
+client.undo.logSerialization=jackson
+client.undo.onlyCareUpdateColumns=true
+server.undo.logSaveDays=7
+server.undo.logDeletePeriod=86400000
+client.undo.logTable=undo_log
+client.undo.compress.enable=true
+client.undo.compress.type=zip
+client.undo.compress.threshold=64k
+#For TCC transaction mode
+tcc.fence.logTableName=tcc_fence_log
+tcc.fence.cleanPeriod=1h
+# You can choose from the following options: fastjson, jackson, gson
+tcc.contextJsonParserType=fastjson
+
+#Log rule configuration, for client and server
+log.exceptionRate=100
+
+#Transaction storage configuration, only for the server. The file, db, and redis configuration values are optional.
+store.mode=db
+store.lock.mode=db
+store.session.mode=db
+#Used for password encryption
+store.publicKey=
+
+#If `store.mode,store.lock.mode,store.session.mode` are not equal to `file`, you can remove the configuration block.
+store.file.dir=file_store/data
+store.file.maxBranchSessionSize=16384
+store.file.maxGlobalSessionSize=512
+store.file.fileWriteBufferCacheSize=16384
+store.file.flushDiskMode=async
+store.file.sessionReloadReadSize=100
+
+#These configurations are required if the `store mode` is `db`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `db`, you can remove the configuration block.
+store.db.datasource=druid
+store.db.dbType=mysql
+store.db.driverClassName=com.mysql.jdbc.Driver
+store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true
+store.db.user=root
+store.db.password=root
+store.db.minConn=5
+store.db.maxConn=30
+store.db.globalTable=global_table
+store.db.branchTable=branch_table
+store.db.distributedLockTable=distributed_lock
+store.db.queryLimit=100
+store.db.lockTable=lock_table
+store.db.maxWait=5000
+
+#These configurations are required if the `store mode` is `redis`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `redis`, you can remove the configuration block.
+store.redis.mode=single
+store.redis.type=pipeline
+store.redis.single.host=127.0.0.1
+store.redis.single.port=6379
+store.redis.sentinel.masterName=
+store.redis.sentinel.sentinelHosts=
+store.redis.sentinel.sentinelPassword=
+store.redis.maxConn=10
+store.redis.minConn=1
+store.redis.maxTotal=100
+store.redis.database=0
+store.redis.password=
+store.redis.queryLimit=100
+
+#Transaction rule configuration, only for the server
+server.recovery.committingRetryPeriod=1000
+server.recovery.asynCommittingRetryPeriod=1000
+server.recovery.rollbackingRetryPeriod=1000
+server.recovery.timeoutRetryPeriod=1000
+server.maxCommitRetryTimeout=-1
+server.maxRollbackRetryTimeout=-1
+server.rollbackRetryTimeoutUnlockEnable=false
+server.distributedLockExpireTime=10000
+server.session.branchAsyncQueueSize=5000
+server.session.enableBranchAsyncRemove=false
+server.enableParallelRequestHandle=true
+server.enableParallelHandleBranch=false
+
+server.raft.cluster=127.0.0.1:7091,127.0.0.1:7092,127.0.0.1:7093
+server.raft.snapshotInterval=600
+server.raft.applyBatch=32
+server.raft.maxAppendBufferSize=262144
+server.raft.maxReplicatorInflightMsgs=256
+server.raft.disruptorBufferSize=16384
+server.raft.electionTimeoutMs=2000
+server.raft.reporterEnabled=false
+server.raft.reporterInitialDelay=60
+server.raft.serialization=jackson
+server.raft.compressor=none
+server.raft.sync=true
+
+
+
+#Metrics configuration, only for the server
+metrics.enabled=false
+metrics.registryType=compact
+metrics.exporterList=prometheus
+metrics.exporterPrometheusPort=9898
diff --git a/seata/script/config-center/consul/consul-config-interactive.sh b/seata/script/config-center/consul/consul-config-interactive.sh
new file mode 100644
index 00000000..aa306475
--- /dev/null
+++ b/seata/script/config-center/consul/consul-config-interactive.sh
@@ -0,0 +1,78 @@
+#!/usr/bin/env bash
+# Copyright 1999-2019 Seata.io Group.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at、
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+echo -e "Please enter the host of consul.\n请输入consul的host [localhost]:"
+read -p ">>> " host
+echo -e "Please enter the port of consul.\n请输入consul的port [8500]:"
+read -p ">>> " port
+read -p "Are you sure to continue? [y/n]" input
+case $input in
+ [yY]*)
+ if [[ -z ${host} ]]; then
+ host=localhost
+ fi
+ if [[ -z ${port} ]]; then
+ port=8500
+ fi
+ ;;
+ [nN]*)
+ exit
+ ;;
+ *)
+ echo "Just enter y or n, please."
+ exit
+ ;;
+esac
+
+consulAddr=$host:$port
+contentType="content-type:application/json;charset=UTF-8"
+echo "Set consulAddr=$consulAddr"
+
+failCount=0
+tempLog=$(mktemp -u)
+function addConfig() {
+ curl -X PUT -H "${1}" -d "${2}" "http://$3/v1/kv/$4" >"${tempLog}" 2>/dev/null
+ if [[ -z $(cat "${tempLog}") ]]; then
+ echo " Please check the cluster status. "
+ exit 1
+ fi
+ if [[ $(cat "${tempLog}") =~ "true" ]]; then
+ echo "Set $4=$2 successfully "
+ else
+ echo "Set $4=$2 failure "
+ (( failCount++ ))
+ fi
+}
+
+count=0
+COMMENT_START="#"
+for line in $(cat $(dirname "$PWD")/config.txt | sed s/[[:space:]]//g); do
+ if [[ "$line" =~ ^"${COMMENT_START}".* ]]; then
+ continue
+ fi
+ (( count++ ))
+ key=${line%%=*}
+ value=${line#*=}
+ addConfig "${contentType}" "${value}" "${consulAddr}" "${key}"
+done
+
+echo "========================================================================="
+echo " Complete initialization parameters, total-count:$count , failure-count:$failCount "
+echo "========================================================================="
+
+if [[ ${failCount} -eq 0 ]]; then
+ echo " Init consul config finished, please start seata-server. "
+else
+ echo " Init consul config fail. "
+fi
diff --git a/seata/script/config-center/consul/consul-config.sh b/seata/script/config-center/consul/consul-config.sh
new file mode 100644
index 00000000..3d967a58
--- /dev/null
+++ b/seata/script/config-center/consul/consul-config.sh
@@ -0,0 +1,79 @@
+#!/usr/bin/env bash
+# Copyright 1999-2019 Seata.io Group.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at、
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+while getopts ":h:p:" opt
+do
+ case $opt in
+ h)
+ host=$OPTARG
+ ;;
+ p)
+ port=$OPTARG
+ ;;
+ ?)
+ echo " USAGE OPTION: $0 [-h host] [-p port] "
+ exit 1
+ ;;
+ esac
+done
+
+if [[ -z ${host} ]]; then
+ host=localhost
+fi
+if [[ -z ${port} ]]; then
+ port=8500
+fi
+
+consulAddr=$host:$port
+contentType="content-type:application/json;charset=UTF-8"
+echo "Set consulAddr=$consulAddr"
+
+failCount=0
+tempLog=$(mktemp -u)
+function addConfig() {
+ curl -X PUT -H "${1}" -d "${2}" "http://$3/v1/kv/$4" >"${tempLog}" 2>/dev/null
+ if [[ -z $(cat "${tempLog}") ]]; then
+ echo " Please check the cluster status. "
+ exit 1
+ fi
+ if [[ $(cat "${tempLog}") =~ "true" ]]; then
+ echo "Set $4=$2 successfully "
+ else
+ echo "Set $4=$2 failure "
+ (( failCount++ ))
+ fi
+}
+
+count=0
+COMMENT_START="#"
+for line in $(cat $(dirname "$PWD")/config.txt | sed s/[[:space:]]//g); do
+ if [[ "$line" =~ ^"${COMMENT_START}".* ]]; then
+ continue
+ fi
+ (( count++ ))
+ key=${line%%=*}
+ value=${line#*=}
+ addConfig "${contentType}" "${value}" "${consulAddr}" "${key}"
+done
+
+echo "========================================================================="
+echo " Complete initialization parameters, total-count:$count , failure-count:$failCount "
+echo "========================================================================="
+
+if [[ ${failCount} -eq 0 ]]; then
+ echo " Init consul config finished, please start seata-server. "
+else
+ echo " Init consul config fail. "
+fi
diff --git a/seata/script/config-center/etcd3/etcd3-config-interactive.sh b/seata/script/config-center/etcd3/etcd3-config-interactive.sh
new file mode 100644
index 00000000..eae3e013
--- /dev/null
+++ b/seata/script/config-center/etcd3/etcd3-config-interactive.sh
@@ -0,0 +1,85 @@
+#!/usr/bin/env bash
+# Copyright 1999-2019 Seata.io Group.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at、
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# etcd REST API v3.
+# author:wangyuewen
+
+# shellcheck disable=SC2039,SC2162,SC2046,SC2013,SC2002
+echo -e "Please enter the host of etcd3.\n请输入etcd3的host [localhost]:"
+read -p ">>> " host
+echo -e "Please enter the port of etcd3.\n请输入etcd3的port [2379]:"
+read -p ">>> " port
+read -p "Are you sure to continue? [y/n]" input
+case $input in
+ [yY]*)
+ if [[ -z ${host} ]]; then
+ host=localhost
+ fi
+ if [[ -z ${port} ]]; then
+ port=2379
+ fi
+ ;;
+ [nN]*)
+ exit
+ ;;
+ *)
+ echo "Just enter y or n, please."
+ exit
+ ;;
+esac
+
+etcd3Addr=$host:$port
+contentType="content-type:application/json;charset=UTF-8"
+echo "Set etcd3Addr=$etcd3Addr"
+
+failCount=0
+tempLog=$(mktemp -u)
+function addConfig() {
+ keyBase64=$(printf "%s""$2" | base64)
+ valueBase64=$(printf "%s""$3" | base64)
+ curl -X POST -H "${1}" -d "{\"key\": \"$keyBase64\", \"value\": \"$valueBase64\"}" "http://$4/v3/kv/put" >"${tempLog}" 2>/dev/null
+ if [[ -z $(cat "${tempLog}") ]]; then
+ echo " Please check the cluster status. "
+ exit 1
+ fi
+ if [[ $(cat "${tempLog}") =~ "error" || $(cat "${tempLog}") =~ "code" ]]; then
+ echo "Set $2=$3 failure "
+ (( failCount++ ))
+ else
+ echo "Set $2=$3 successfully "
+ fi
+}
+
+count=0
+COMMENT_START="#"
+for line in $(cat $(dirname "$PWD")/config.txt | sed s/[[:space:]]//g); do
+ if [[ "$line" =~ ^"${COMMENT_START}".* ]]; then
+ continue
+ fi
+ (( count++ ))
+ key=${line%%=*}
+ value=${line#*=}
+ addConfig "${contentType}" "${key}" "${value}" "${etcd3Addr}"
+done
+
+echo "========================================================================="
+echo " Complete initialization parameters, total-count:$count , failure-count:$failCount "
+echo "========================================================================="
+
+if [[ ${failCount} -eq 0 ]]; then
+ echo " Init etcd3 config finished, please start seata-server. "
+else
+ echo " Init etcd3 config fail. "
+fi
diff --git a/seata/script/config-center/etcd3/etcd3-config.sh b/seata/script/config-center/etcd3/etcd3-config.sh
new file mode 100644
index 00000000..cca712f4
--- /dev/null
+++ b/seata/script/config-center/etcd3/etcd3-config.sh
@@ -0,0 +1,83 @@
+#!/usr/bin/env bash
+# Copyright 1999-2019 Seata.io Group.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at、
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# etcd REST API v3.
+
+while getopts ":h:p:" opt
+do
+ case $opt in
+ h)
+ host=$OPTARG
+ ;;
+ p)
+ port=$OPTARG
+ ;;
+ ?)
+ echo " USAGE OPTION: $0 [-h host] [-p port] "
+ exit 1
+ ;;
+ esac
+done
+
+if [[ -z ${host} ]]; then
+ host=localhost
+fi
+if [[ -z ${port} ]]; then
+ port=2379
+fi
+
+etcd3Addr=$host:$port
+contentType="content-type:application/json;charset=UTF-8"
+echo "Set etcd3Addr=$etcd3Addr"
+
+failCount=0
+tempLog=$(mktemp -u)
+function addConfig() {
+ keyBase64=$(printf "%s""$2" | base64)
+ valueBase64=$(printf "%s""$3" | base64)
+ curl -X POST -H "${1}" -d "{\"key\": \"$keyBase64\", \"value\": \"$valueBase64\"}" "http://$4/v3/kv/put" >"${tempLog}" 2>/dev/null
+ if [[ -z $(cat "${tempLog}") ]]; then
+ echo " Please check the cluster status. "
+ exit 1
+ fi
+ if [[ $(cat "${tempLog}") =~ "error" || $(cat "${tempLog}") =~ "code" ]]; then
+ echo "Set $2=$3 failure "
+ (( failCount++ ))
+ else
+ echo "Set $2=$3 successfully "
+ fi
+}
+
+count=0
+COMMENT_START="#"
+for line in $(cat $(dirname "$PWD")/config.txt | sed s/[[:space:]]//g); do
+ if [[ "$line" =~ ^"${COMMENT_START}".* ]]; then
+ continue
+ fi
+ (( count++ ))
+ key=${line%%=*}
+ value=${line#*=}
+ addConfig "${contentType}" "${key}" "${value}" "${etcd3Addr}"
+done
+
+echo "========================================================================="
+echo " Complete initialization parameters, total-count:$count , failure-count:$failCount "
+echo "========================================================================="
+
+if [[ ${failCount} -eq 0 ]]; then
+ echo " Init etcd3 config finished, please start seata-server. "
+else
+ echo " Init etcd3 config fail. "
+fi
diff --git a/seata/script/config-center/nacos/nacos-config-interactive.py b/seata/script/config-center/nacos/nacos-config-interactive.py
new file mode 100644
index 00000000..f23654ce
--- /dev/null
+++ b/seata/script/config-center/nacos/nacos-config-interactive.py
@@ -0,0 +1,88 @@
+#!/usr/bin/env python3
+# -*- coding: UTF-8 -*-
+# @Author : wangyeuwen
+import http.client
+import urllib.parse
+import re
+
+
+def get_params() -> dict:
+ params = {
+ 'host': '127.0.0.1',
+ 'port': '8848',
+ 'tenant': '',
+ 'group': 'SEATA_GROUP',
+ 'username': '',
+ 'password': ''
+ }
+ host = input("Please enter the host of nacos.\n请输入nacos的host [localhost]\n>>> ")
+ port = input("Please enter the port of nacos.\n请输入nacos的port [8848]\n>>> ")
+ group = input("Please enter the group of nacos.\n请输入nacos的group [SEATA_GROUP]\n>>> ")
+ tenant = input("Please enter the tenant of nacos.\n请输入nacos的tenant\n>>> ")
+ username = input("Please enter the username of nacos.\n请输入nacos的username\n>>> ")
+ password = input("Please enter the password of nacos.\n请输入nacos的password\n>>> ")
+ confirm = input("Are you sure to continue? [y/n]")
+ if confirm[0] == 'y' or confirm[0] == 'Y':
+ if len(host) != 0: params['host'] = host
+ if len(port) != 0: params['port'] = port
+ if len(group) != 0: params['group'] = group
+ if len(tenant) != 0: params['tenant'] = tenant
+ if len(username) != 0: params['username'] = username
+ if len(password) != 0: params['password'] = password
+ elif confirm[0] == 'n' or confirm[0] == 'N':
+ exit()
+ else:
+ print("Just enter y or n, please.")
+ exit()
+
+ return params
+
+
+def error_exit():
+ print(' init nacos config fail.')
+ exit()
+
+
+def get_pair(line: str) -> tuple:
+ res = re.match(r"([\.\w]+)=(.*)", line)
+ return res.groups() if res is not None else ['', '']
+
+
+headers = {
+ 'content-type': "application/x-www-form-urlencoded"
+}
+
+hasError = False
+
+params = get_params()
+
+url_prefix = f"{params['host']}:{params['port']}"
+tenant = params['tenant']
+username = params['username']
+password = params['password']
+group = params['group']
+url_postfix_base = f'/nacos/v1/cs/configs?group={group}&tenant={tenant}'
+
+if username != '' and password != '':
+ url_postfix_base += f'&username={username}&password={password}'
+
+if url_prefix == ':':
+ error_exit()
+
+for line in open('../config.txt'):
+ pair = get_pair(line.rstrip("\n"))
+ if len(pair) < 2 or pair[0] == '' or pair[0].startswith("#") or pair[1] == '':
+ continue
+ url_postfix = url_postfix_base + f'&dataId={urllib.parse.quote(str(pair[0]))}&content={urllib.parse.quote(str(pair[1])).strip()}'
+ conn = http.client.HTTPConnection(url_prefix)
+ conn.request("POST", url_postfix, headers=headers)
+ res = conn.getresponse()
+ data = res.read().decode("utf-8")
+ if data != "true":
+ hasError = True
+ print(f"{pair[0]}={pair[1]} {data if hasError else 'success'}")
+
+if hasError:
+ print("init nacos config fail.")
+else:
+ print("init nacos config finished, please start seata-server.")
diff --git a/seata/script/config-center/nacos/nacos-config-interactive.sh b/seata/script/config-center/nacos/nacos-config-interactive.sh
new file mode 100644
index 00000000..03f8a737
--- /dev/null
+++ b/seata/script/config-center/nacos/nacos-config-interactive.sh
@@ -0,0 +1,120 @@
+#!/bin/sh
+# Copyright 1999-2019 Seata.io Group.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at、
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# author:wangyuewen
+
+# shellcheck disable=SC2039,SC2162,SC2046,SC2013,SC2002,SC2086
+echo -e "Please enter the host of nacos.\n请输入nacos的host [localhost]:"
+read -p ">>> " host
+echo -e "Please enter the port of nacos.\n请输入nacos的port [8848]:"
+read -p ">>> " port
+echo -e "Please enter the group of nacos.\n请输入nacos的group [SEATA_GROUP]:"
+read -p ">>> " group
+echo -e "Please enter the tenant of nacos.\n请输入nacos的tenant:"
+read -p ">>> " tenant
+echo -e "Please enter the username of nacos.\n请输入nacos的username:"
+read -p ">>> " username
+echo -e "Please enter the password of nacos.\n请输入nacos的password:"
+read -p ">>> " password
+
+read -p "Are you sure to continue? [y/n]" input
+case $input in
+ [yY]*)
+ if [ -z ${host} ]; then
+ host=localhost
+ fi
+ if [ -z ${port} ]; then
+ port=8848
+ fi
+ if [ -z ${group} ]; then
+ group="SEATA_GROUP"
+ fi
+ if [ -z ${tenant} ]; then
+ tenant=""
+ fi
+ if [ -z ${username} ]; then
+ username=""
+ fi
+ if [ -z ${password} ]; then
+ password=""
+ fi
+ ;;
+ [nN]*)
+ exit
+ ;;
+ *)
+ echo "Just enter y or n, please."
+ exit
+ ;;
+esac
+
+nacosAddr=$host:$port
+contentType="content-type:application/json;charset=UTF-8"
+
+echo "set nacosAddr=$nacosAddr"
+echo "set group=$group"
+
+urlencode() {
+ length="${#1}"
+ i=0
+ while [ $length -gt $i ]; do
+ char="${1:$i:1}"
+ case $char in
+ [a-zA-Z0-9.~_-]) printf $char ;;
+ *) printf '%%%02X' "'$char" ;;
+ esac
+ i=`expr $i + 1`
+ done
+}
+
+failCount=0
+tempLog=$(mktemp -u)
+addConfig() {
+ dataId=`urlencode $1`
+ content=`urlencode $2`
+ curl -X POST -H "${contentType}" "http://$nacosAddr/nacos/v1/cs/configs?dataId=$dataId&group=$group&content=$content&tenant=$tenant&username=$username&password=$password" >"${tempLog}" 2>/dev/null
+ if [ -z $(cat "${tempLog}") ]; then
+ echo " Please check the cluster status. "
+ exit 1
+ fi
+ if [ "$(cat "${tempLog}")" == "true" ]; then
+ echo "Set $1=$2 successfully "
+ else
+ echo "Set $1=$2 failure "
+ failCount=`expr $failCount + 1`
+ fi
+}
+
+count=0
+COMMENT_START="#"
+for line in $(cat $(dirname "$PWD")/config.txt | sed s/[[:space:]]//g); do
+ if [[ "$line" =~ ^"${COMMENT_START}".* ]]; then
+ continue
+ fi
+ count=`expr $count + 1`
+ key=${line%%=*}
+ value=${line#*=}
+ addConfig "${key}" "${value}"
+done
+
+echo "========================================================================="
+echo " Complete initialization parameters, total-count:$count , failure-count:$failCount "
+echo "========================================================================="
+
+if [ ${failCount} -eq 0 ]; then
+ echo " Init nacos config finished, please start seata-server. "
+else
+ echo " init nacos config fail. "
+fi
diff --git a/seata/script/config-center/nacos/nacos-config.py b/seata/script/config-center/nacos/nacos-config.py
new file mode 100644
index 00000000..524d9614
--- /dev/null
+++ b/seata/script/config-center/nacos/nacos-config.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python3
+# -*- coding: UTF-8 -*-
+
+import http.client
+import sys
+import getopt as opts
+import urllib.parse
+import re
+
+
+def get_params() -> dict:
+ params = {
+ '-h': '127.0.0.1',
+ '-p': '8848',
+ '-t': '',
+ '-g': 'SEATA_GROUP',
+ '-u': '',
+ '-w': ''
+ }
+ inputs, args = opts.getopt(sys.argv[1:], shortopts='h:p:t:g:u:w:')
+ for k, v in inputs:
+ params[k] = v
+ print(params)
+ return params
+
+def error_exit():
+ print('python nacos-config.py [-h host] [-p port] [-t tenant] [-g group] [-u username] [-w password]')
+ exit()
+
+def get_pair(line: str) -> tuple:
+ res = re.match(r"([\.\w]+)=(.*)",line)
+ return res.groups() if res is not None else ['','']
+
+
+headers = {
+ 'content-type': "application/x-www-form-urlencoded"
+}
+
+hasError = False
+
+params = get_params()
+
+url_prefix = f"{params['-h']}:{params['-p']}"
+tenant = params['-t']
+username = params['-u']
+password = params['-w']
+group = params['-g']
+url_postfix_base = f'/nacos/v1/cs/configs?group={group}&tenant={tenant}'
+
+if username != '' and password != '':
+ url_postfix_base += f'&username={username}&password={password}'
+
+if url_prefix == ':':
+ error_exit()
+
+for line in open('../config.txt'):
+ pair = get_pair(line.rstrip("\n"))
+ if len(pair) < 2 or pair[0] == '' or pair[0].startswith("#") or pair[1] == '':
+ continue
+ url_postfix = url_postfix_base + f'&dataId={urllib.parse.quote(str(pair[0]))}&content={urllib.parse.quote(str(pair[1])).strip()}'
+ conn = http.client.HTTPConnection(url_prefix)
+ conn.request("POST", url_postfix, headers=headers)
+ res = conn.getresponse()
+ data = res.read().decode("utf-8")
+ if data != "true":
+ hasError = True
+ print(f"{pair[0]}={pair[1]} {data if hasError else 'success'}")
+
+if hasError:
+ print("init nacos config fail.")
+else:
+ print("init nacos config finished, please start seata-server.")
diff --git a/seata/script/config-center/nacos/nacos-config.sh b/seata/script/config-center/nacos/nacos-config.sh
new file mode 100644
index 00000000..e1704e0d
--- /dev/null
+++ b/seata/script/config-center/nacos/nacos-config.sh
@@ -0,0 +1,120 @@
+#!/bin/sh
+# Copyright 1999-2019 Seata.io Group.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at、
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+while getopts ":h:p:g:t:u:w:" opt
+do
+ case $opt in
+ h)
+ host=$OPTARG
+ ;;
+ p)
+ port=$OPTARG
+ ;;
+ g)
+ group=$OPTARG
+ ;;
+ t)
+ tenant=$OPTARG
+ ;;
+ u)
+ username=$OPTARG
+ ;;
+ w)
+ password=$OPTARG
+ ;;
+ ?)
+ echo " USAGE OPTION: $0 [-h host] [-p port] [-g group] [-t tenant] [-u username] [-w password] "
+ exit 1
+ ;;
+ esac
+done
+
+if [ -z ${host} ]; then
+ host=localhost
+fi
+if [ -z ${port} ]; then
+ port=8848
+fi
+if [ -z ${group} ]; then
+ group="SEATA_GROUP"
+fi
+if [ -z ${tenant} ]; then
+ tenant=""
+fi
+if [ -z ${username} ]; then
+ username=""
+fi
+if [ -z ${password} ]; then
+ password=""
+fi
+
+nacosAddr=$host:$port
+contentType="content-type:application/json;charset=UTF-8"
+
+echo "set nacosAddr=$nacosAddr"
+echo "set group=$group"
+
+urlencode() {
+ length="${#1}"
+ i=0
+ while [ $length -gt $i ]; do
+ char="${1:$i:1}"
+ case $char in
+ [a-zA-Z0-9.~_-]) printf $char ;;
+ *) printf '%%%02X' "'$char" ;;
+ esac
+ i=`expr $i + 1`
+ done
+}
+
+failCount=0
+tempLog=$(mktemp -u)
+function addConfig() {
+ dataId=`urlencode $1`
+ content=`urlencode $2`
+ curl -X POST -H "${contentType}" "http://$nacosAddr/nacos/v1/cs/configs?dataId=$dataId&group=$group&content=$content&tenant=$tenant&username=$username&password=$password" >"${tempLog}" 2>/dev/null
+ if [ -z $(cat "${tempLog}") ]; then
+ echo " Please check the cluster status. "
+ exit 1
+ fi
+ if [ "$(cat "${tempLog}")" == "true" ]; then
+ echo "Set $1=$2 successfully "
+ else
+ echo "Set $1=$2 failure "
+ failCount=`expr $failCount + 1`
+ fi
+}
+
+count=0
+COMMENT_START="#"
+for line in $(cat $(dirname "$PWD")/config.txt | sed s/[[:space:]]//g); do
+ if [[ "$line" =~ ^"${COMMENT_START}".* ]]; then
+ continue
+ fi
+ count=`expr $count + 1`
+ key=${line%%=*}
+ value=${line#*=}
+ addConfig "${key}" "${value}"
+done
+
+echo "========================================================================="
+echo " Complete initialization parameters, total-count:$count , failure-count:$failCount "
+echo "========================================================================="
+
+if [ ${failCount} -eq 0 ]; then
+ echo " Init nacos config finished, please start seata-server. "
+else
+ echo " init nacos config fail. "
+fi
diff --git a/seata/script/config-center/zk/zk-config-interactive.sh b/seata/script/config-center/zk/zk-config-interactive.sh
new file mode 100644
index 00000000..75ba7b0a
--- /dev/null
+++ b/seata/script/config-center/zk/zk-config-interactive.sh
@@ -0,0 +1,103 @@
+#!/usr/bin/env bash
+# Copyright 1999-2019 Seata.io Group.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at、
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# The purpose is to sync the local configuration(config.txt) to zk.
+# This script need to rely on zk.
+echo -e "Please enter the host of zookeeper.\n请输入zookeeper的host [localhost]:"
+read -p ">>> " host
+echo -e "Please enter the port of zookeeper.\n请输入zookeeper的port [2181]:"
+read -p ">>> " port
+echo -e "Please enter the zkHome of zookeeper.\n请输入zookeeper的zkHome:"
+read -p ">>> " zkHome
+read -p "Are you sure to continue? [y/n]" input
+case $input in
+ [yY]*)
+ if [[ -z ${host} ]]; then
+ host=localhost
+ fi
+ if [[ -z ${port} ]]; then
+ port=2181
+ fi
+ if [[ -z ${zkHome} ]]; then
+ echo " zk home is empty, please input it "
+ exit 1
+ fi
+ ;;
+ [nN]*)
+ exit
+ ;;
+ *)
+ echo "Just enter y or n, please."
+ exit
+ ;;
+esac
+
+zkAddr=$host:$port
+
+root="/seata"
+tempLog=$(mktemp -u)
+
+echo "ZK address is $zkAddr"
+echo "ZK home is $zkHome"
+echo "ZK config root node is $root"
+
+function check_node() {
+ "$2"/bin/zkCli.sh -server "$1" ls ${root} >/dev/null 2>"${tempLog}"
+}
+
+function create_node() {
+ "$2"/bin/zkCli.sh -server "$1" create ${root} "" >/dev/null
+}
+
+function create_subNode() {
+ "$2"/bin/zkCli.sh -server "$1" create "${root}/$3" "$4" >/dev/null
+}
+
+function delete_node() {
+ "$2"/bin/zkCli.sh -server $1 rmr ${root} "" >/dev/null
+}
+
+check_node "${zkAddr}" "${zkHome}"
+
+if [[ $(cat "${tempLog}") =~ "No such file or directory" ]]; then
+ echo " ZK home is error, please enter correct zk home! "
+ exit 1
+elif [[ $(cat "${tempLog}") =~ "Exception" ]]; then
+ echo " Exception error, please check zk cluster status or if the zk address is entered correctly! "
+ exit 1
+elif [[ $(cat "${tempLog}") =~ "Node does not exist" ]]; then
+ create_node "${zkAddr}" "${zkHome}"
+else
+ read -p "${root} node already exists, now delete ${root} node in zk, y/n: " result
+ if [[ ${result} == "y" ]]; then
+ echo "Delete ${root} node..."
+ delete_node "${zkAddr}" "${zkHome}"
+ create_node "${zkAddr}" "${zkHome}"
+ else
+ exit 0
+ fi
+fi
+
+COMMENT_START="#"
+for line in $(cat $(dirname "$PWD")/config.txt | sed s/[[:space:]]//g); do
+ if [[ "$line" =~ ^"${COMMENT_START}".* ]]; then
+ continue
+ fi
+ key=${line%%=*}
+ value=${line#*=}
+ echo "Set" "${key}" "=" "${value}"
+ create_subNode "${zkAddr}" "${zkHome}" "${key}" "${value}"
+done
diff --git a/seata/script/config-center/zk/zk-config.sh b/seata/script/config-center/zk/zk-config.sh
new file mode 100644
index 00000000..a1571e97
--- /dev/null
+++ b/seata/script/config-center/zk/zk-config.sh
@@ -0,0 +1,106 @@
+#!/usr/bin/env bash
+# Copyright 1999-2019 Seata.io Group.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at、
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# The purpose is to sync the local configuration(config.txt) to zk.
+# This script need to rely on zk.
+
+
+while getopts ":h:p:z:" opt
+do
+ case $opt in
+ h)
+ host=$OPTARG
+ ;;
+ p)
+ port=$OPTARG
+ ;;
+ z)
+ zkHome=$OPTARG
+ ;;
+ ?)
+ echo " USAGE OPTION: $0 [-h host] [-p port] [-z zkHome] "
+ exit 1
+ ;;
+ esac
+done
+
+if [[ -z ${host} ]]; then
+ host=localhost
+fi
+if [[ -z ${port} ]]; then
+ port=2181
+fi
+if [[ -z ${zkHome} ]]; then
+ echo " zk home is empty, please usage option: [-z zkHome] "
+ exit 1
+fi
+
+zkAddr=$host:$port
+
+root="/seata"
+tempLog=$(mktemp -u)
+
+echo "ZK address is $zkAddr"
+echo "ZK home is $zkHome"
+echo "ZK config root node is $root"
+
+function check_node() {
+ "$2"/bin/zkCli.sh -server "$1" ls ${root} >/dev/null 2>"${tempLog}"
+}
+
+function create_node() {
+ "$2"/bin/zkCli.sh -server "$1" create ${root} "" >/dev/null
+}
+
+function create_subNode() {
+ "$2"/bin/zkCli.sh -server "$1" create "${root}/$3" "$4" >/dev/null
+}
+
+function delete_node() {
+ "$2"/bin/zkCli.sh -server $1 rmr ${root} "" >/dev/null
+}
+
+check_node "${zkAddr}" "${zkHome}"
+
+if [[ $(cat "${tempLog}") =~ "No such file or directory" ]]; then
+ echo " ZK home is error, please enter correct zk home! "
+ exit 1
+elif [[ $(cat "${tempLog}") =~ "Exception" ]]; then
+ echo " Exception error, please check zk cluster status or if the zk address is entered correctly! "
+ exit 1
+elif [[ $(cat "${tempLog}") =~ "Node does not exist" ]]; then
+ create_node "${zkAddr}" "${zkHome}"
+else
+ read -p "${root} node already exists, now delete ${root} node in zk, y/n: " result
+ if [[ ${result} == "y" ]]; then
+ echo "Delete ${root} node..."
+ delete_node "${zkAddr}" "${zkHome}"
+ create_node "${zkAddr}" "${zkHome}"
+ else
+ exit 0
+ fi
+fi
+
+COMMENT_START="#"
+for line in $(cat $(dirname "$PWD")/config.txt | sed s/[[:space:]]//g); do
+ if [[ "$line" =~ ^"${COMMENT_START}".* ]]; then
+ continue
+ fi
+ key=${line%%=*}
+ value=${line#*=}
+ echo "Set" "${key}" "=" "${value}"
+ create_subNode "${zkAddr}" "${zkHome}" "${key}" "${value}"
+done
diff --git a/seata/script/logstash/config/logstash-kafka.conf b/seata/script/logstash/config/logstash-kafka.conf
new file mode 100644
index 00000000..8423163b
--- /dev/null
+++ b/seata/script/logstash/config/logstash-kafka.conf
@@ -0,0 +1,31 @@
+# Copyright 1999-2019 Seata.io Group.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# App(Logback KafkaAppender) -> Kafka -> Logstash -> Elasticsearch pipeline.
+
+input {
+ kafka {
+ bootstrap_servers => "localhost:9092"
+ topics => ["logback_to_logstash"]
+ }
+}
+
+output{
+ elasticsearch {
+ hosts => ["localhost:9200"]
+ }
+ stdout {
+ codec => rubydebug
+ }
+}
diff --git a/seata/script/logstash/config/logstash-logback.conf b/seata/script/logstash/config/logstash-logback.conf
new file mode 100644
index 00000000..340f150d
--- /dev/null
+++ b/seata/script/logstash/config/logstash-logback.conf
@@ -0,0 +1,33 @@
+# Copyright 1999-2019 Seata.io Group.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# App(Logback LogstashTcpSocketAppender) -> Logstash -> Elasticsearch pipeline.
+
+input {
+ # Using TCP protocol
+ tcp {
+ port => 4560
+ # execute command `./logstash-plugin install logstash-codec-json_lines` to install this plugin.
+ codec => json_lines
+ }
+}
+
+output{
+ elasticsearch {
+ hosts => ["localhost:9200"]
+ }
+ stdout {
+ codec => rubydebug
+ }
+}
diff --git a/seata/script/server/db/dm.sql b/seata/script/server/db/dm.sql
new file mode 100644
index 00000000..34e00e56
--- /dev/null
+++ b/seata/script/server/db/dm.sql
@@ -0,0 +1,76 @@
+-- -------------------------------- The script used when storeMode is 'db' --------------------------------
+
+-- the table to store GlobalSession data
+CREATE TABLE "SEATA"."GLOBAL_TABLE"
+(
+ "XID" VARCHAR2(128) NOT NULL,
+ "TRANSACTION_ID" BIGINT,
+ "STATUS" TINYINT NOT NULL,
+ "APPLICATION_ID" VARCHAR2(32),
+ "TRANSACTION_SERVICE_GROUP" VARCHAR2(32),
+ "TRANSACTION_NAME" VARCHAR2(128),
+ "TIMEOUT" INT,
+ "BEGIN_TIME" BIGINT,
+ "APPLICATION_DATA" VARCHAR2(2000),
+ "GMT_CREATE" TIMESTAMP(0),
+ "GMT_MODIFIED" TIMESTAMP(0),
+ PRIMARY KEY ("XID")
+);
+
+CREATE INDEX "IDX_GMT_MODIFIED_STATUS" ON "SEATA"."GLOBAL_TABLE"("GMT_MODIFIED" ASC,"STATUS" ASC);
+CREATE INDEX "IDX_TRANSACTION_ID" ON "SEATA"."GLOBAL_TABLE"("TRANSACTION_ID" ASC);
+
+
+-- the table to store BranchSession data
+CREATE TABLE "SEATA"."BRANCH_TABLE"
+(
+ "BRANCH_ID" BIGINT NOT NULL,
+ "XID" VARCHAR2(128) NOT NULL,
+ "TRANSACTION_ID" BIGINT,
+ "RESOURCE_GROUP_ID" VARCHAR2(32),
+ "RESOURCE_ID" VARCHAR2(256),
+ "BRANCH_TYPE" VARCHAR2(8),
+ "STATUS" TINYINT,
+ "CLIENT_ID" VARCHAR2(64),
+ "APPLICATION_DATA" VARCHAR2(2000),
+ "GMT_CREATE" TIMESTAMP(0),
+ "GMT_MODIFIED" TIMESTAMP(0),
+ PRIMARY KEY ("BRANCH_ID")
+);
+
+CREATE INDEX "IDX_XID" ON "SEATA"."BRANCH_TABLE"("XID" ASC);
+
+
+-- the table to store lock data
+CREATE TABLE "SEATA"."LOCK_TABLE"
+(
+ "ROW_KEY" VARCHAR2(128) NOT NULL,
+ "XID" VARCHAR2(128),
+ "TRANSACTION_ID" BIGINT,
+ "BRANCH_ID" BIGINT NOT NULL,
+ "RESOURCE_ID" VARCHAR2(256),
+ "TABLE_NAME" VARCHAR2(32),
+ "PK" VARCHAR2(36),
+ "STATUS" TINYINT NOT NULL DEFAULT 0,
+ "GMT_CREATE" TIMESTAMP(0),
+ "GMT_MODIFIED" TIMESTAMP(0),
+ PRIMARY KEY ("ROW_KEY")
+);
+
+COMMENT ON COLUMN "SEATA"."LOCK_TABLE"."STATUS" IS '0:locked ,1:rollbacking';
+
+CREATE INDEX "IDX_BRANCH_ID" ON "SEATA"."LOCK_TABLE" ("BRANCH_ID" ASC);
+CREATE INDEX "IDX_STATUS" ON "SEATA"."LOCK_TABLE" ("STATUS" ASC);
+
+CREATE TABLE "SEATA"."DISTRIBUTED_LOCK"
+(
+ "LOCK_KEY" VARCHAR2(20) NOT NULL,
+ "LOCK_VALUE" VARCHAR2(20) NOT NULL,
+ "EXPIRE" BIGINT NOT NULL,
+ PRIMARY KEY ("LOCK_KEY")
+);
+
+INSERT INTO "SEATA"."DISTRIBUTED_LOCK" ("LOCK_KEY", "LOCK_VALUE", "EXPIRE") VALUES ('AsyncCommitting', ' ', 0);
+INSERT INTO "SEATA"."DISTRIBUTED_LOCK" ("LOCK_KEY", "LOCK_VALUE", "EXPIRE") VALUES ('RetryCommitting', ' ', 0);
+INSERT INTO "SEATA"."DISTRIBUTED_LOCK" ("LOCK_KEY", "LOCK_VALUE", "EXPIRE") VALUES ('RetryRollbacking', ' ', 0);
+INSERT INTO "SEATA"."DISTRIBUTED_LOCK" ("LOCK_KEY", "LOCK_VALUE", "EXPIRE") VALUES ('TxTimeoutCheck', ' ', 0);
diff --git a/seata/script/server/db/mysql.sql b/seata/script/server/db/mysql.sql
new file mode 100644
index 00000000..bf4bbb35
--- /dev/null
+++ b/seata/script/server/db/mysql.sql
@@ -0,0 +1,73 @@
+-- -------------------------------- The script used when storeMode is 'db' --------------------------------
+-- the table to store GlobalSession data
+CREATE TABLE IF NOT EXISTS `global_table`
+(
+ `xid` VARCHAR(128) NOT NULL,
+ `transaction_id` BIGINT,
+ `status` TINYINT NOT NULL,
+ `application_id` VARCHAR(32),
+ `transaction_service_group` VARCHAR(32),
+ `transaction_name` VARCHAR(128),
+ `timeout` INT,
+ `begin_time` BIGINT,
+ `application_data` VARCHAR(2000),
+ `gmt_create` DATETIME,
+ `gmt_modified` DATETIME,
+ PRIMARY KEY (`xid`),
+ KEY `idx_status_gmt_modified` (`status` , `gmt_modified`),
+ KEY `idx_transaction_id` (`transaction_id`)
+) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8mb4;
+
+-- the table to store BranchSession data
+CREATE TABLE IF NOT EXISTS `branch_table`
+(
+ `branch_id` BIGINT NOT NULL,
+ `xid` VARCHAR(128) NOT NULL,
+ `transaction_id` BIGINT,
+ `resource_group_id` VARCHAR(32),
+ `resource_id` VARCHAR(256),
+ `branch_type` VARCHAR(8),
+ `status` TINYINT,
+ `client_id` VARCHAR(64),
+ `application_data` VARCHAR(2000),
+ `gmt_create` DATETIME(6),
+ `gmt_modified` DATETIME(6),
+ PRIMARY KEY (`branch_id`),
+ KEY `idx_xid` (`xid`)
+) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8mb4;
+
+-- the table to store lock data
+CREATE TABLE IF NOT EXISTS `lock_table`
+(
+ `row_key` VARCHAR(128) NOT NULL,
+ `xid` VARCHAR(128),
+ `transaction_id` BIGINT,
+ `branch_id` BIGINT NOT NULL,
+ `resource_id` VARCHAR(256),
+ `table_name` VARCHAR(32),
+ `pk` VARCHAR(36),
+ `status` TINYINT NOT NULL DEFAULT '0' COMMENT '0:locked ,1:rollbacking',
+ `gmt_create` DATETIME,
+ `gmt_modified` DATETIME,
+ PRIMARY KEY (`row_key`),
+ KEY `idx_status` (`status`),
+ KEY `idx_branch_id` (`branch_id`),
+ KEY `idx_xid` (`xid`)
+) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8mb4;
+
+CREATE TABLE IF NOT EXISTS `distributed_lock`
+(
+ `lock_key` CHAR(20) NOT NULL,
+ `lock_value` VARCHAR(20) NOT NULL,
+ `expire` BIGINT,
+ primary key (`lock_key`)
+) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8mb4;
+
+INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0);
+INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0);
+INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0);
+INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);
\ No newline at end of file
diff --git a/seata/script/server/db/oracle.sql b/seata/script/server/db/oracle.sql
new file mode 100644
index 00000000..462d6b89
--- /dev/null
+++ b/seata/script/server/db/oracle.sql
@@ -0,0 +1,72 @@
+-- -------------------------------- The script used when storeMode is 'db' --------------------------------
+-- the table to store GlobalSession data
+CREATE TABLE global_table
+(
+ xid VARCHAR2(128) NOT NULL,
+ transaction_id NUMBER(19),
+ status NUMBER(3) NOT NULL,
+ application_id VARCHAR2(32),
+ transaction_service_group VARCHAR2(32),
+ transaction_name VARCHAR2(128),
+ timeout NUMBER(10),
+ begin_time NUMBER(19),
+ application_data VARCHAR2(2000),
+ gmt_create TIMESTAMP(0),
+ gmt_modified TIMESTAMP(0),
+ PRIMARY KEY (xid)
+);
+
+CREATE INDEX idx_status_gmt_modified ON global_table (status, gmt_modified);
+CREATE INDEX idx_transaction_id ON global_table (transaction_id);
+
+-- the table to store BranchSession data
+CREATE TABLE branch_table
+(
+ branch_id NUMBER(19) NOT NULL,
+ xid VARCHAR2(128) NOT NULL,
+ transaction_id NUMBER(19),
+ resource_group_id VARCHAR2(32),
+ resource_id VARCHAR2(256),
+ branch_type VARCHAR2(8),
+ status NUMBER(3),
+ client_id VARCHAR2(64),
+ application_data VARCHAR2(2000),
+ gmt_create TIMESTAMP(6),
+ gmt_modified TIMESTAMP(6),
+ PRIMARY KEY (branch_id)
+);
+
+CREATE INDEX idx_xid ON branch_table (xid);
+
+-- the table to store lock data
+CREATE TABLE lock_table
+(
+ row_key VARCHAR2(128) NOT NULL,
+ xid VARCHAR2(128),
+ transaction_id NUMBER(19),
+ branch_id NUMBER(19) NOT NULL,
+ resource_id VARCHAR2(256),
+ table_name VARCHAR2(32),
+ pk VARCHAR2(36),
+ status NUMBER(3) DEFAULT 0 NOT NULL,
+ gmt_create TIMESTAMP(0),
+ gmt_modified TIMESTAMP(0),
+ PRIMARY KEY (row_key)
+);
+
+comment on column lock_table.status is '0:locked ,1:rollbacking';
+CREATE INDEX idx_branch_id ON lock_table (branch_id);
+CREATE INDEX idx_lock_table_xid ON lock_table (xid);
+CREATE INDEX idx_status ON lock_table (status);
+
+CREATE TABLE distributed_lock (
+ lock_key VARCHAR2(20) NOT NULL,
+ lock_value VARCHAR2(20) NOT NULL,
+ expire DECIMAL(18) NOT NULL,
+ PRIMARY KEY (lock_key)
+);
+
+INSERT INTO distributed_lock (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0);
+INSERT INTO distributed_lock (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0);
+INSERT INTO distributed_lock (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0);
+INSERT INTO distributed_lock (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);
diff --git a/seata/script/server/db/postgresql.sql b/seata/script/server/db/postgresql.sql
new file mode 100644
index 00000000..f716f0dc
--- /dev/null
+++ b/seata/script/server/db/postgresql.sql
@@ -0,0 +1,72 @@
+-- -------------------------------- The script used when storeMode is 'db' --------------------------------
+-- the table to store GlobalSession data
+CREATE TABLE IF NOT EXISTS public.global_table
+(
+ xid VARCHAR(128) NOT NULL,
+ transaction_id BIGINT,
+ status SMALLINT NOT NULL,
+ application_id VARCHAR(32),
+ transaction_service_group VARCHAR(32),
+ transaction_name VARCHAR(128),
+ timeout INT,
+ begin_time BIGINT,
+ application_data VARCHAR(2000),
+ gmt_create TIMESTAMP(0),
+ gmt_modified TIMESTAMP(0),
+ CONSTRAINT pk_global_table PRIMARY KEY (xid)
+);
+
+CREATE INDEX idx_status_gmt_modified ON public.global_table (status, gmt_modified);
+CREATE INDEX idx_transaction_id ON public.global_table (transaction_id);
+
+-- the table to store BranchSession data
+CREATE TABLE IF NOT EXISTS public.branch_table
+(
+ branch_id BIGINT NOT NULL,
+ xid VARCHAR(128) NOT NULL,
+ transaction_id BIGINT,
+ resource_group_id VARCHAR(32),
+ resource_id VARCHAR(256),
+ branch_type VARCHAR(8),
+ status SMALLINT,
+ client_id VARCHAR(64),
+ application_data VARCHAR(2000),
+ gmt_create TIMESTAMP(6),
+ gmt_modified TIMESTAMP(6),
+ CONSTRAINT pk_branch_table PRIMARY KEY (branch_id)
+);
+
+CREATE INDEX idx_xid ON public.branch_table (xid);
+
+-- the table to store lock data
+CREATE TABLE IF NOT EXISTS public.lock_table
+(
+ row_key VARCHAR(128) NOT NULL,
+ xid VARCHAR(128),
+ transaction_id BIGINT,
+ branch_id BIGINT NOT NULL,
+ resource_id VARCHAR(256),
+ table_name VARCHAR(32),
+ pk VARCHAR(36),
+ status SMALLINT NOT NULL DEFAULT 0,
+ gmt_create TIMESTAMP(0),
+ gmt_modified TIMESTAMP(0),
+ CONSTRAINT pk_lock_table PRIMARY KEY (row_key)
+);
+
+comment on column public.lock_table.status is '0:locked ,1:rollbacking';
+CREATE INDEX idx_branch_id ON public.lock_table (branch_id);
+CREATE INDEX idx_xid ON public.lock_table (xid);
+CREATE INDEX idx_status ON public.lock_table (status);
+
+CREATE TABLE distributed_lock (
+ lock_key VARCHAR(20) NOT NULL,
+ lock_value VARCHAR(20) NOT NULL,
+ expire BIGINT NOT NULL,
+ CONSTRAINT pk_distributed_lock_table PRIMARY KEY (lock_key)
+);
+
+INSERT INTO distributed_lock (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0);
+INSERT INTO distributed_lock (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0);
+INSERT INTO distributed_lock (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0);
+INSERT INTO distributed_lock (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);
diff --git a/seata/script/server/db/sqlserver.sql b/seata/script/server/db/sqlserver.sql
new file mode 100644
index 00000000..1ba15550
--- /dev/null
+++ b/seata/script/server/db/sqlserver.sql
@@ -0,0 +1,80 @@
+-- -------------------------------- The script used when storeMode is 'db' --------------------------------
+-- the table to store GlobalSession data
+CREATE TABLE [global_table]
+(
+ [xid] nvarchar(128) NOT NULL,
+ [transaction_id] bigint NULL,
+ [status] tinyint NOT NULL,
+ [application_id] nvarchar(32) NULL,
+ [transaction_service_group] nvarchar(32) NULL,
+ [transaction_name] nvarchar(128) NULL,
+ [timeout] int NULL,
+ [begin_time] bigint NULL,
+ [application_data] nvarchar(2000) NULL,
+ [gmt_create] datetime2 NULL,
+ [gmt_modified] datetime2 NULL,
+ PRIMARY KEY CLUSTERED ([xid])
+ WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
+)
+GO
+
+CREATE NONCLUSTERED INDEX [idx_gmt_modified_status]
+ ON [global_table] (
+ [gmt_modified],
+ [status]
+ )
+GO
+
+CREATE NONCLUSTERED INDEX [idx_transaction_id]
+ ON [global_table] (
+ [transaction_id]
+ )
+GO
+
+-- the table to store BranchSession data
+CREATE TABLE [branch_table]
+(
+ [branch_id] bigint NOT NULL,
+ [xid] nvarchar(128) NOT NULL,
+ [transaction_id] bigint NULL,
+ [resource_group_id] nvarchar(32) NULL,
+ [resource_id] nvarchar(256) NULL,
+ [branch_type] varchar(8) NULL,
+ [status] tinyint NULL,
+ [client_id] nvarchar(64) NULL,
+ [application_data] nvarchar(2000) NULL,
+ [gmt_create] datetime2 NULL,
+ [gmt_modified] datetime2 NULL,
+ PRIMARY KEY CLUSTERED ([branch_id])
+ WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
+)
+GO
+
+CREATE NONCLUSTERED INDEX [idx_xid]
+ ON [branch_table] (
+ [xid]
+ )
+GO
+
+-- the table to store lock data
+CREATE TABLE [lock_table]
+(
+ [row_key] nvarchar(128) NOT NULL,
+ [xid] nvarchar(128) NULL,
+ [transaction_id] bigint NULL,
+ [branch_id] bigint NOT NULL,
+ [resource_id] nvarchar(256) NULL,
+ [table_name] nvarchar(32) NULL,
+ [pk] nvarchar(36) NULL,
+ [gmt_create] datetime2 NULL,
+ [gmt_modified] datetime2 NULL,
+ PRIMARY KEY CLUSTERED ([row_key])
+ WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
+)
+GO
+
+CREATE NONCLUSTERED INDEX [idx_branch_id]
+ ON [lock_table] (
+ [branch_id]
+ )
+GO
diff --git a/seata/script/server/docker-compose/docker-compose.yaml b/seata/script/server/docker-compose/docker-compose.yaml
new file mode 100644
index 00000000..e1791293
--- /dev/null
+++ b/seata/script/server/docker-compose/docker-compose.yaml
@@ -0,0 +1,10 @@
+version: "3"
+services:
+ seata-server:
+ image: seataio/seata-server
+ hostname: seata-server
+ ports:
+ - "8091:8091"
+ environment:
+ - SEATA_PORT=8091
+ - STORE_MODE=file
\ No newline at end of file
diff --git a/seata/script/server/helm/seata-server/.helmignore b/seata/script/server/helm/seata-server/.helmignore
new file mode 100644
index 00000000..50af0317
--- /dev/null
+++ b/seata/script/server/helm/seata-server/.helmignore
@@ -0,0 +1,22 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+.vscode/
diff --git a/seata/script/server/helm/seata-server/Chart.yaml b/seata/script/server/helm/seata-server/Chart.yaml
new file mode 100644
index 00000000..f282fc46
--- /dev/null
+++ b/seata/script/server/helm/seata-server/Chart.yaml
@@ -0,0 +1,5 @@
+apiVersion: v1
+appVersion: "1.0"
+description: Seata Server
+name: seata-server
+version: 1.0.0
diff --git a/seata/script/server/helm/seata-server/templates/NOTES.txt b/seata/script/server/helm/seata-server/templates/NOTES.txt
new file mode 100644
index 00000000..ddc7f2eb
--- /dev/null
+++ b/seata/script/server/helm/seata-server/templates/NOTES.txt
@@ -0,0 +1,15 @@
+1. Get the application URL by running these commands:
+{{- if contains "NodePort" .Values.service.type }}
+ export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "seata-server.fullname" . }})
+ export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
+ echo http://$NODE_IP:$NODE_PORT
+{{- else if contains "LoadBalancer" .Values.service.type }}
+ NOTE: It may take a few minutes for the LoadBalancer IP to be available.
+ You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "seata-server.fullname" . }}'
+ export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "seata-server.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
+ echo http://$SERVICE_IP:{{ .Values.service.port }}
+{{- else if contains "ClusterIP" .Values.service.type }}
+ export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "seata-server.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
+ echo "Visit http://127.0.0.1:8080 to use your application"
+ kubectl port-forward $POD_NAME 8080:80
+{{- end }}
diff --git a/seata/script/server/helm/seata-server/templates/_helpers.tpl b/seata/script/server/helm/seata-server/templates/_helpers.tpl
new file mode 100644
index 00000000..7158c2c0
--- /dev/null
+++ b/seata/script/server/helm/seata-server/templates/_helpers.tpl
@@ -0,0 +1,56 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "seata-server.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Create a default fully qualified app name.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+If release name contains chart name it will be used as a full name.
+*/}}
+{{- define "seata-server.fullname" -}}
+{{- if .Values.fullnameOverride -}}
+{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- $name := default .Chart.Name .Values.nameOverride -}}
+{{- if contains $name .Release.Name -}}
+{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Create chart name and version as used by the chart label.
+*/}}
+{{- define "seata-server.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Common labels
+*/}}
+{{- define "seata-server.labels" -}}
+app.kubernetes.io/name: {{ include "seata-server.name" . }}
+helm.sh/chart: {{ include "seata-server.chart" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end -}}
+
+{{/*
+Create the name of the service account to use
+*/}}
+{{- define "seata-server.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create -}}
+ {{ default (include "seata-server.fullname" .) .Values.serviceAccount.name }}
+{{- else -}}
+ {{ default "default" .Values.serviceAccount.name }}
+{{- end -}}
+{{- end -}}
diff --git a/seata/script/server/helm/seata-server/templates/deployment.yaml b/seata/script/server/helm/seata-server/templates/deployment.yaml
new file mode 100644
index 00000000..71af7c29
--- /dev/null
+++ b/seata/script/server/helm/seata-server/templates/deployment.yaml
@@ -0,0 +1,71 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+{{- if .Values.namespace }}
+ namespace: {{ .Values.namespace }}
+{{- end}}
+ name: {{ include "seata-server.name" . }}
+ labels:
+{{ include "seata-server.labels" . | indent 4 }}
+spec:
+ replicas: {{ .Values.replicaCount }}
+ selector:
+ matchLabels:
+ app.kubernetes.io/name: {{ include "seata-server.name" . }}
+ app.kubernetes.io/instance: {{ .Release.Name }}
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: {{ include "seata-server.name" . }}
+ app.kubernetes.io/instance: {{ .Release.Name }}
+ spec:
+ containers:
+ - name: {{ .Chart.Name }}
+ image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ ports:
+ - name: http
+ containerPort: 8091
+ protocol: TCP
+ {{- if .Values.volume }}
+ volumeMounts:
+ {{- range .Values.volume }}
+ - name: {{ .name }}
+ mountPath: {{ .mountPath }}
+ {{- end}}
+ {{- end}}
+ {{- if .Values.env }}
+ env:
+ {{- if .Values.env.seataIp }}
+ - name: SEATA_IP
+ value: {{ .Values.env.seataIp | quote }}
+ {{- end }}
+ {{- if .Values.env.seataPort }}
+ - name: SEATA_PORT
+ value: {{ .Values.env.seataPort | quote }}
+ {{- end }}
+ {{- if .Values.env.seataEnv }}
+ - name: SEATA_ENV
+ value: {{ .Values.env.seataEnv }}
+ {{- end }}
+ {{- if .Values.env.seataConfigName }}
+ - name: SEATA_CONFIG_NAME
+ value: {{ .Values.env.seataConfigName }}
+ {{- end }}
+ {{- if .Values.env.serverNode }}
+ - name: SERVER_NODE
+ value: {{ .Values.env.serverNode | quote }}
+ {{- end }}
+ {{- if .Values.env.storeMode }}
+ - name: STORE_MODE
+ value: {{ .Values.env.storeMode }}
+ {{- end }}
+ {{- end }}
+ {{- if .Values.volume }}
+ volumes:
+ {{- range .Values.volume }}
+ - name: {{ .name }}
+ hostPath:
+ path: {{ .hostPath}}
+ {{- end}}
+ {{- end}}
\ No newline at end of file
diff --git a/seata/script/server/helm/seata-server/templates/service.yaml b/seata/script/server/helm/seata-server/templates/service.yaml
new file mode 100644
index 00000000..812415b2
--- /dev/null
+++ b/seata/script/server/helm/seata-server/templates/service.yaml
@@ -0,0 +1,16 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "seata-server.fullname" . }}
+ labels:
+{{ include "seata-server.labels" . | indent 4 }}
+spec:
+ type: {{ .Values.service.type }}
+ ports:
+ - port: {{ .Values.service.port }}
+ targetPort: http
+ protocol: TCP
+ name: http
+ selector:
+ app.kubernetes.io/name: {{ include "seata-server.name" . }}
+ app.kubernetes.io/instance: {{ .Release.Name }}
diff --git a/seata/script/server/helm/seata-server/templates/tests/test-connection.yaml b/seata/script/server/helm/seata-server/templates/tests/test-connection.yaml
new file mode 100644
index 00000000..97d69903
--- /dev/null
+++ b/seata/script/server/helm/seata-server/templates/tests/test-connection.yaml
@@ -0,0 +1,15 @@
+apiVersion: v1
+kind: Pod
+metadata:
+ name: "{{ include "seata-server.fullname" . }}-test-connection"
+ labels:
+{{ include "seata-server.labels" . | indent 4 }}
+ annotations:
+ "helm.sh/hook": test-success
+spec:
+ containers:
+ - name: wget
+ image: busybox
+ command: ['wget']
+ args: ['{{ include "seata-server.fullname" . }}:{{ .Values.service.port }}']
+ restartPolicy: Never
diff --git a/seata/script/server/helm/seata-server/values.yaml b/seata/script/server/helm/seata-server/values.yaml
new file mode 100644
index 00000000..9e88f9af
--- /dev/null
+++ b/seata/script/server/helm/seata-server/values.yaml
@@ -0,0 +1,17 @@
+replicaCount: 1
+
+namespace: default
+
+image:
+ repository: seataio/seata-server
+ tag: latest
+ pullPolicy: IfNotPresent
+
+service:
+ type: NodePort
+ port: 30091
+
+env:
+ seataPort: "8091"
+ storeMode: "file"
+ serverNode: "1"
\ No newline at end of file
diff --git a/seata/script/server/kubernetes/seata-server.yaml b/seata/script/server/kubernetes/seata-server.yaml
new file mode 100644
index 00000000..a5548ed1
--- /dev/null
+++ b/seata/script/server/kubernetes/seata-server.yaml
@@ -0,0 +1,49 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: seata-server
+ namespace: default
+ labels:
+ k8s-app: seata-server
+spec:
+ type: NodePort
+ ports:
+ - port: 8091
+ nodePort: 30091
+ protocol: TCP
+ name: http
+ selector:
+ k8s-app: seata-server
+
+---
+
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: seata-server
+ namespace: default
+ labels:
+ k8s-app: seata-server
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ k8s-app: seata-server
+ template:
+ metadata:
+ labels:
+ k8s-app: seata-server
+ spec:
+ containers:
+ - name: seata-server
+ image: docker.io/seataio/seata-server:latest
+ imagePullPolicy: IfNotPresent
+ env:
+ - name: SEATA_PORT
+ value: "8091"
+ - name: STORE_MODE
+ value: file
+ ports:
+ - name: http
+ containerPort: 8091
+ protocol: TCP
\ No newline at end of file