Springboot 整合MybatisPlus 多資料來源(分包實現)
阿新 • • 發佈:2021-01-15
技術標籤:Spring Bootspring bootmybatisplus
文章目錄
實現方式
上次基於AOP動態切換資料來源實現,這次實現使用分包實現
核心依賴
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</ artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.22</version>
< exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
< groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
核心配置檔案
spring.datasource.druid.url = jdbc:mysql://127.0.0.1:10071/mall_db_test?useSSL=false
spring.datasource.druid.username = root
spring.datasource.druid.password = 123456
spring.datasource.druid.driver-class-name = com.mysql.jdbc.Driver
spring.datasource.druid.max-active = 20
spring.datasource.druid.initial-size = 1
spring.datasource.druid.max-wait = 60000
spring.datasource.druid.min-idle = 1
spring.datasource.druid.time-between-eviction-runs-millis = 60000
spring.datasource.druid.min-evictable-idle-time-millis = 300000
spring.datasource.druid.validation-query = SELECT 1
spring.datasource.druid.test-on-borrow = false
spring.datasource.druid.test-while-idle = true
spring.datasource.druid.test-on-return = false
spring.datasource.druid.async-init = true
spring.datasource.druid.filter.wall.enabled = true
spring.datasource.druid.filter.wall.db-type = mysql
spring.datasource.druid.filter.wall.config.update-where-none-check = true
spring.datasource.druid.filter.wall.config.delete-where-none-check = true
spring.datasource.druid.filter.wall.config.multi-statement-allow = true
spring.datasource.druid.filter.wall.config.strict-syntax-check = false
spring.datasource.druid.filter.wall.config.alter-table-allow = false
spring.datasource.druid.filter.wall.config.drop-table-allow = false
spring.datasource.druid.dsc.url = jdbc:postgresql://localhost:55432/source_db
spring.datasource.druid.dsc.username = root
spring.datasource.druid.dsc.password = 123456
spring.datasource.druid.dsc.driver-class-name = org.postgresql.Driver
spring.datasource.druid.dsc.max-active = 20
spring.datasource.druid.dsc.initial-size = 5
spring.datasource.druid.dsc.max-wait = 60000
spring.datasource.druid.dsc.min-idle = 5
spring.datasource.druid.dsc.time-between-eviction-runs-millis = 60000
spring.datasource.druid.dsc.min-evictable-idle-time-millis = 300000
spring.datasource.druid.dsc.validation-query = SELECT 1
spring.datasource.druid.dsc.test-on-borrow = false
spring.datasource.druid.dsc.test-while-idle = true
spring.datasource.druid.dsc.test-on-return = false
spring.datasource.druid.dsc.pool-prepared-statements = true
spring.datasource.druid.dsc.max-open-prepared-statements = 20
spring.datasource.druid.dsc.async-init = true
MybatisPlus配置類
MybatisPlusConfig
@Configuration
@MapperScan(basePackages = {"com.mall.dao.mapper"}, sqlSessionFactoryRef = "MallSQLServerSessionFactory")
public class MybatisPlusConfig {
@Bean(name = DataSourceConstant.MALL)
@Primary
@ConfigurationProperties(prefix = "spring.datasource.druid")
public DataSource admin() {
return DruidDataSourceBuilder.create().build();
}
@Bean
public SqlSessionFactory MallSQLServerSessionFactory (@Qualifier(DataSourceConstant.MALL) DataSource dataSource) throws Exception{
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean ();
//新增XML目錄
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
bean.setMapperLocations(resolver.getResources("classpath:mapper/mall/**/*.xml"));
// 實體類別名
bean.setTypeAliasesPackage("com.mall.dao.entity.*");
//解決分頁外掛無效問題
bean.setPlugins(paginationInterceptor());
MybatisConfiguration configuration = new MybatisConfiguration();
//開啟下劃線轉駝峰
configuration.setMapUnderscoreToCamelCase(true);
configuration.setJdbcTypeForNull(JdbcType.NULL);
bean.setDataSource(dataSource);
bean.setConfiguration(configuration);
return bean.getObject();
}
/**
* 分頁外掛
*
* @return
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PageInterceptor();
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
paginationInterceptor.setOverflow(true);
return paginationInterceptor;
}
}
MybatisPlusConfig1
@Configuration
@MapperScan(basePackages = {"com.mall.dao.dsc.mapper"}, sqlSessionFactoryRef = "DscSQLServerSessionFactory")
public class DscMybatisPlusConfig {
@Bean(name = DataSourceConstant.DSC)
@ConfigurationProperties(prefix = "spring.datasource.druid.dsc")
public DataSource dsc() {
return DruidDataSourceBuilder.create().build();
}
@Bean
public SqlSessionFactory DscSQLServerSessionFactory (@Qualifier(DataSourceConstant.DSC) DataSource dataSource) throws Exception{
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean ();
//新增XML目錄
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
bean.setMapperLocations(resolver.getResources("classpath:mapper/dsc/*.xml"));
// 實體類別名
bean.setTypeAliasesPackage("com.mall.dao.entity.*");
MybatisConfiguration configuration = new MybatisConfiguration();
//開啟下劃線轉駝峰
configuration.setMapUnderscoreToCamelCase(true);
configuration.setJdbcTypeForNull(JdbcType.NULL);
bean.setDataSource(dataSource);
bean.setConfiguration(configuration);
return bean.getObject();
}
}
啟動類配置
@SpringBootApplication(exclude = {MybatisPlusAutoConfiguration.class})
@Slf4j
public class Application {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(Application.class);
springApplication.setBannerMode(Banner.Mode.OFF);
springApplication.addListeners(new ApplicationPidFileWriter());
springApplication.run(args);
}
}
需要排除MybatisPlusAutoConfiguration 資料來源自動配置,排除Springboot的DataSourceAutoConfiguration 無效
自此配置完成,這裡再給一下分包
分包