最近在使用seata和alibaba springcloud
因为需要做数据源动态切换,所以不让seata做数据源代理,而是自己配置bean。
@Bean("dataSourceProxy")
@Primary
public DataSourceProxy dataSourceProxy(@Qualifier("routingDataSource") DataSource routingDataSource) {
return new DataSourceProxy(routingDataSource);
}
但是会在启动时出错:
io.seata.common.exception.ShouldNeverHappenException: Auto proxy of DataSource can't be enabled as you've created a DataSourceProxy bean.Please consider removing DataSourceProxy bean or disabling auto proxy of DataSource.
这就是个自动代理数据源导致的,照理说关掉就可以了,网上各种说法都是在启动类加上注解:
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
然而并没有什么用,我用的是durid连接池,所以把DruidDataSourceAutoConfigure.class
也exclude了,但是还是没用。
后面看了下源码,是通过读取yml配置的,神坑就在这里,正常配置:
#seata配置
seata:
enabled: true
enable-auto-data-source-proxy: false
这里的enable-auto-data-source-proxy就是表示不使用自动代理数据源,但是一直无效,最后在源码SeataAutoConfiguration
中发现,这种写法是不生效的,需要写成:
#seata配置
seata:
enabled: true
enableAutoDataSourceProxy: false
。。。。。。。。!!