spring boot双数据源记录
1,添加配置文件
MasterDataSourceConfig
@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {// 精确到 master 目录,以便跟其他数据源隔离 static final String PACKAGE = "com.xxx.xxx.xxx.dao.master"; static final String MAPPER_LOCATION = "classpath:mapper/master/*.xml"; @Value("${master.datasource.url}") private String url; @Value("${master.datasource.username}") private String user; @Value("${master.datasource.password}") private String password; @Value("${master.datasource.driverClassName}") private String driverClass; @Bean(name = "masterDataSource") @Primary public DataSource masterDataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(driverClass); dataSource.setUrl(url); dataSource.setUsername(user); dataSource.setPassword(password); return dataSource; } @Bean(name = "masterTransactionManager") @Primary public DataSourceTransactionManager masterTransactionManager() { return new DataSourceTransactionManager(masterDataSource()); } @Bean(name = "masterSqlSessionFactory") @Primary public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource) throws Exception { final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(masterDataSource); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources(MasterDataSourceConfig.MAPPER_LOCATION)); return sessionFactory.getObject(); }
}
2.SecondDataSourceConfig.java
注意这个第二个数据源中的mapperlocation 因为是引用其它jar包中的xml文件,所以要把classpath改为classpath*.
否则会报错
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = SecondDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "secondSqlSessionFactory")
public class SecondDataSourceConfig {
// 精确到 cluster 目录,以便跟其他数据源隔离
static final String PACKAGE = "com.xxx.xxx.xxx.mapper";
static final String MAPPER_LOCATION = "classpath*:mapper/*.xml";
@Value("${second.datasource.url}")
private String url;
@Value("${second.datasource.username}")
private String user;
@Value("${second.datasource.password}")
private String password;
@Value("${second.datasource.driverClassName}")
private String driverClass;
@Bean(name = "secondDataSource")
public DataSource clusterDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}
@Bean(name = "secondTransactionManager")
public DataSourceTransactionManager clusterTransactionManager() {
return new DataSourceTransactionManager(clusterDataSource());
}
@Bean(name = "secondSqlSessionFactory")
public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("secondDataSource") DataSource clusterDataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(clusterDataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(SecondDataSourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
启动类更改
要注意三个地方的更改.
1 @SpringBootApplication s要加上exclue排除自动配置
2.@MapperScan 要加上第二个dao所在的位置. xml接口
@MapperScan({"com.xxx.xxx.xxx.dao","com.xxx.xxx.xxx1.dao"})
@ComponentScan(basePackages = { "com.xxx.xxx.xxx", "com.xxx.xxx.common","com.xxx.xxx.xxx1.mapper"})
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class xxxApplication {
public static void main(String[] args) {
SpringApplication.run(FinanicalInformationApplication.class, args);
System.out.println("start success ");
}
}
直接调用
public Result GetProductList(@RequestBody Integer userId){
TblCfp entity=tblCfpDao.queryById(1); //第一个库
List<MFundInfo> fundInfos=tblFundInfoDAO.selectAll(1,100); //第二个库.
return Results.successWithData(fundInfos,"","");
}
还不快抢沙发