springboot+mybatis-plus + clickhouse+mysql实现多数据源切换分页功能
1、mysql自定义分页配置:
@Configuration
@MapperScan(basePackages = {"com.zs.test.mapper"}, sqlSessionFactoryRef = "mysqlSqlSessionFactory")
@ConditionalOnProperty(prefix = "spring.datasource.mysql", name = "driverClassName", havingValue = "com.mysql.cj.jdbc.Driver")
public class MysqlDataSourceConfig {
@Bean
public MybatisPlusInterceptor mysqlPageInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.KINGBASE_ES));
return interceptor;
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.mysql")
public HikariConfig mysqlConfig() {
return new HikariConfig();
}
@Bean
public HikariDataSource mysqlDataSource(HikariConfig mysqlConfig) {
HikariDataSource dataSource = new HikariDataSource(mysqlConfig);
return dataSource;
}
@Primary
@Bean(name = "mysqlSqlSessionFactory")
public SqlSessionFactory mysqlSqlSessionFactory() throws Exception {
MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
factoryBean.setDataSource(mysqlDataSource(mysqlConfig()));
factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:mybatis/*.xml"));
factoryBean.setTypeAliasesPackage("com.zs.test.entity");
factoryBean.setPlugins(mysqlPageInterceptor());
return factoryBean.getObject();
}
@Bean
@Primary
public SqlSessionTemplate mysqlSqlSessionTemplate() throws Exception {
return new SqlSessionTemplate(mysqlSqlSessionFactory());
}
}
2、clickhouse自定义分页配置:
@Configuration
@MapperScan(basePackages = {"com.zs.test.mapper.clickhouse"}, sqlSessionFactoryRef = "clickHouseSqlSessionFactory")
@ConditionalOnProperty(prefix = "spring.datasource.clickhouse", name = "driverClassName", havingValue = "ru.yandex.clickhouse.ClickHouseDriver")
public class ClickHouseDataSourceConfig {
@Bean
public MybatisPlusInterceptor clickHousePageInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.CLICK_HOUSE));
return interceptor;
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.clickhouse")
public HikariConfig clickhouseConfig() {
return new HikariConfig();
}
@Bean
public HikariDataSource clickHouseDataSource(HikariConfig clickhouseConfig) {
HikariDataSource dataSource = new HikariDataSource(clickhouseConfig);
return dataSource;
}
@Primary
@Bean(name = "clickHouseSqlSessionFactory")
public SqlSessionFactory sqlServerSqlSessionFactory() throws Exception {
MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
factoryBean.setDataSource(clickHouseDataSource(clickhouseConfig()));
factoryBean.setPlugins(clickHousePageInterceptor());
return factoryBean.getObject();
}
@Bean
@Primary
public SqlSessionTemplate sqlServerSqlSessionTemplate() throws Exception {
return new SqlSessionTemplate(sqlServerSqlSessionFactory());
}
}
3、application-dev.yml配置:
datasource:
mysql:
jdbcUrl: jdbc:mysql://localhost:3306/数据库名称?autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true
username: root
password: 111111
driverClassName: com.mysql.cj.jdbc.Driver
clickhouse:
jdbcUrl: jdbc:clickhouse://localhost:端口号/数据库名称
username: default
password:
driverClassName: ru.yandex.clickhouse.ClickHouseDriver