1. 创建配置类

1.1. 数据源一

@Configuration
@MapperScan(
        basePackages = "com.test.aaa.db.service.repository",
        sqlSessionFactoryRef = "aaaMysqlSqlSessionFactory"
)
public class AaaMysqlConfig {
    @ConfigurationProperties(prefix = "spring.datasource.aaa")
    @Primary
    @Bean("aaaMysqlDataSource")
    public DataSource mysqlDataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean("aaaMysqlSqlSessionFactory")
    @Primary
    public SqlSessionFactory sqlSessionFactory(@Qualifier("aaaMysqlDataSource") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setMapperLocations(
                new PathMatchingResourcePatternResolver()
                        .getResources("classpath:mapping/*Mapper.xml"));

        return sqlSessionFactoryBean.getObject();
    }

    @Bean("aaaMysqlSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("aaaMysqlSqlSessionFactory")SqlSessionFactory sqlSessionFactory) throws Exception {
        SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
        return sqlSessionTemplate;
    }

    @Bean("aaaMysqlTransactionManager")
    public DataSourceTransactionManager transactionManager(@Qualifier("aaaMysqlDataSource") DataSource dataSource){
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);
        return transactionManager;
    }
}

1.2. 数据源二

@Configuration
@MapperScan(
        basePackages = "com.test.bbb.aggregation.dao.db",
        sqlSessionFactoryRef = "bbbMysqlSqlSessionFactory"
)
public class BbbMysqlConfig {
    @ConfigurationProperties(prefix = "spring.datasource.bbb")
    @Bean("bbbMysqlDataSource")
    public DataSource mysqlDataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean("bbbMysqlSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("bbbMysqlDataSource") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setMapperLocations(
                new PathMatchingResourcePatternResolver()
                        .getResources("classpath:mapping/*Mapper.xml"));

        return sqlSessionFactoryBean.getObject();
    }

    @Bean("bbbMysqlSqlSessionTemplate")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("bbbMysqlSqlSessionFactory")SqlSessionFactory sqlSessionFactory) throws Exception {
        SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
        return sqlSessionTemplate;
    }

    @Bean("bbbMysqlTransactionManager")
    public DataSourceTransactionManager transactionManager(@Qualifier("bbbMysqlDataSource") DataSource dataSource){
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);
        return transactionManager;
    }
}

1.3. 配置文件

spring.datasource.aaa.jdbc-url=jdbc:mysql://{{ip}}:3306/{{database}}?useUnicode=true&characterEncoding=utf-8&serverTimezone=CTT&useSSL=false
spring.datasource.aaa.username={{userName}}
spring.datasource.aaa.password={{password}}

spring.datasource.bbb.jdbc-url=jdbc:mysql://{{ip}}:3306/{{database}}?characterEncoding=utf8
spring.datasource.bbb.username={{userName}}
spring.datasource.bbb.password={{password}}

2. 注意

  1. 配置类中需要有个类为主配置 即加 @Primary
  2. 多数据源时 url配置改为 jdbc-url
  3. 注意启动类中不要再有 @MapperScan 注解
  4. org.mybatis.spring.annotation.MapperScannerRegistrar是MapperScan 注解的处理类 可以debug一下
  5. 解析mapper.xml配置路径的时候可能会不对,可以考虑单独解析。
        Resource[] mappingLocations = ArrayUtils.addAll(
                new PathMatchingResourcePatternResolver()
                        .getResources("classpath:mapping/*.xml"),
                new PathMatchingResourcePatternResolver().getResources("classpath:mapping/ext/*.xml"));

        sqlSessionFactoryBean.setMapperLocations(mappingLocations);
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐