1. 程式人生 > 其它 >Springboot 整合MybatisPlus 多資料來源(分包實現)

Springboot 整合MybatisPlus 多資料來源(分包實現)

技術標籤: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 無效

自此配置完成,這裡再給一下分包

分包

在這裡插入圖片描述
在這裡插入圖片描述