有時項目較大或者數據庫設計的問題,一個項目需要連接多個數據源,現在用我的成功的demo寫一下步驟,以兩個數據源爲例,更多個也是一樣的。
1、多個數據庫參數
在jdbc.Properties中,配置兩個數據庫的連接。在此處的例子如下(我這裏都是使用的MySql,如果要使用其他的請更換驅動),有些數據一樣可以使用一個:
jdbc.driverClassName=com.mysql.jdbc.Driver
#數據庫一
jdbc.url=jdbc:mysql://localhost:3306/zhangl1
jdbc.username=root
jdbc.password=root
#數據庫二
jdbc.url.cm=jdbc:mysql://localhost:3306/zhangl2
jdbc.username.cm=root
jdbc.password.cm=root
2、配置數據源
將兩個數據表對應的實體對象和mapper文件放在不同的路徑下。
跟一個數據源配置是一樣的,只是配置了兩個而已,注意名字不要相同
basePackages 指定實體類的位置,getResources指定mapper的位置
數據源1:
@Configuration
@MapperScan(basePackages = {"com.zhl.dao.main"},sqlSessionFactoryRef = "mainSqlSessionFactory")
public class MainDBConfig {
@Resource
@Qualifier("mainDS")
private DataSource mainDs;
@Bean(name = "mainSqlSessionFactory")
public SqlSessionFactory mainSqlSessionFactory() throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(mainDs);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/main/*Mapper.xml"));
return bean.getObject();
}
@Bean(name = "mainTransactionManager")
@Primary
public DataSourceTransactionManager mainTransactionManager() {
return new DataSourceTransactionManager(mainDs);
}
@Bean(name = "mainSqlSessionTemplate")
public SqlSessionTemplate mainSqlSessionTemplate(@Qualifier("mainSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
數據源2:
/**
* Created by Administrator on 2019/4/18.
*/
@Configuration
@MapperScan(basePackages = {"com.zhl.dao.cm"},sqlSessionFactoryRef = "cmSqlSessionFactory")
public class CmDBConfig {
@Resource
@Qualifier("cmDS")
private DataSource cmDS;
@Bean(name = "cmSqlSessionFactory")
public SqlSessionFactory cmSqlSessionFactory() throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(cmDS);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/cm/*Mapper.xml"));
return bean.getObject();
}
@Bean(name = "cmTransactionManager")
@Primary
public DataSourceTransactionManager cmTransactionManager() {
return new DataSourceTransactionManager(cmDS);
}
@Bean(name = "cmSqlSessionTemplate")
public SqlSessionTemplate cmSqlSessionTemplate(@Qualifier("cmSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
/**
* Created by Administrator on 2019/4/18.
* 引用配置的不同的數據庫數據,創建不同的數據源
*/
@Configuration
public class DataSourceConfig {
@Bean("mainDS")
@ConfigurationProperties(prefix = "spring.datasource.main")
@Primary
public DataSource mainDataSource() {
return DataSourceBuilder.create().build();
}
@Bean("cmDS")
@ConfigurationProperties(prefix = "spring.datasource.cm")
@Primary
public DataSource cmDataSource() {
return DataSourceBuilder.create().build();
}
}
其他的使用和單數據源相同。