整合不同的数据源就需要在yml文件里配置不同的数据库.以及账号密码,下面是我的代码示例
datasource:
hikari:
maximum-pool-size: 2
minimum-idle: 1
idle-timeout: 600000
max-lifetime: 1800000
connection-timeout: 500
login-timeout: 500
validation-timeout: 1000
initialization-fail-timeout: 1000
datasource1:
jdbc-url: jdbc:mysql://xxx.rds.aliyuncs.com:port/data_libary?serverTimezone=CTT&useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
password: 123456
username: 账号
driver-class-name: com.mysql.cj.jdbc.Driver
datasource2:
jdbc-url: jdbc:mysql://xxx.rds.aliyuncs.com:port/data_libary?serverTimezone=CTT&useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
password: 123456
username: 账号
driver-class-name: com.mysql.cj.jdbc.Driver
datasource3:
jdbc-url: jdbc:mysql://xxx.rds.aliyuncs.com:port/data_libary?serverTimezone=CTT&useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
password: 123456
username: 账号
driver-class-name: com.mysql.cj.jdbc.Driver
datasource4:
jdbc-url: jdbc:mysql://xxx.rds.aliyuncs.com:port/data_libary?serverTimezone=CTT&useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
password: 123456
username: 账号
driver-class-name: com.mysql.cj.jdbc.Driver
如上图代码所示.以datasource为前缀后面有数字的都是不同的数据源配置,我这边配置了四个数据源
下面展示配置数据源的代码
@Configuration
@MapperScan(basePackages = "com.application.datasource.datasouce1", sqlSessionTemplateRef = "test1SqlSessionTemplate")
public class DataSource1Config {
@Bean(name = "test1DataSource")
@ConfigurationProperties(prefix = "datasource.datasouce1")
@Primary
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "test1SqlSessionFactory")
@Primary
public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/datasouce1/*.xml"));
return bean.getObject();
}
@Bean(name = "test1TransactionManager")
@Primary
public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource);
return dataSourceTransactionManager;
}
@Bean(name = "test1SqlSessionTemplate")
@Primary
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
basePackages 配置的是扫描dao所在的路径,每个数据源不同的package,
classpath:mapper/datasouce1/*.xml这边配置的是mybatis的xml文件扫描路径
所以你只要这两处配置好其他就没问题了,当配置第二个第三个数据源的时候就将test1开头的名字改为test2,test3就可以了,只要区分不同的bean就可以配置成功,
@ConfigurationProperties(prefix = "datasource.datasouce1")中datasource.datasouce1指的就是yml文件中的的dataSource1的数据源,记得也得改成对应的数据源
@Primary的作用是当一个接口有多个bean实现的时候spring不知道如何选择,所以加上primary后就可以了,多个数据源配置类只能配置一个,
到此配置多数据源完成
网友评论