From 6b81a678d5299aae1d2a2be6ab6c40a8a207ab29 Mon Sep 17 00:00:00 2001 From: life <13122192336@163.com> Date: Tue, 8 Aug 2023 22:21:53 +0800 Subject: [PATCH] =?UTF-8?q?seata=E5=85=BC=E5=AE=B9spring=E5=8D=95=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=BA=90=E6=83=85=E5=86=B5=EF=BC=8C=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=BA=8B=E4=BE=8B=E5=85=BC=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MultiDataSourceAutoConfiguration.java | 1 + .../boot/MybatisFlexAutoConfiguration.java | 6 ++++- .../spring/boot/MybatisFlexProperties.java | 1 + mybatis-flex-spring/pom.xml | 6 +++++ .../spring/FlexSqlSessionFactoryBean.java | 27 +++++++++++++++++++ .../com/mybatisflex/spring}/SeataMode.java | 2 +- .../src/main/resources/application.yml | 22 +++++++-------- .../common-service/pom.xml | 6 +++++ .../src/main/resources/application.yml | 22 +++++++-------- .../src/main/resources/application.yml | 22 +++++++-------- .../mybatis-flex-spring-boot-seata/pom.xml | 6 ----- .../src/main/resources/application.yml | 1 + 12 files changed, 78 insertions(+), 44 deletions(-) rename {mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot => mybatis-flex-spring/src/main/java/com/mybatisflex/spring}/SeataMode.java (95%) diff --git a/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MultiDataSourceAutoConfiguration.java b/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MultiDataSourceAutoConfiguration.java index f8b155ea..8576ddd3 100644 --- a/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MultiDataSourceAutoConfiguration.java +++ b/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MultiDataSourceAutoConfiguration.java @@ -19,6 +19,7 @@ import com.mybatisflex.core.datasource.DataSourceBuilder; import com.mybatisflex.core.datasource.DataSourceDecipher; import com.mybatisflex.core.datasource.DataSourceManager; import com.mybatisflex.core.datasource.FlexDataSource; +import com.mybatisflex.spring.SeataMode; import com.mybatisflex.spring.boot.MybatisFlexProperties.SeataConfig; import com.mybatisflex.spring.datasource.DataSourceAdvice; import io.seata.rm.datasource.DataSourceProxy; diff --git a/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MybatisFlexAutoConfiguration.java b/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MybatisFlexAutoConfiguration.java index be082ebe..51ad7587 100644 --- a/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MybatisFlexAutoConfiguration.java +++ b/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MybatisFlexAutoConfiguration.java @@ -226,8 +226,12 @@ public class MybatisFlexAutoConfiguration implements InitializingBean { @ConditionalOnMissingBean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { - SqlSessionFactoryBean factory = new FlexSqlSessionFactoryBean(); + FlexSqlSessionFactoryBean factory = new FlexSqlSessionFactoryBean(); factory.setDataSource(dataSource); + if (properties.getSeataConfig() !=null && properties.getSeataConfig().isEnable()){ + factory.setSeata(true); + factory.setSeataMode(properties.getSeataConfig().getSeataMode()); + } if (properties.getConfiguration() == null || properties.getConfiguration().getVfsImpl() == null) { factory.setVfs(SpringBootVFS.class); } diff --git a/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MybatisFlexProperties.java b/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MybatisFlexProperties.java index d5bf56fb..b7cbd98c 100644 --- a/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MybatisFlexProperties.java +++ b/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MybatisFlexProperties.java @@ -17,6 +17,7 @@ package com.mybatisflex.spring.boot; import com.mybatisflex.core.FlexConsts; import com.mybatisflex.core.FlexGlobalConfig; +import com.mybatisflex.spring.SeataMode; import org.apache.ibatis.io.VFS; import org.apache.ibatis.logging.Log; import org.apache.ibatis.mapping.ResultSetType; diff --git a/mybatis-flex-spring/pom.xml b/mybatis-flex-spring/pom.xml index 7facc147..b786dc4d 100644 --- a/mybatis-flex-spring/pom.xml +++ b/mybatis-flex-spring/pom.xml @@ -40,6 +40,12 @@ spring-jdbc + + io.seata + seata-spring-boot-starter + 1.7.0 + + diff --git a/mybatis-flex-spring/src/main/java/com/mybatisflex/spring/FlexSqlSessionFactoryBean.java b/mybatis-flex-spring/src/main/java/com/mybatisflex/spring/FlexSqlSessionFactoryBean.java index 9eea1ccc..90769b57 100644 --- a/mybatis-flex-spring/src/main/java/com/mybatisflex/spring/FlexSqlSessionFactoryBean.java +++ b/mybatis-flex-spring/src/main/java/com/mybatisflex/spring/FlexSqlSessionFactoryBean.java @@ -19,6 +19,8 @@ import com.mybatisflex.core.FlexConsts; import com.mybatisflex.core.datasource.FlexDataSource; import com.mybatisflex.core.mybatis.FlexConfiguration; import com.mybatisflex.core.mybatis.FlexSqlSessionFactoryBuilder; +import io.seata.rm.datasource.DataSourceProxy; +import io.seata.rm.datasource.xa.DataSourceProxyXA; import org.apache.ibatis.builder.xml.XMLConfigBuilder; import org.apache.ibatis.builder.xml.XMLMapperBuilder; import org.apache.ibatis.cache.Cache; @@ -152,6 +154,21 @@ public class FlexSqlSessionFactoryBean extends SqlSessionFactoryBean private ObjectWrapperFactory objectWrapperFactory; + + private boolean seata = false; + + + private SeataMode seataMode = SeataMode.AT; + + + public void setSeata(boolean seata) { + this.seata = seata; + } + + public void setSeataMode(SeataMode seataMode) { + this.seataMode = seataMode; + } + /** * Sets the ObjectFactory. * @@ -598,6 +615,16 @@ public class FlexSqlSessionFactoryBean extends SqlSessionFactoryBean // fixed https://gitee.com/mybatis-flex/mybatis-flex/issues/I70QWU // 兼容SpringManagedTransactionFactory否则在使用JdbcTemplate,多数据源使用JdbcTemplate报错 //fixed https://gitee.com/mybatis-flex/mybatis-flex/issues/I7HJ4J + // 兼容单数据源seata + if (!(dataSource instanceof FlexDataSource)){ + if (seata){ + if (seataMode == SeataMode.XA){ + dataSource = new DataSourceProxyXA(dataSource); + }else { + dataSource = new DataSourceProxy(dataSource); + } + } + } targetConfiguration.setEnvironment(new Environment(this.environment, // this.transactionFactory == null ? new SpringManagedTransactionFactory() : this.transactionFactory, // this.transactionFactory == null ? new JdbcTransactionFactory() : this.transactionFactory, diff --git a/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/SeataMode.java b/mybatis-flex-spring/src/main/java/com/mybatisflex/spring/SeataMode.java similarity index 95% rename from mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/SeataMode.java rename to mybatis-flex-spring/src/main/java/com/mybatisflex/spring/SeataMode.java index b02af607..cbabe97b 100644 --- a/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/SeataMode.java +++ b/mybatis-flex-spring/src/main/java/com/mybatisflex/spring/SeataMode.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mybatisflex.spring.boot; +package com.mybatisflex.spring; /** * @author life diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-seata-demo/account-service/src/main/resources/application.yml b/mybatis-flex-test/mybatis-flex-spring-boot-seata-demo/account-service/src/main/resources/application.yml index 62c571bf..371eb904 100755 --- a/mybatis-flex-test/mybatis-flex-spring-boot-seata-demo/account-service/src/main/resources/application.yml +++ b/mybatis-flex-test/mybatis-flex-spring-boot-seata-demo/account-service/src/main/resources/application.yml @@ -4,21 +4,19 @@ mybatis-flex: seata-config: enable: true #启动seata seata-mode: XA #xa或者ta - datasource: - accountdb: - url: jdbc:mysql://127.0.0.1:3306/db_account - username: root - password: 131496 +# datasource: +# accountdb: +# url: jdbc:mysql://127.0.0.1:3306/db_account +# username: root +# password: 131496 spring: main: allow-circular-references: true -#spring: -# datasource: -# type: com.alibaba.druid.pool.DruidDataSource -# driver-class-name: com.mysql.jdbc.Driver -# url: jdbc:mysql://127.0.0.1:3306/db_account?useSSL=false&serverTimezone=UTC -# username: root -# password: 131496 + datasource: + driver-class-name: com.mysql.jdbc.Driver + url: jdbc:mysql://127.0.0.1:3306/db_account?useSSL=false&serverTimezone=UTC + username: root + password: 131496 seata: enabled: true application-id: account-service diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-seata-demo/common-service/pom.xml b/mybatis-flex-test/mybatis-flex-spring-boot-seata-demo/common-service/pom.xml index 5c55fb9e..512a7854 100644 --- a/mybatis-flex-test/mybatis-flex-spring-boot-seata-demo/common-service/pom.xml +++ b/mybatis-flex-test/mybatis-flex-spring-boot-seata-demo/common-service/pom.xml @@ -51,6 +51,12 @@ ${seata.version} + + org.springframework.boot + spring-boot-starter-test + ${springboot.version} + + diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-seata-demo/order-service/src/main/resources/application.yml b/mybatis-flex-test/mybatis-flex-spring-boot-seata-demo/order-service/src/main/resources/application.yml index 3cac9a3c..19705685 100755 --- a/mybatis-flex-test/mybatis-flex-spring-boot-seata-demo/order-service/src/main/resources/application.yml +++ b/mybatis-flex-test/mybatis-flex-spring-boot-seata-demo/order-service/src/main/resources/application.yml @@ -4,21 +4,19 @@ mybatis-flex: seata-config: enable: true #启动seata seata-mode: XA #xa或者ta - datasource: - orderdb: - url: jdbc:mysql://127.0.0.1:3306/db_order - username: root - password: 131496 +# datasource: +# orderdb: +# url: jdbc:mysql://127.0.0.1:3306/db_order +# username: root +# password: 131496 spring: main: allow-circular-references: true -#spring: -# datasource: -# type: com.alibaba.druid.pool.DruidDataSource -# driver-class-name: com.mysql.jdbc.Driver -# url: jdbc:mysql://127.0.0.1:3306/db_order?useSSL=false&serverTimezone=UTC -# username: root -# password: 131496 + datasource: + driver-class-name: com.mysql.jdbc.Driver + url: jdbc:mysql://127.0.0.1:3306/db_order?useSSL=false&serverTimezone=UTC + username: root + password: 131496 seata: enabled: true application-id: order-service diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-seata-demo/stock-service/src/main/resources/application.yml b/mybatis-flex-test/mybatis-flex-spring-boot-seata-demo/stock-service/src/main/resources/application.yml index 86474919..b681e6fa 100755 --- a/mybatis-flex-test/mybatis-flex-spring-boot-seata-demo/stock-service/src/main/resources/application.yml +++ b/mybatis-flex-test/mybatis-flex-spring-boot-seata-demo/stock-service/src/main/resources/application.yml @@ -4,21 +4,19 @@ mybatis-flex: seata-config: enable: true #启动seata seata-mode: XA #xa或者ta - datasource: - stockdb: - url: jdbc:mysql://127.0.0.1:3306/db_stock - username: root - password: 131496 -#spring: -# datasource: -# type: com.alibaba.druid.pool.DruidDataSource -# driver-class-name: com.mysql.jdbc.Driver -# url: jdbc:mysql://127.0.0.1:3306/db_stock?useSSL=false&serverTimezone=UTC -# username: root -# password: 131496 +# datasource: +# stockdb: +# url: jdbc:mysql://127.0.0.1:3306/db_stock +# username: root +# password: 131496 spring: main: allow-circular-references: true + datasource: + driver-class-name: com.mysql.jdbc.Driver + url: jdbc:mysql://127.0.0.1:3306/db_stock?useSSL=false&serverTimezone=UTC + username: root + password: 131496 seata: enabled: true application-id: stock-service diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-seata/pom.xml b/mybatis-flex-test/mybatis-flex-spring-boot-seata/pom.xml index 5e9742c0..85f2e4ad 100644 --- a/mybatis-flex-test/mybatis-flex-spring-boot-seata/pom.xml +++ b/mybatis-flex-test/mybatis-flex-spring-boot-seata/pom.xml @@ -91,12 +91,6 @@ RELEASE compile - - - io.seata - seata-spring-boot-starter - 1.7.0 - diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-seata/src/main/resources/application.yml b/mybatis-flex-test/mybatis-flex-spring-boot-seata/src/main/resources/application.yml index 97c7b42c..2000304f 100644 --- a/mybatis-flex-test/mybatis-flex-spring-boot-seata/src/main/resources/application.yml +++ b/mybatis-flex-test/mybatis-flex-spring-boot-seata/src/main/resources/application.yml @@ -1,3 +1,4 @@ + mybatis-flex: seata-config: enable: true #启动seata