apache / apache/incubator-seata-samples
简化SeataAutoConfig中的DataSourceProxy配置,请问我这种偷梁换柱法怎么样?
- 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
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