配置多数据源后重写MetaObjectHandler不生效
一、问题描述
项目中配置了Mysql和taos数据库两种数据源,配置之后在做数据插入时需要自动填充的字段报不能为null,这个之前在只有一个数据源的时候是没有问题的。因为实现了MetaObjectHandler
做了自动填充。
二、问题分析
自定义字段未按照预期自动填充,说明实现的MetaObjectHandler
自定义类未生效,检查配置,开启debug,发现在插入数据时代码没有进入自定义MeteObjectHandler,同时发现配置mybatis-plus全局配置未生效。由于MySql使用了代码的方式进行配置,所以应该将Mybatis-plus相关配置放到代码中。
三、解决方案:
将Mybatis-plus相关配置放到代码中,如下所示:
public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource dataSource)throws Exception{
MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean =new MybatisSqlSessionFactoryBean();
GlobalConfig globalConfig=new GlobalConfig();
globalConfig.setMetaObjectHandler(new MyMetaObjectHandler());
globalConfig.setBanner(false);
mybatisSqlSessionFactoryBean.setDataSource(dataSource);
mybatisSqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/hlytec/cloud/mapper/mysql/**/*Mapper.xml"));
mybatisSqlSessionFactoryBean.setGlobalConfig(globalConfig);
SqlSessionFactory sqlSessionFactory = mybatisSqlSessionFactoryBean.getObject();
sqlSessionFactory.getConfiguration().setMapUnderscoreToCamelCase(true);
return sqlSessionFactory;
}