apache / apache/incubator-seata-samples

简化SeataAutoConfig中的DataSourceProxy配置,请问我这种偷梁换柱法怎么样?

Open
#191 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
2.4k
Forks
2k
PR merge metrics
No merged PRs in 30d

Description

~~~java
/**
* Seata自动配置
*
* @author qiyubing
* @since 2019-07-20
*/
@Slf4j
@ConditionalOnClass(GlobalTransactionScanner.class)
@AutoConfigureBefore(name = "mybatisPlusAutoConfiguration")
@AutoConfigureAfter({DataSourceAutoConfiguration.class})
@Configuration
public class SeataAutoConfiguration implements ApplicationContextAware {

@Value("spring.application.name")
private String applicationName;

@Bean
public GlobalTransactionScanner globalTransactionScanner() {
String groupName = "my_test_tx_group";
if (applicationName == null) {
return new GlobalTransactionScanner(groupName);
} else {
return new GlobalTransactionScanner(applicationName, groupName);
}
}

@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
DataSource originDataSource = applicationContext.getBean(DataSource.class);
log.debug("originDataSource = {}", applicationContext.getBean("dataSource"));
DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();
// 从Spring容器中删除Bean
defaultListableBeanFactory.removeBeanDefinition("dataSource");
DataSourceProxy dataSourceProxy = new DataSourceProxy(originDataSource);
// 向Spring容器中注册
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(DataSource.class, () -> dataSourceProxy);
defaultListableBeanFactory.registerBeanDefinition("dataSource", beanDefinitionBuilder.getBeanDefinition());
log.debug("proxyDataSource = {}", applicationContext.getBean("dataSource"));
}
}

~~~

Contributor guide

Open the contributing guide

Research direction

Read the SeataAutoConfiguration snippet, especially setApplicationContext and its DataSource bean replacement steps. Evaluate the proposed removal and re-registration approach against the surrounding Seata configuration; done requires an agreed, maintainable configuration design rather than only an opinion on the workaround.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, spring
Domain
backend, databases
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.