- spring:
- datasource:
- db100:
- username: xxx
- password: xxx
- jdbc-url: jdbc:kingbase8://xxx.xxx.xxx.xxx:54321/100
- driver-class-name: com.kingbase8.Driver
- # url: jdbc:postgresql://xxx.xxx.xxx.xxx:54321/100?serverTimezone=Asia/Shanghai&useSSL=false
- # driverClassName: org.postgresql.Driver
- db101:
- username: xxx
- password: xxx
- jdbc-url: jdbc:kingbase8://xxx.xxx.xxx.xxx:54321/101
- driver-class-name: com.kingbase8.Driver
- db104:
- username: xxx
- password: xxx
- jdbc-url: jdbc:kingbase8://xxx.xxx.xxx.xxx:54321/104
- driver-class-name: com.kingbase8.Driver
-
- mybatis-plus:
- mapper-locations: classpath*:**mapper/*.xml
- configuration:
- log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
实际运行的时候,发现mybatis-plus相关的配置都失效了。
这是因为我们自定义SqlSessionFactoryBean
- @Bean
- public MybatisSqlSessionFactoryBean dynamicDataSourceSqlSessionFactory(@Qualifier("dynamicDataSource") DataSource dynamicDataSource) throws Exception {
- MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
- sqlSessionFactoryBean.setDataSource(dynamicDataSource);
- return sqlSessionFactoryBean;
- }
- @Bean
- @Scope("prototype")
- @ConfigurationProperties(prefix = "mybatis-plus.global-config")
- public GlobalConfig globalConfig(){
- return new GlobalConfig();
- }
-
-
-
- @Bean
- //@Scope("prototype")
- @ConfigurationProperties(prefix = "mybatis-plus.configuration")
- public MybatisConfiguration mybatisConfiguration(){
- return new MybatisConfiguration();
- }
SqlSessionFactoryBean修改:
- @MapperScan(basePackages = "com.etoak.wsdhla.mapper", sqlSessionFactoryRef = "dynamicDataSourceSqlSessionFactory")
- @Configuration
- public class DataSourceConfig {
- @Bean
- @Primary
- @ConfigurationProperties(prefix = "spring.datasource.db100")
- public DataSource dataSource100() {
- return DataSourceBuilder.create().build();
- }
-
- @Bean
- @ConfigurationProperties(prefix = "spring.datasource.db101")
- public DataSource dataSource101() {
- return DataSourceBuilder.create().build();
- }
-
- @Bean
- @ConfigurationProperties(prefix = "spring.datasource.db104")
- public DataSource dataSource104() {
- return DataSourceBuilder.create().build();
- }
-
- @Bean
- @Scope("prototype")
- @ConfigurationProperties(prefix = "mybatis-plus.global-config")
- public GlobalConfig globalConfig(){
- return new GlobalConfig();
- }
-
- @Bean
- //@Scope("prototype")
- @ConfigurationProperties(prefix = "mybatis-plus.configuration")
- public MybatisConfiguration mybatisConfiguration(){
- return new MybatisConfiguration();
- }
-
- /**
- * 将动态代理数据源对象放入Spring容器中
- */
- @Bean
- public DynamicDataSource dynamicDataSource(@Qualifier("dataSource100") DataSource dataSource100, @Qualifier("dataSource101") DataSource dataSource101, @Qualifier("dataSource104") DataSource dataSource104) {
- // 这个地方是比较核心的targetDataSource 集合是我们数据库和名字之间的映射
- Map
- targetDataSource.put("db100", dataSource100);
- targetDataSource.put("db101", dataSource101);
- targetDataSource.put("db104", dataSource104);
-
- DynamicDataSource dataSource = new DynamicDataSource();
- // 设置所有的数据源
- dataSource.setTargetDataSources(targetDataSource);
- // 设置默认使用的数据源对象
- dataSource.setDefaultTargetDataSource(dataSource100);
-
- return dataSource;
- }
-
- @Bean
- public MybatisSqlSessionFactoryBean dynamicDataSourceSqlSessionFactory(@Qualifier("dynamicDataSource") DataSource dynamicDataSource) throws Exception {
- MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
- sqlSessionFactoryBean.setDataSource(dynamicDataSource);
- // 设置数据库mapper的xml文件路径
- sqlSessionFactoryBean .setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));
- sqlSessionFactoryBean.setConfiguration(mybatisConfiguration());
- sqlSessionFactoryBean.setGlobalConfig(globalConfig());
- return sqlSessionFactoryBean;
- }
- }