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