springboot项目配置多个数据库
下面是配置两个mysql数据库
注意:不管配置几个数据库,但是一定要有一个主数据库
application.properties
#主数据库
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.primary.url=jdbc:mysql://localhost:3306/one?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
spring.datasource.primary.username=root
spring.datasource.primary.password=root
#第二的数据库
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/two?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
配置主数据库 DataSourceConfig
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = DataSourceConfig.PACKAGE, sqlSessionFactoryRef = "primarySqlSessionFactory")
public class DataSourceConfig {
static final String PACKAGE = "com.primary.dao";
static final String MAPPER_LOCATION = "classpath:com/primary/dao/*.xml";
//数据库驱动
@Value("${spring.datasource.primary.driver-class-name}")
private String driverClass;
//连接数据库
@Value("${spring.datasource.primary.url}")
private String url;
//数据库账号
@Value("${spring.datasource.primary.username}")
private String username;
//数据库密码
@Value("${spring.datasource.primary.password}")
private String password;
/**
* 数据库连接池
* @return
*/
@Primary //设为主数据库
@Bean(name = "primaryDataSource")
public DataSource primaryDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
/**
* xml文件读取
*
* @param dataSource
* @return
* @throws Exception
*/
@Primary //设为主要的
@Bean(name = "primarySqlSessionFactory")
public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().
getResources(DataSourceConfig.MAPPER_LOCATION));
return sqlSessionFactoryBean.getObject();
}
//事务
@Primary //设为主要的
@Bean(name = "primaryTransactionManager")
public DataSourceTransactionManager primaryTransactionManager() {
return new DataSourceTransactionManager(primaryDataSource());
}
}
第二个数据库配置 SecondDataSourceConfig
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = SecondDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "secondarySqlSessionFactory")
public class SecondDataSourceConfig {
static final String PACKAGE = "com.secondary.dao";
static final String MAPPER_LOCATION = "classpath:com/secondary/dao/*.xml";
//数据库驱动
@Value("${spring.datasource.secondary.driver-class-name}")
private String driverClass;
//连接数据库
@Value("${spring.datasource.secondary.url}")
private String url;
//数据库账号
@Value("${spring.datasource.secondary.username}")
private String username;
//数据库密码
@Value("${spring.datasource.secondary.password}")
private String password;
/**
* 数据库连接池
* @return
*/
@Bean(name = "secondaryDataSource")
public DataSource secondaryDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
/**
* xml文件读取
*
* @param dataSource
* @return
* @throws Exception
*/
@Bean(name = "secondarySqlSessionFactory")
public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().
getResources(SecondDataSourceConfig.MAPPER_LOCATION));
return sqlSessionFactoryBean.getObject();
}
//事务
@Bean(name = "secondTransactionManager")
public DataSourceTransactionManager secondTransactionManager() {
return new DataSourceTransactionManager(secondaryDataSource());
}
}
这样就可以了,感谢大家的参考、借鉴