Spring Boot + mybatis 多数据源配置

赵师傅0032 赵师傅0032 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我根据网上的文章配置的多数据源,在查询标有Primary注解的数据源时一切正常,但查非Primary的数据源时会抛出异常,查了很久不知道什么原因,大佬们帮忙看看原因啊!!
代码贴出来


@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为数据库建表语句

pmp2013

Spring Boot整合MyBatis与Druid实现多数据源配置

在现代企业级Java应用开发中,随着业务规模的扩大和系统复杂度的提升,单一数据源已经无法满足系统的高可用性、性能以及数据隔离等需求。多数据源配置应运而生,旨在通过为不同业务模块或数据访问需求分配独立的数据源,从而实现数据库资源的合理分配与高效利用。多数据源通常适用于以下场景:读写分离:将读操作与写操作分配到不同的数据库实例,提升系统并发能力。数据隔离:不同业务模块使用不同数据库,降低耦合度,提升系统安全性。高可用与灾备:通过配置多个数据源实现故障切换,保障系统稳定性。

晕过前方

Spring Boot + Mybatis多数据源和动态数据源配置方法

最近做项目遇到这样的应用场景,项目需要同时连接两个不同的数据库A, B,并且它们都为主从架构,一台写库,多台读库。下面小编给大家带来了Spring Boot + Mybatis多数据源和动态数据源配置方法,需要的朋友参考下吧

weixin_38566318

spring boot + mybatis(通用mapper) druid多数据源切换配置

1.配置数据源,2.动态数据源切换,3.注册动态数据源,4.动态数据源注解切点,5.通过切点切换数据源,6.在service层通过注解切换不同数据源,7.启动项目

Bug收割机

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为数据库建表语句

pmp2013
评论 5
收藏 已收藏
分享
返回顶部
赵师傅0032
Web 开发 81,108 成员 341,721 内容