springBoot项目多数据源配置

1.application.yml配置文件,sqlserver、oracle、mysql三种不同类型数据库

# 数据源配置
hikari:
  crm:
    url: jdbc:sqlserver://172.00.00.00:00000;DatabaseName=xxxxxx
    username: xxxxxx
    password: xxxxxx
    minimum-idle: 2
    maximum-pool-size: 2
    connection-timeout: 30000
    idle-timeout: 600000
    max-lifetime: 1800000
    connection-test-query: select '1'
cti:
    url: jdbc:oracle:thin:@172.00.00.000:00000/xxxxxx
    username: xxxxxx
    password: xxxxxx
    minimum-idle: 5
    maximum-pool-size: 5
    connection-timeout: 30000
    idle-timeout: 600000
    max-lifetime: 1800000
robot:
    url: jdbc:mysql://000.00.00.00:0000/xxxxxx?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
    username: xxxxxx
    password: xxxxxx
    minimum-idle: 10
    maximum-pool-size: 20
    connection-timeout: 30000
    idle-timeout: 600000
    max-lifetime: 1800000
    connection-test-query: select 'x' from dual

2.文件配置类
CrmConfig文件,这是项目主配置类,使用到@Primary

@Configuration
@MapperScan(basePackages = CRMConfig.MAPPER_INTERFACE_LOCATION, sqlSessionFactoryRef = "crmSqlSessionFactory")
public class CRMConfig {
    private static final String MAPPER_XML_LOCATION = "classpath:mapper/crm/*.xml";
    static final String MAPPER_INTERFACE_LOCATION = "com.ttfund.crm.sync.dao.crm";

    @Value("${hikari.crm.url}")
    private String url;

    @Value("${hikari.crm.username}")
    private String username;

    @Value("${hikari.crm.password}")
    private String password;

    @Value("${hikari.crm.minimum-idle}")
    private Integer minimumIdle;

    @Value("${hikari.crm.maximum-pool-size}")
    private Integer maximumPoolSize;

    @Value("${hikari.crm.connection-timeout}")
    private Long connectionTimeout;

    @Value("${hikari.crm.idle-timeout}")
    private Long idleTimeout;

    @Value("${hikari.crm.max-lifetime}")
    private Long maxLifeTime;

    @Value("${hikari.crm.connection-test-query}")
    private String testSql;

    @Bean("crmDataSource")
    @Primary
    public HikariDataSource dataSource() {
        HikariDataSource hikariDataSource = new HikariDataSource();
        hikariDataSource.setJdbcUrl(url);
        hikariDataSource.setUsername(username);
        hikariDataSource.setPassword(password);
        hikariDataSource.setMinimumIdle(minimumIdle);
        hikariDataSource.setMaximumPoolSize(maximumPoolSize);
        hikariDataSource.setConnectionTimeout(connectionTimeout);
        hikariDataSource.setMaxLifetime(maxLifeTime);
        hikariDataSource.setIdleTimeout(idleTimeout);
        hikariDataSource.setConnectionTestQuery(testSql);
        return hikariDataSource;
    }

    @Bean(name = "crmTransactionManager")
    @Primary
    public DataSourceTransactionManager transactionManager() {
        return new DataSourceTransactionManager(this.dataSource());
    }

    @Bean(name = "crmSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("crmSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

    @Bean(name = "crmSqlSessionFactory")
    @Primary
    public SqlSessionFactory customSqlSessionFactory(@Qualifier("crmDataSource") HikariDataSource dataSource) throws Exception {
        final SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        Interceptor[] plugins = new Interceptor[]{sqlPrintInterceptor()};
        sessionFactoryBean.setPlugins(plugins);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_XML_LOCATION));
        return sessionFactoryBean.getObject();
    }

    /**
     * 将要执行的sql进行日志打印(不想拦截,就把这方法注释掉)
     */
    @Bean(name = "crmSqlPrintInterceptor")
    public SqlPrintInterceptor sqlPrintInterceptor() {
        return new SqlPrintInterceptor();
    }
}

CtiConfig配置类

@Configuration
@MapperScan(basePackages = CtiConfig.MAPPER_INTERFACE_LOCATION, sqlSessionFactoryRef = "ctiSqlSessionFactory")
public class CtiConfig {

   /**
    * private static final String MAPPER_XML_LOCATION = "classpath:mapper/emdb/*.xml";
    */
    static final String MAPPER_INTERFACE_LOCATION = "com.ttfund.crm.sync.dao.cti";

    @Value("${hikari.cti.url}")
    private String url;

    @Value("${hikari.cti.username}")
    private String username;

    @Value("${hikari.cti.password}")
    private String password;

    @Value("${hikari.cti.minimum-idle}")
    private Integer minimumIdle;

    @Value("${hikari.cti.maximum-pool-size}")
    private Integer maximumPoolSize;

    @Value("${hikari.cti.connection-timeout}")
    private Long connectionTimeout;

    @Value("${hikari.cti.idle-timeout}")
    private Long idleTimeout;

    @Value("${hikari.cti.max-lifetime}")
    private Long maxLifeTime;

    @Bean("ctiDataSource")
    public HikariDataSource dataSource() {
        HikariDataSource hikariDataSource = new HikariDataSource();
        hikariDataSource.setJdbcUrl(url);
        hikariDataSource.setUsername(username);
        hikariDataSource.setPassword(password);
        hikariDataSource.setMinimumIdle(minimumIdle);
        hikariDataSource.setMaximumPoolSize(maximumPoolSize);
        hikariDataSource.setConnectionTimeout(connectionTimeout);
        hikariDataSource.setMaxLifetime(maxLifeTime);
        hikariDataSource.setIdleTimeout(idleTimeout);
        return hikariDataSource;
    }

    @Bean(name = "ctiTransactionManager")
    public DataSourceTransactionManager transactionManager() {
        return new DataSourceTransactionManager(this.dataSource());
    }

    @Bean(name = "ctiSqlSessionTemplate")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("ctiSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

    @Bean(name = "ctiSqlSessionFactory")
    public SqlSessionFactory customSqlSessionFactory(@Qualifier("ctiDataSource") HikariDataSource dataSource) throws Exception {
        final SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        Interceptor[] plugins = new Interceptor[]{sqlPrintInterceptor()};
        sessionFactoryBean.setPlugins(plugins);
        /***
         * 注释,未启用
         *  sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_XML_LOCATION));
         */
        return sessionFactoryBean.getObject();
    }

    /**
     * 将要执行的sql进行日志打印(不想拦截,就把这方法注释掉)
     */
    @Bean(name = "ctiSqlPrintInterceptor")
    public SqlPrintInterceptor sqlPrintInterceptor() {
        return new SqlPrintInterceptor();
    }

}

3.目录结构
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值