diff --git a/core/src/main/java/io/seata/core/context/RootContext.java b/core/src/main/java/io/seata/core/context/RootContext.java index cc8821f5586d5d33cca6fa1a8e8da02b35227e9f..db24107883817b76bffd5ea11a87c3b05eb96f03 100644 --- a/core/src/main/java/io/seata/core/context/RootContext.java +++ b/core/src/main/java/io/seata/core/context/RootContext.java @@ -19,11 +19,8 @@ import java.util.Map; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import io.seata.common.DefaultValues; import io.seata.common.exception.ShouldNeverHappenException; import io.seata.common.util.StringUtils; -import io.seata.config.ConfigurationFactory; -import io.seata.core.constants.ConfigurationKeys; import io.seata.core.model.BranchType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -61,13 +58,16 @@ public class RootContext { private static ContextCore CONTEXT_HOLDER = ContextCoreLoader.load(); - private static BranchType DEFAULT_BRANCH_TYPE = BranchType.get(ConfigurationFactory.getInstance() - .getConfig(ConfigurationKeys.DATA_SOURCE_PROXY_MODE, DefaultValues.DEFAULT_DATA_SOURCE_PROXY_MODE)); + private static BranchType DEFAULT_BRANCH_TYPE; public static void setDefaultBranchType(BranchType defaultBranchType) { if (defaultBranchType != AT && defaultBranchType != XA) { - throw new IllegalArgumentException("The default branch type must be AT or XA." + - " the value of the argument is: " + defaultBranchType); + throw new IllegalArgumentException("The default branch type must be " + AT + " or " + XA + "." + + " the value of the argument is: " + defaultBranchType); + } + if (DEFAULT_BRANCH_TYPE != null && DEFAULT_BRANCH_TYPE != defaultBranchType && LOGGER.isWarnEnabled()) { + LOGGER.warn("The `{}.DEFAULT_BRANCH_TYPE` has been set repeatedly. The value changes from {} to {}", + RootContext.class.getSimpleName(), DEFAULT_BRANCH_TYPE, defaultBranchType); } DEFAULT_BRANCH_TYPE = defaultBranchType; } @@ -170,7 +170,7 @@ public class RootContext { return branchType; } //Returns the default branch type. - return DEFAULT_BRANCH_TYPE; + return DEFAULT_BRANCH_TYPE != null ? DEFAULT_BRANCH_TYPE : BranchType.AT; } return null; } diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/DataSourceProxy.java b/rm-datasource/src/main/java/io/seata/rm/datasource/DataSourceProxy.java index 2fdc9f4b6bd1e0adecb63e47ffe00a9a7f026b71..b9d8c0233dece99d4f4a12294842d3467c09565a 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/DataSourceProxy.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/DataSourceProxy.java @@ -15,16 +15,17 @@ */ package io.seata.rm.datasource; -import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import javax.sql.DataSource; import io.seata.common.thread.NamedThreadFactory; import io.seata.config.ConfigurationFactory; import io.seata.core.constants.ConfigurationKeys; +import io.seata.core.context.RootContext; import io.seata.core.model.BranchType; import io.seata.core.model.Resource; import io.seata.rm.DefaultResourceManager; @@ -114,6 +115,9 @@ public class DataSourceProxy extends AbstractDataSourceProxy implements Resource } }, 0, TABLE_META_CHECKER_INTERVAL, TimeUnit.MILLISECONDS); } + + //Set the default branch type to 'AT' in the RootContext. + RootContext.setDefaultBranchType(this.getBranchType()); } /** diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/DataSourceProxyXA.java b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/DataSourceProxyXA.java index e0bca84249c4a325acc31d439e982af0b70da13c..596f4f90802e8f6f5b547db1795941315e044b1a 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/DataSourceProxyXA.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/DataSourceProxyXA.java @@ -15,6 +15,11 @@ */ package io.seata.rm.datasource.xa; +import java.sql.Connection; +import java.sql.SQLException; +import javax.sql.DataSource; +import javax.sql.XAConnection; + import io.seata.core.context.RootContext; import io.seata.core.model.BranchType; import io.seata.rm.datasource.SeataDataSourceProxy; @@ -23,11 +28,6 @@ import io.seata.rm.datasource.util.XAUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.sql.DataSource; -import javax.sql.XAConnection; -import java.sql.Connection; -import java.sql.SQLException; - /** * DataSource proxy for XA mode. * @@ -49,6 +49,9 @@ public class DataSourceProxyXA extends AbstractDataSourceProxyXA { this.dataSource = dataSource; this.branchType = BranchType.XA; JdbcUtils.initDataSourceResource(this, dataSource, resourceGroupId); + + //Set the default branch type to 'XA' in the RootContext. + RootContext.setDefaultBranchType(this.getBranchType()); } @Override diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java index 83e1e3285d8e14602b091c3971f8d8d1f8268093..a2a2d908f9a9b8e537b23ec86c4a41f97a8650ce 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/StarterConstants.java @@ -17,6 +17,7 @@ package io.seata.spring.boot.autoconfigure; import java.util.HashMap; +import io.seata.spring.boot.autoconfigure.properties.SeataProperties; import io.seata.spring.boot.autoconfigure.properties.client.LockProperties; import io.seata.spring.boot.autoconfigure.properties.client.LogProperties; import io.seata.spring.boot.autoconfigure.properties.client.RmProperties; @@ -86,6 +87,8 @@ public interface StarterConstants { private static final long serialVersionUID = -8902807645596274597L; { + put(SEATA_PREFIX, SeataProperties.class); + put(CLIENT_RM_PREFIX, RmProperties.class); put(CLIENT_TM_PREFIX, TmProperties.class); put(LOCK_PREFIX, LockProperties.class); diff --git a/spring/src/main/java/io/seata/spring/annotation/datasource/AutoDataSourceProxyRegistrar.java b/spring/src/main/java/io/seata/spring/annotation/datasource/AutoDataSourceProxyRegistrar.java index 970daebced225065616f90b6ec8b7cff7612d8d2..29e61922f416cfd0dd0946fe03e13602ec2fd0bc 100644 --- a/spring/src/main/java/io/seata/spring/annotation/datasource/AutoDataSourceProxyRegistrar.java +++ b/spring/src/main/java/io/seata/spring/annotation/datasource/AutoDataSourceProxyRegistrar.java @@ -15,16 +15,14 @@ */ package io.seata.spring.annotation.datasource; -import io.seata.core.context.RootContext; -import io.seata.core.model.BranchType; +import java.util.Map; + import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; import org.springframework.core.type.AnnotationMetadata; -import java.util.Map; - /** * @author xingfudeshi@gmail.com * The type auto data source proxy registrar @@ -45,9 +43,6 @@ public class AutoDataSourceProxyRegistrar implements ImportBeanDefinitionRegistr String[] excludes = (String[]) annotationAttributes.get(ATTRIBUTE_KEY_EXCLUDES); String dataSourceProxyMode = (String) annotationAttributes.get(ATTRIBUTE_KEY_DATA_SOURCE_PROXY_MODE); - //Set the default branch type to RootContext. - RootContext.setDefaultBranchType(BranchType.get(dataSourceProxyMode)); - //register seataDataSourceBeanPostProcessor bean def if (!registry.containsBeanDefinition(BEAN_NAME_SEATA_DATA_SOURCE_BEAN_POST_PROCESSOR)) { AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder diff --git a/spring/src/main/java/io/seata/spring/annotation/datasource/SeataAutoDataSourceProxyAdvice.java b/spring/src/main/java/io/seata/spring/annotation/datasource/SeataAutoDataSourceProxyAdvice.java index 433a23852dcc305e547746762ee4c34651219b6b..0e497874e07a08ae4ff950c05578646089706c88 100644 --- a/spring/src/main/java/io/seata/spring/annotation/datasource/SeataAutoDataSourceProxyAdvice.java +++ b/spring/src/main/java/io/seata/spring/annotation/datasource/SeataAutoDataSourceProxyAdvice.java @@ -15,8 +15,8 @@ */ package io.seata.spring.annotation.datasource; -import javax.sql.DataSource; import java.lang.reflect.Method; +import javax.sql.DataSource; import io.seata.core.context.RootContext; import io.seata.core.model.BranchType; @@ -46,6 +46,9 @@ public class SeataAutoDataSourceProxyAdvice implements MethodInterceptor, Introd } else { throw new IllegalArgumentException("Unknown dataSourceProxyMode: " + dataSourceProxyMode); } + + //Set the default branch type in the RootContext. + RootContext.setDefaultBranchType(this.dataSourceProxyMode); } @Override