有时项目较大或者数据库设计的问题,一个项目需要连接多个数据源,现在用我的成功的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();
}
}
其他的使用和单数据源相同。