Spring Boot + mybatis 多数据源配置

json_wf 2018-03-27 10:54:45
我根据网上的文章配置的多数据源,在查询标有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报异常,很蛋疼!
...全文
401 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cathy313 2019-07-15
  • 打赏
  • 举报
回复
你参考一下https://blog.csdn.net/neulily2005/article/details/83749279 看看是这个问题不
江小左 2019-07-15
  • 打赏
  • 举报
回复
我也是同样的问题,你的解决了吗
迷途的码农 2018-03-27
  • 打赏
  • 举报
回复
xml配置文件有问题,你仔细检查下吧
xwn_2016 2018-03-27
  • 打赏
  • 举报
回复
检查一下dao的xml文件里的方法是否和mapper里命名不一致
json_wf 2018-03-27
  • 打赏
  • 举报
回复
引用 1 楼 xiewei2222 的回复:
xml配置文件有问题,你仔细检查下吧
大哥,我刚开始接触JAVA,实在是找不到问题原因,能否指点一下啊,,万分感谢

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧