Spring Boot + mybatis 多数据源配置
代码贴出来
@Configuration
@MapperScan(basePackages = {"com.demo.clp.db.company.repository"}, sqlSessionTemplateRef = "companyDbSessionTemplate")
public class CompanyDbConfig {
@Value("${spring.datasource.companydb.url}")
private String companyDbUrl;
@Value("${spring.datasource.companydb.username}")
private String companyDbUsername;
@Value("${spring.datasource.companydb.password}")
private String companyDbPassword;
@Value("${spring.datasource.companydb.driver-class-name}")
private String companyDbDriver;
@Bean(name = "companyDbDataSource")
@Primary
public DataSource companyDbDataSource(){
DataSourceBuilder companyDataSourceBuilder = DataSourceBuilder.create();
companyDataSourceBuilder.username(companyDbUsername);
companyDataSourceBuilder.password(PwdUtil.decryptString(companyDbPassword,PwdUtil.pwd));
companyDataSourceBuilder.url(companyDbUrl);
companyDataSourceBuilder.driverClassName(companyDbDriver);
return companyDataSourceBuilder.build();
}
@Bean(name = "companyDbSessionFactory")
@Primary
public SqlSessionFactory companyDbSessionFactory() throws Exception{
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(companyDbDataSource());
factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:templates/com/demo/clp/db/company/mapper/*.xml"));
return factoryBean.getObject();
}
@Bean(name = "companyDbSessionTemplate")
@Primary
public SqlSessionTemplate companyDbSessionTemplate() throws Exception{
SqlSessionTemplate template = new SqlSessionTemplate(companyDbSessionFactory());
return template;
}
@Bean(name = "companyDbTransactionManager")
@Primary
public DataSourceTransactionManager companyDbTransactionManager(){
return new DataSourceTransactionManager(companyDbDataSource());
}
}
@Configuration
@MapperScan(basePackages = {"com.demo.clp.db.member.repository"},sqlSessionTemplateRef = "memberDbSessionTemplate")
public class MemberDbConfig {
@Value("${spring.datasource.memberdb.url}")
private String memberDbUrl;
@Value("${spring.datasource.memberdb.username}")
private String memberDbUsernam;
@Value("${spring.datasource.memberdb.password}")
private String memberDbPassword;
@Value("${spring.datasource.memberdb.driver-class-name}")
private String memberDbDriver;
@Bean(name = "memberDbDataSource")
// @Primary
public DataSource memberDbDataSource(){
DataSourceBuilder memberDataSourceBuilder = DataSourceBuilder.create();
memberDataSourceBuilder.username(memberDbUsernam);
memberDataSourceBuilder.password(PwdUtil.decryptString(memberDbPassword,PwdUtil.pwd));
memberDataSourceBuilder.url(memberDbUrl);
memberDataSourceBuilder.driverClassName(memberDbDriver);
return memberDataSourceBuilder.build();
}
@Bean(name = "memberDbSessionFactory")
// @Primary
public SqlSessionFactory memberDbSessionFactory() throws Exception{
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(memberDbDataSource());
factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:templates/com/demo/clp/db/member/mapper/*.xml"));
return factoryBean.getObject();
}
@Bean(name = "memberDbSessionTemplate")
// @Primary
public SqlSessionTemplate memberDbSessionTemplate() throws Exception{
SqlSessionTemplate template = new SqlSessionTemplate(memberDbSessionFactory());
return template;
}
@Bean(name = "memberDbTransactionManager")
// @Primary
public DataSourceTransactionManager memberDbTransactionManager(){
return new DataSourceTransactionManager(memberDbDataSource());
}
}
这是查询非Primary的方法
public Wifi queryRecord(String key) {
Wifi example = new WifiExample();
example.createCriteria()
.andKeyEqualTo(key);
List<Wifi> list = wifiMapper.selectByExample(example);
Optional<Wifi> wifiOpt = list.stream()
.sorted((a, b) -> b.getModifiedOn().compareTo(a.getModifiedOn()))
.findFirst();
if (wifiOpt .isPresent())
return wifiOpt.get();
return null;
}
报错内容如下:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (tk.mybatis.mapper.provider.ExampleProvider.dynamicSQL). Cause: java.lang.InstantiationException: tk.mybatis.mapper.provider.ExampleProvider
用的mybatis generator生成的相关代码,Primary查询是正常的,非Primary报异常,很蛋疼!
相关推荐
spring boot + mybatis+mysql yml配置多数据源配置
解压后有资源文件和说明文件 需要创建两个数据库 名字为: familymonitor_v2 和 orderpayment mysql数据库 用户名和密码 默认为root 和 空 表tb_coupon_info 在数据库orderpayment 中 表tb_rus_worldcup_team_info在数据库familymonitor_v2中 jdk为1.7 mysql为5.7 环境为 spring boot mybatis +多数据源 demosql.sql为数据库建表语句
Spring Boot整合MyBatis与Druid实现多数据源配置
在现代企业级Java应用开发中,随着业务规模的扩大和系统复杂度的提升,单一数据源已经无法满足系统的高可用性、性能以及数据隔离等需求。多数据源配置应运而生,旨在通过为不同业务模块或数据访问需求分配独立的数据源,从而实现数据库资源的合理分配与高效利用。多数据源通常适用于以下场景:读写分离:将读操作与写操作分配到不同的数据库实例,提升系统并发能力。数据隔离:不同业务模块使用不同数据库,降低耦合度,提升系统安全性。高可用与灾备:通过配置多个数据源实现故障切换,保障系统稳定性。
Spring Boot + Mybatis多数据源和动态数据源配置方法
最近做项目遇到这样的应用场景,项目需要同时连接两个不同的数据库A, B,并且它们都为主从架构,一台写库,多台读库。下面小编给大家带来了Spring Boot + Mybatis多数据源和动态数据源配置方法,需要的朋友参考下吧
spring boot + mybatis(通用mapper) druid多数据源切换配置
1.配置数据源,2.动态数据源切换,3.注册动态数据源,4.动态数据源注解切点,5.通过切点切换数据源,6.在service层通过注解切换不同数据源,7.启动项目
spring boot + mybatis+mysql 多数据源配置
解压后有资源文件和说明文件 需要创建两个数据库 名字为: familymonitor_v2 和 orderpayment mysql数据库 用户名和密码 默认为root 和 空 表tb_coupon_info 在数据库orderpayment 中 表tb_rus_worldcup_team_info在数据库familymonitor_v2中 jdk为1.7 mysql为5.7 环境为 spring boot mybatis +多数据源 demosql.sql为数据库建表语句


Web 开发
