Skip to content

Commit

Permalink
optimize:refactor of auto proxying of datasource. (apache#2095)
Browse files Browse the repository at this point in the history
  • Loading branch information
xingfudeshi authored Jan 15, 2020
1 parent c796f8d commit 734ee0c
Show file tree
Hide file tree
Showing 16 changed files with 242 additions and 172 deletions.
18 changes: 0 additions & 18 deletions core/src/main/java/io/seata/core/constants/ConfigurationKeys.java
Original file line number Diff line number Diff line change
Expand Up @@ -313,24 +313,6 @@ public class ConfigurationKeys {
*/
public static final String TRANSACTION_UNDO_LOG_DEFAULT_TABLE = "undo_log";

/**
* The constant SUPPORT_PREFIX.
*/
public static final String SUPPORT_PREFIX = "support.";
/**
* The constant SPRING_PREFIX.
*/
public static final String SPRING_PREFIX = "spring.";
/**
* The constant DATASOURCE_PREFIX.
*/
public static final String DATASOURCE_PREFIX = "datasource.";
/**
* The constant DATASOURCE_AUTOPROXY.
*/
public static final String DATASOURCE_AUTOPROXY = CLIENT_PREFIX + SUPPORT_PREFIX + SPRING_PREFIX + DATASOURCE_PREFIX
+ "autoproxy";

/**
* The constant MAX_COMMIT_RETRY_TIMEOUT.
*/
Expand Down
4 changes: 0 additions & 4 deletions script/client/conf/file.conf
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,4 @@ client {
log {
exceptionRate = 100
}
support {
# auto proxy the DataSource bean
spring.datasource.autoproxy = false
}
}
3 changes: 2 additions & 1 deletion script/client/spring/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
seata.enabled=true
seata.application-id=test
seata.tx-service-group=my_test_tx_group
seata.enable-auto-data-source-proxy=true
seata.use-jdk-proxy=false
seata.client.rm-async-commit-buffer-limit=1000
seata.client.rm-report-retry-count=5
seata.client.rm-table-meta-check-enable=false
Expand All @@ -26,7 +28,6 @@ seata.client.rm.lock.lock-retry-times=30
seata.client.rm.lock.lock-retry-policy-branch-rollback-on-conflict=true
seata.client.tm-commit-retry-count=5
seata.client.tm-rollback-retry-count=5
seata.client.support.spring.datasource-autoproxy=true
seata.client.undo.undo-data-validation=true
seata.client.undo.undo-log-serialization=jackson
seata.client.undo.undo-log-table=undo_log
Expand Down
5 changes: 2 additions & 3 deletions script/client/spring/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ seata:
enabled: true
application-id: test
tx-service-group: my_test_tx_group
enable-auto-data-source-proxy: true
use-jdk-proxy: false
client:
rm-async-commit-buffer-limit: 1000
rm-report-retry-count: 5
Expand All @@ -14,9 +16,6 @@ seata:
lock-retry-policy-branch-rollback-on-conflict: true
tm-commit-retry-count: 5
tm-rollback-retry-count: 5
support:
spring:
datasource-autoproxy: true
undo:
undo-data-validation: true
undo-log-serialization: jackson
Expand Down
1 change: 0 additions & 1 deletion script/config-center/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,3 @@ metrics.enabled=false
metrics.registry-type=compact
metrics.exporter-list=prometheus
metrics.exporter-prometheus-port=9898
client.support.spring.datasource.autoproxy=false
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@
package io.seata.spring.boot.autoconfigure;

import io.seata.spring.annotation.GlobalTransactionScanner;
import io.seata.spring.annotation.datasource.SeataDataSourceBeanPostProcessor;
import io.seata.spring.boot.autoconfigure.properties.SeataProperties;
import io.seata.spring.boot.autoconfigure.util.SpringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
Expand All @@ -29,6 +29,8 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;

import static io.seata.spring.annotation.datasource.AutoDataSourceProxyRegistrar.BEAN_NAME_SEATA_DATA_SOURCE_BEAN_POST_PROCESSOR;

/**
* @author [email protected]
*/
Expand All @@ -38,8 +40,6 @@
@EnableConfigurationProperties({SeataProperties.class})
public class SeataAutoConfiguration {
private static final Logger LOGGER = LoggerFactory.getLogger(SeataAutoConfiguration.class);
@Autowired
private SeataProperties seataProperties;

@Bean
public SpringUtils springUtils() {
Expand All @@ -49,12 +49,17 @@ public SpringUtils springUtils() {
@Bean
@DependsOn({"springUtils"})
@ConditionalOnMissingBean(GlobalTransactionScanner.class)
public GlobalTransactionScanner globalTransactionScanner() {
public GlobalTransactionScanner globalTransactionScanner(SeataProperties seataProperties) {
if (LOGGER.isInfoEnabled()) {
LOGGER.info("Automatically configure Seata");
}
return new GlobalTransactionScanner(seataProperties.getApplicationId(), seataProperties.getTxServiceGroup());
}


@Bean(BEAN_NAME_SEATA_DATA_SOURCE_BEAN_POST_PROCESSOR)
@ConditionalOnProperty(prefix = StarterConstants.SEATA_PREFIX, name = "enableAutoDataSourceProxy", havingValue = "true", matchIfMissing = true)
@ConditionalOnMissingBean(SeataDataSourceBeanPostProcessor.class)
public SeataDataSourceBeanPostProcessor seataDataSourceBeanPostProcessor(SeataProperties seataProperties) {
return new SeataDataSourceBeanPostProcessor(seataProperties.isUseJdkProxy());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@
*/
package io.seata.spring.boot.autoconfigure;

import java.util.HashMap;

import io.seata.spring.boot.autoconfigure.properties.file.ClientProperties;
import io.seata.spring.boot.autoconfigure.properties.file.LockProperties;
import io.seata.spring.boot.autoconfigure.properties.file.LogProperties;
import io.seata.spring.boot.autoconfigure.properties.file.ServiceProperties;
import io.seata.spring.boot.autoconfigure.properties.file.ShutdownProperties;
import io.seata.spring.boot.autoconfigure.properties.file.SpringProperties;
import io.seata.spring.boot.autoconfigure.properties.file.SupportProperties;
import io.seata.spring.boot.autoconfigure.properties.file.ThreadFactoryProperties;
import io.seata.spring.boot.autoconfigure.properties.file.TransportProperties;
import io.seata.spring.boot.autoconfigure.properties.file.UndoProperties;
Expand All @@ -42,8 +42,6 @@
import io.seata.spring.boot.autoconfigure.properties.registry.RegistrySofaProperties;
import io.seata.spring.boot.autoconfigure.properties.registry.RegistryZooKeeperProperties;

import java.util.HashMap;

/**
* @author [email protected]
*/
Expand All @@ -60,8 +58,6 @@ public class StarterConstants {
public static final String LOCK_PREFIX = CLIENT_RM_PREFIX + ".lock";
public static final String UNDO_PREFIX = CLIENT_PREFIX + ".undo";
public static final String LOG_PREFIX = CLIENT_PREFIX + ".log";
public static final String SUPPORT_PREFIX = CLIENT_PREFIX + ".support";
public static final String SPRING_PREFIX = SUPPORT_PREFIX + ".spring";

public static final String REGISTRY_PREFIX = SEATA_PREFIX + ".registry";
public static final String REGISTRY_NACOS_PREFIX = REGISTRY_PREFIX + ".nacos";
Expand Down Expand Up @@ -89,8 +85,6 @@ public class StarterConstants {
put(LOCK_PREFIX, LockProperties.class);
put(SERVICE_PREFIX, ServiceProperties.class);
put(SHUTDOWN_PREFIX, ShutdownProperties.class);
put(SPRING_PREFIX, SpringProperties.class);
put(SUPPORT_PREFIX, SupportProperties.class);
put(THREAD_FACTORY_PREFIX, ThreadFactoryProperties.class);
put(UNDO_PREFIX, UndoProperties.class);
put(LOG_PREFIX, LogProperties.class);
Expand Down Expand Up @@ -125,8 +119,6 @@ public class StarterConstants {
public static String NORMALIZED_KEY_VGROUP_MAPPING = "vgroupMapping";
public static String SPECIAL_KEY_GROUPLIST = "grouplist";
public static String NORMALIZED_KEY_GROUPLIST = "grouplist";
public static String SPECIAL_KEY_DATASOURCE_AUTOPROXY = "datasource.autoproxy";
public static String NORMALIZED_KEY_DATASOURCE_AUTOPROXY = "datasourceAutoproxy";
public static String SPECIAL_KEY_UNDO = "client.undo.";
public static String NORMALIZED_KEY_UNDO = "client.undo.";
public static String SPECIAL_KEY_CLIENT = "client.";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,12 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Component;

import static io.seata.spring.boot.autoconfigure.StarterConstants.SEATA_PREFIX;

/**
* @author [email protected]
*/
@Component
@ConfigurationProperties(prefix = SEATA_PREFIX)
@EnableConfigurationProperties(SpringCloudAlibabaConfiguration.class)
public class SeataProperties {
Expand All @@ -41,6 +39,14 @@ public class SeataProperties {
* transaction service group
*/
private String txServiceGroup;
/**
* Whether enable auto proxying of datasource bean
*/
private boolean enableAutoDataSourceProxy = true;
/**
* Whether use JDK proxy instead of CGLIB proxy
*/
private boolean useJdkProxy = false;

@Autowired
private SpringCloudAlibabaConfiguration springCloudAlibabaConfiguration;
Expand Down Expand Up @@ -77,4 +83,22 @@ public SeataProperties setTxServiceGroup(String txServiceGroup) {
this.txServiceGroup = txServiceGroup;
return this;
}

public boolean isEnableAutoDataSourceProxy() {
return enableAutoDataSourceProxy;
}

public SeataProperties setEnableAutoDataSourceProxy(boolean enableAutoDataSourceProxy) {
this.enableAutoDataSourceProxy = enableAutoDataSourceProxy;
return this;
}

public boolean isUseJdkProxy() {
return useJdkProxy;
}

public SeataProperties setUseJdkProxy(boolean useJdkProxy) {
this.useJdkProxy = useJdkProxy;
return this;
}
}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -35,22 +35,20 @@
import static io.seata.spring.boot.autoconfigure.StarterConstants.NORMALIZED_KEY_CLIENT_LOCK;
import static io.seata.spring.boot.autoconfigure.StarterConstants.NORMALIZED_KEY_CONFIG_APOLLO;
import static io.seata.spring.boot.autoconfigure.StarterConstants.NORMALIZED_KEY_CONFIG_ZK;
import static io.seata.spring.boot.autoconfigure.StarterConstants.NORMALIZED_KEY_DATASOURCE_AUTOPROXY;
import static io.seata.spring.boot.autoconfigure.StarterConstants.NORMALIZED_KEY_GROUPLIST;
import static io.seata.spring.boot.autoconfigure.StarterConstants.NORMALIZED_KEY_REGISTRY_ZK;
import static io.seata.spring.boot.autoconfigure.StarterConstants.NORMALIZED_KEY_UNDO;
import static io.seata.spring.boot.autoconfigure.StarterConstants.NORMALIZED_KEY_TRANSPORT_THREAD_FACTORY;
import static io.seata.spring.boot.autoconfigure.StarterConstants.NORMALIZED_KEY_UNDO;
import static io.seata.spring.boot.autoconfigure.StarterConstants.NORMALIZED_KEY_VGROUP_MAPPING;
import static io.seata.spring.boot.autoconfigure.StarterConstants.PROPERTY_MAP;
import static io.seata.spring.boot.autoconfigure.StarterConstants.SPECIAL_KEY_CLIENT;
import static io.seata.spring.boot.autoconfigure.StarterConstants.SPECIAL_KEY_CLIENT_LOCK;
import static io.seata.spring.boot.autoconfigure.StarterConstants.SPECIAL_KEY_CONFIG_APOLLO;
import static io.seata.spring.boot.autoconfigure.StarterConstants.SPECIAL_KEY_CONFIG_ZK;
import static io.seata.spring.boot.autoconfigure.StarterConstants.SPECIAL_KEY_DATASOURCE_AUTOPROXY;
import static io.seata.spring.boot.autoconfigure.StarterConstants.SPECIAL_KEY_GROUPLIST;
import static io.seata.spring.boot.autoconfigure.StarterConstants.SPECIAL_KEY_REGISTRY_ZK;
import static io.seata.spring.boot.autoconfigure.StarterConstants.SPECIAL_KEY_UNDO;
import static io.seata.spring.boot.autoconfigure.StarterConstants.SPECIAL_KEY_TRANSPORT_THREAD_FACTORY;
import static io.seata.spring.boot.autoconfigure.StarterConstants.SPECIAL_KEY_UNDO;
import static io.seata.spring.boot.autoconfigure.StarterConstants.SPECIAL_KEY_VGROUP_MAPPING;

/**
Expand All @@ -61,19 +59,19 @@ public class SpringBootConfigurationProvider implements ExtConfigurationProvider

@Override
public Configuration provide(Configuration originalConfiguration) {
return (Configuration)Enhancer.create(originalConfiguration.getClass(), new MethodInterceptor() {
return (Configuration) Enhancer.create(originalConfiguration.getClass(), new MethodInterceptor() {
@Override
public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy)
throws Throwable {
if (method.getName().startsWith(INTERCEPT_METHOD_PREFIX) && args.length > 0) {
Object result = null;
String rawDataId = (String)args[0];
String rawDataId = (String) args[0];
if (args.length == 1) {
result = get(convertDataId(rawDataId));
} else if (args.length == 2) {
result = get(convertDataId(rawDataId), args[1]);
} else if (args.length == 3) {
result = get(convertDataId(rawDataId), args[1], (Long)args[2]);
result = get(convertDataId(rawDataId), args[1], (Long) args[2]);
}
if (null != result) {
return result;
Expand Down Expand Up @@ -128,9 +126,6 @@ private String convertDataId(String rawDataId) {
if (rawDataId.endsWith(SPECIAL_KEY_GROUPLIST)) {
return StarterConstants.SERVICE_PREFIX + "." + NORMALIZED_KEY_GROUPLIST;
}
if (rawDataId.endsWith(SPECIAL_KEY_DATASOURCE_AUTOPROXY)) {
return StarterConstants.SPRING_PREFIX + "." + NORMALIZED_KEY_DATASOURCE_AUTOPROXY;
}
if (rawDataId.startsWith(SPECIAL_KEY_UNDO)) {
String suffix = StringUtils.removeStart(rawDataId, NORMALIZED_KEY_UNDO);
return StarterConstants.UNDO_PREFIX + "." + StringFormatUtils.dotToCamel(suffix);
Expand Down
Loading

0 comments on commit 734ee0c

Please sign in to comment.