@org.springframework.context.annotation.Configuration
@ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class })
@ConditionalOnSingleCandidate(DataSource.class)
@EnableConfigurationProperties(MybatisProperties.class)
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class MybatisAutoConfiguration implements InitializingBean {
@ConditionalOnSingleCandidate(DataSource.class)
,什么鬼?该注解的意思就是IOC容器中只有一个指定的候选对象才起作用,但是我们注入了几个DataSource,足足三个啊,这还起作用吗?那不废话嘛。DataSourceTransactionManagerAutoConfiguration
,如下:public class DataSourceTransactionManagerAutoConfiguration {
@Configuration@ConditionalOnSingleCandidate(DataSource.class)static class DataSourceTransactionManagerConfiguration {
@ConditionalOnSingleCandidate(DataSource.class)
同样的醒目,mmp,这不玩我呢吗。这怎么搞?@ConditionalOnSingleCandidate
注解搞了什么,进去看看,有如下的介绍:The condition will also match if multiple matching bean instances are already contained in the BeanFactory but a primary candidate has been defined; essentially, the condition match if auto-wiring a bean with the defined type will succeed.
。
/*** @Description 数据源的配置* @Author CJB* @Date 2020/3/9 13:45*/
@Configuration
@MapperScan(basePackages = {"com.vivachek.service.dao","com.vivachek.service.dao2"})
public class DatasourceConfig {
/*** 注入数据源1*/@ConfigurationProperties(prefix = "spring.datasource1")@Bean(value = "dataSource1")public DataSource dataSource1() {return new DruidDataSource();}
/*** 第二个数据源*/@Bean(name = "dataSource2")@ConfigurationProperties(prefix = "spring.datasource2")public DataSource dataSource2() {return new DruidDataSource();}
/*** 动态数据源** @return*/@Bean@Primarypublic DynamicDataSource dynamicDataSource() {DynamicDataSource dataSource = new DynamicDataSource();//默认数据源,在没有切换数据源的时候使用该数据源dataSource.setDefaultTargetDataSource(dataSource2());HashMap<Object, Object> map = Maps.newHashMap();map.put("dataSource1", dataSource1());map.put("dataSource2", dataSource2());//设置数据源Map,动态切换就是根据key从map中获取dataSource.setTargetDataSources(map);return dataSource;}
}
DynamicDataSource
添加了一个@Primary就省去了SqlSessionFactory和TransactionManager的手动配置,是不是很easy并且显得自己很牛叉,太有成就感了.....springboot连接池、
。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态