diff --git a/README.md b/README.md index 98d7b9d75..85d5d4a88 100644 --- a/README.md +++ b/README.md @@ -82,10 +82,10 @@ TODO 此处应有一个架构图的装逼 JPG 图。 | `admin-application` | 管理员 HTTP 服务 | HTTP 18083 | [接口文档](http://api.shop.iocoder.cn:18099/admin-api/doc.html) | | `user-application` | 用户 HTTP 服务 | HTTP 18082 | [接口文档](http://api.shop.iocoder.cn:18099/user-api/doc.html) | | `product-application` | 商品 HTTP 服务 | HTTP 18081 | [接口文档](http://api.shop.iocoder.cn:18099/product-api/doc.html) | -| `pay-application` | 支付 HTTP 服务 | HTTP 18084 | | -| `promotion-application` | 促销 HTTP 服务 | HTTP 18085 | | -| `search-application` | 搜索 HTTP 服务 | HTTP 18086 | | -| `order-application` | 订单 HTTP 服务 | HTTP 18088 | | +| `pay-application` | 支付 HTTP 服务 | HTTP 18084 | [接口文档](http://api.shop.iocoder.cn:18099/pay-api/doc.html) | +| `promotion-application` | 促销 HTTP 服务 | HTTP 18085 | [接口文档](http://api.shop.iocoder.cn:18099/promotion-api/doc.html) | +| `search-application` | 搜索 HTTP 服务 | HTTP 18086 | [接口文档](http://api.shop.iocoder.cn:18099/search-api/doc.html) | +| `order-application` | 订单 HTTP 服务 | HTTP 18088 | [接口文档](http://api.shop.iocoder.cn:18099/order-api/doc.html) | ------- diff --git a/pay/pay-application/src/main/resources/application-test.yaml b/pay/pay-application/src/main/resources/application-test.yaml new file mode 100644 index 000000000..fe7f43541 --- /dev/null +++ b/pay/pay-application/src/main/resources/application-test.yaml @@ -0,0 +1,6 @@ +swagger: + enable: true + title: 支付子系统 + description: 支付子系统 + version: 1.0.0 + base-package: cn.iocoder.mall.pay.application.controller diff --git a/pay/pay-application/src/main/resources/application.yaml b/pay/pay-application/src/main/resources/application.yaml index 8b3774d8e..689842999 100644 --- a/pay/pay-application/src/main/resources/application.yaml +++ b/pay/pay-application/src/main/resources/application.yaml @@ -9,7 +9,4 @@ server: context-path: /pay-api/ swagger: - title: 支付子系统 - description: 支付子系统 - version: 1.0.0 - base-package: cn.iocoder.mall.pay.application.controller + enable: false diff --git a/pay/pay-service-impl/pom.xml b/pay/pay-service-impl/pom.xml index 0d900e7f3..65aedbc29 100644 --- a/pay/pay-service-impl/pom.xml +++ b/pay/pay-service-impl/pom.xml @@ -54,6 +54,15 @@ mybatis-plus-boot-starter + + io.seata + seata-spring + + + io.seata + seata-dubbo + + org.apache.dubbo diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/config/DatabaseConfiguration.java b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/config/DatabaseConfiguration.java index b98b2998c..c8636d211 100644 --- a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/config/DatabaseConfiguration.java +++ b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/config/DatabaseConfiguration.java @@ -1,14 +1,48 @@ package cn.iocoder.mall.pay.biz.config; +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; +import io.seata.rm.datasource.DataSourceProxy; +import io.seata.spring.annotation.GlobalTransactionScanner; import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.DependsOn; +import org.springframework.context.annotation.Primary; import org.springframework.transaction.annotation.EnableTransactionManagement; +import javax.sql.DataSource; + @Configuration @MapperScan("cn.iocoder.mall.pay.biz.dao") // 扫描对应的 Mapper 接口 @EnableTransactionManagement(proxyTargetClass = true) // 启动事务管理。为什么使用 proxyTargetClass 参数,参见 https://blog.csdn.net/huang_550/article/details/76492600 public class DatabaseConfiguration { - // 数据源,使用 Druid + @Value("${spring.application.name}") + private String applicationId; + @Value("${seata.tx-service-group}") + private String txServiceGroup; + + @Bean("druidDataSource") + @ConfigurationProperties("spring.datasource.druid") + public DruidDataSource druidDataSource(){ + return DruidDataSourceBuilder.create().build(); + } + + @ConfigurationProperties(prefix = "spring.datasource") + @Primary + @Bean("dataSource") + @DependsOn("druidDataSource") // 解决多数据源,循环依赖的问题。主要发生点在 DataSourceInitializerInvoker + public DataSource dataSource() { + DruidDataSource druidDataSource = druidDataSource(); + return new DataSourceProxy(druidDataSource); + } + + @Bean + public GlobalTransactionScanner globalTransactionScanner() { + return new GlobalTransactionScanner(applicationId, txServiceGroup); + } } diff --git a/pay/pay-service-impl/src/main/resources/config/application.yaml b/pay/pay-service-impl/src/main/resources/config/application.yaml index 2acaa6315..c32231710 100644 --- a/pay/pay-service-impl/src/main/resources/config/application.yaml +++ b/pay/pay-service-impl/src/main/resources/config/application.yaml @@ -35,3 +35,7 @@ rocketmq: name-server: 127.0.0.1:9876 producer: group: pay-producer-group + +# seata +seata: + tx-service-group: my_test_tx_group diff --git a/pay/pay-service-impl/src/main/resources/file.conf b/pay/pay-service-impl/src/main/resources/file.conf new file mode 100644 index 000000000..8b60b29c3 --- /dev/null +++ b/pay/pay-service-impl/src/main/resources/file.conf @@ -0,0 +1,69 @@ +transport { + # tcp udt unix-domain-socket + type = "TCP" + #NIO NATIVE + server = "NIO" + #enable heartbeat + heartbeat = true + #thread factory for netty + thread-factory { + boss-thread-prefix = "NettyBoss" + worker-thread-prefix = "NettyServerNIOWorker" + server-executor-thread-prefix = "NettyServerBizHandler" + share-boss-worker = false + client-selector-thread-prefix = "NettyClientSelector" + client-selector-thread-size = 1 + client-worker-thread-prefix = "NettyClientWorkerThread" + # netty boss thread size,will not be used for UDT + boss-thread-size = 1 + #auto default pin or 8 + worker-thread-size = 8 + } +} + +service { + #vgroup->rgroup + vgroup_mapping.my_test_tx_group = "default" + #only support single node + default.grouplist = "180.167.213.26:8091" + #degrade current not support + enableDegrade = false + #disable + disable = false +} + +client { + async.commit.buffer.limit = 10000 + lock { + retry.internal = 10 + retry.times = 30 + } +} +## transaction log store +store { + ## store mode: file、db + mode = "file" + + ## file store + file { + dir = "file_store/data" + + # branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions + max-branch-session-size = 16384 + # globe session size , if exceeded throws exceptions + max-global-session-size = 512 + # file buffer size , if exceeded allocate new buffer + file-write-buffer-cache-size = 16384 + # when recover batch read size + session.reload.read_size = 100 + } + + ## database store + db { + driver_class = "" + url = "" + user = "" + password = "" + } +} + diff --git a/pay/pay-service-impl/src/main/resources/registry.conf b/pay/pay-service-impl/src/main/resources/registry.conf new file mode 100644 index 000000000..f73989514 --- /dev/null +++ b/pay/pay-service-impl/src/main/resources/registry.conf @@ -0,0 +1,14 @@ +registry { + type = "file" + + file { + name = "file.conf" + } + + zk { + cluster = "default" + serverAddr = "192.168.88.10:2181" + session.timeout = 6000 + connect.timeout = 2000 + } +}