需求
将公司的两个项目的数据库连在一起,同时使用。 因为并不是主从的关系,所以就直接配置application.yml
最基本的配置:按照自己的的服务器配置来改
spring:
datasource:
db1:
driver-class-name: oracle.jdbc.driver.OracleDriver
jdbc-url: jdbc:oracle:thin:@localhost:1521:locl
username: root
password: root
db2:
driver-class-name: oracle.jdbc.driver.OracleDriver
jdbc-url: jdbc:oracle:thin:@localhost:1524:locl
username: root
password: root
创建DataSourceConfig.java
@Primary :指定主数据源@Configuration
public class DataSourceConfig {
@Bean(name = "dbOneDataSource")
//@Primary
@ConfigurationProperties(prefix = "spring.datasource.db1") // application.yml 中对应属性的前缀
public DataSource dbOneDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "dbTwoDataSource")
@ConfigurationProperties(prefix = "spring.datasource.db2") // application.yml 中对应属性的前缀
public DataSource dbTwoDataSource() {
return DataSourceBuilder.create().build();
}
}
创建MybatisConfig.java
通过SqlSessionFactory && SqlSessionTemplate 创建public class MybatisConfig {
/**
* 第一个数据库 SqlSessionFactory && SqlSessionTemplate 创建
*/
@Configuration
@MapperScan(basePackages = {"com.ltx.EFTP.mapper.crm"},
sqlSessionFactoryRef = "sqlSessionFactoryOne",
sqlSessionTemplateRef = "sqlSessionTemplateOne")
public static class DBOne{
@Resource
DataSource dbOneDataSource;
@Bean
public SqlSessionFactory sqlSessionFactoryOne() throws Exception {
log.info("sqlSessionFactoryCRM 创建成功!");
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();//创建sqlSessionFactory
factoryBean.setDataSource(dbOneDataSource);
factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/crm/*.xml"));//手动配置读取映射文件的路径
return factoryBean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplateOne() throws Exception {
SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactoryOne()); // 使用上面配置的Factory
return template;
}
}
/**
* 第二个数据库 SqlSessionFactory && SqlSessionTemplate 创建
*/
@Configuration
@MapperScan(basePackages = {"com.ltx.EFTP.mapper.omp"},
sqlSessionFactoryRef = "sqlSessionFactoryTwo",
sqlSessionTemplateRef ="sqlSessionTemplateTwo" )
public static class DBTwo{
@Resource
DataSource dbTwoDataSource;
@Bean
public SqlSessionFactory sqlSessionFactoryTwo() throws Exception {
log.info("sqlSessionFactoryOMP 创建成功!");
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();//创建sqlSessionFactory
factoryBean.setDataSource(dbTwoDataSource);
factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/omp/*.xml"));//手动配置读取映射文件的路径
return factoryBean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplateTwo() throws Exception {
SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactoryTwo()); // 使用上面配置的Factory
return template;
}
}
}
成功: