Springboot多数据源配置


启动类

// 启动类需要取消加载数据源自动配置
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

Springboot配置文件

数据源配置

spring:
  datasource:
    # ds1是自己取的名字
    ds1:
      driver-class-name: com.mysql.cj.jdbc.Driver
      # 多数据源不能用url属性,会识别不到,必须用jdbc-url
      jdbc-url: jdbc:mysql://ip:port/table?useSSL=false&useUnicode=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
      username: 用户名
      password: 密码
    ds2:
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbc-url: jdbc:mysql://ip:port/table?useSSL=false&useUnicode=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
      username: 用户名
      password: 密码

mybatis全局配置

# 这是单数据源的配置,多数据源会直接失效
# 多数据源需要在配置类中进行配置
mybatis:
  # 这里是对应的src中实体类的完整包名
  type-aliases-package: com.nit310.store.entity
  configuration:
    log-impl: org.apache.ibatis.logging.log4j2.Log4j2Impl
    map-underscore-to-camel-case: true # 开启驼峰转换

配置类

数据源配置

// 只举ds1的例子,有关名字可以自己取
@Configuration
@MapperScan(basePackages = "com.nit310.store.mapper.ds1", sqlSessionFactoryRef = "ds1SqlSessionFactory")
public class DataSourceConfig1 {

    // 将这个对象放入Spring容器中
    @Bean(name = "ds1DataSource")
    // 表示这个数据源是默认数据源
    @Primary
    // 读取application.properties中的配置参数映射成为一个对象
    // prefix表示参数的前缀
    @ConfigurationProperties(prefix = "spring.datasource.ds1")
    public DataSource getDateSource1()
    {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "ds1SqlSessionFactory")
    // 表示这个数据源是默认数据源
    @Primary
    // @Qualifier表示查找Spring容器中名字为ds1DataSource的对象
    public SqlSessionFactory ds1SqlSessionFactory(@Qualifier("ds1DataSource") DataSource datasource)
            throws Exception
    {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        return bean.getObject();
    }

    @Bean("ds1SqlSessionTemplate")
    // 表示这个数据源是默认数据源
    @Primary
    public SqlSessionTemplate ds1SqlSessionTemplate(
            @Qualifier("ds1SqlSessionFactory") SqlSessionFactory sessionFactory)
    {
        return new SqlSessionTemplate(sessionFactory);
    }
}

mybatis全局配置

// 在上面的例子中,ds1SqlSessionFactory中对bean对象可以进行配置
// 除了configuration,其他可以直接对bean进行配置
// configuration需要先获得bean的getConfiguration

// 这是原本的配置文件,仅供对比参考
//    mybatis:
//      type-aliases-package: com.nit310.store.entity
//      configuration:
//        log-impl: org.apache.ibatis.logging.log4j2.Log4j2Impl
//        map-underscore-to-camel-case: true # 开启驼峰转换

bean.setMapperLocations(
                // 设置mybatis的xml所在位置
                new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/ds1/*.xml"));
bean.setTypeAliasesPackage("com.nit310.store.entity");
bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
bean.getObject().getConfiguration().setLogImpl(org.apache.ibatis.logging.log4j2.Log4j2Impl.class);

参考文章


文章作者: ❤纱雾
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ❤纱雾 !
评论
  目录