1.定义配置类
@MapperScan(value = "cn.com.xxx.mapper.middle",sqlSessionTemplateRef = "middleSqlSessionTemplate")
@Configuration
public class MiddleMybatisPlusConfig implements EnvironmentAware {
@Autowired
private MybatisPlusConfig mybatisPlusConfig;
private Environment environment;
@Override
public void setEnvironment(Environment environment) {
this.environment = environment;
}
@Bean("middleSqlSessionFactory")
public SqlSessionFactory middleSqlSessionFactory(@Qualifier("middleDataSource") DataSource middleDataSource,
@Qualifier("mybatisOraclePlusInterceptor") MybatisPlusInterceptor mybatisPgPlusInterceptor) throws Exception {
//***导入MybatisSqlSession配置***
MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
//指明数据源
sqlSessionFactory.setDataSource(middleDataSource);
//指明mapper.xml位置(配置文件中指明的xml位置会失效用此方式代替,具体原因未知)
String resourcePath = environment.getProperty("mapper.resource.path");
sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
getResources(resourcePath+"/mapper/middle/**Mapper.xml"));
//配置插件
sqlSessionFactory.setPlugins(mybatisPgPlusInterceptor);
//***导入Mybatis配置***
MybatisConfiguration configuration = new MybatisConfiguration();
configuration.setJdbcTypeForNull(JdbcType.NULL);
configuration.setMapUnderscoreToCamelCase(true);
configuration.setCacheEnabled(false);
configuration.setLogImpl(StdOutImpl.class);
mybatisPlusConfig.config(configuration);
sqlSessionFactory.setConfiguration(configuration);
return sqlSessionFactory.getObject();
}
@Bean(name = "middleSqlSessionTemplate")
public SqlSessionTemplate middleSqlSessionTemplate(@Qualifier("middleSqlSessionFactory") SqlSessionFactory middleSqlSessionFactory) throws Exception {
return new SqlSessionTemplate(middleSqlSessionFactory);
}
@Primary
@Bean(name = "middleTransactionManager")
public DataSourceTransactionManager middleTransactionManager(@Qualifier("middleDataSource")
DataSource middleDataSource) {
return new DataSourceTransactionManager(middleDataSource);
}
}
2.定义数据源
@Slf4j
@Configuration
public class DataSourceConfig {
/**
* @desc 监控数据源
* @param druidProperties
* @return
*/
@Bean(value = "monitorDataSource")
public DataSource monitorDataSource(DruidDataProperties druidProperties) {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(druidProperties.getMonitorDriverClass());
dataSource.setUrl(druidProperties.getMonitorUrl());
dataSource.setUsername(druidProperties.getMonitorUser());
dataSource.setPassword(druidProperties.getMonitorPassword());
return druidProperties.dataSource(dataSource);
}
}
3.配置mybatisConfig配置
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {
@Value("${mybatis-plus.configuration.log-impl}")
private String logImpl;
@Bean("mybatisOraclePlusInterceptor")
public MybatisPlusInterceptor mybatisOraclePlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
paginationInnerInterceptor.setDbType(DbType.ORACLE);
paginationInnerInterceptor.setOverflow(true);
//添加分页插件
interceptor.addInnerInterceptor(paginationInnerInterceptor);
//添加乐观锁插件
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
}