中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot整合Mybatis Plus多數據源的實現方法是什么

發布時間:2021-11-04 13:37:21 來源:億速云 閱讀:126 作者:iii 欄目:開發技術

這篇文章主要講解了“SpringBoot整合Mybatis Plus多數據源的實現方法是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“SpringBoot整合Mybatis Plus多數據源的實現方法是什么”吧!

    導讀

      有一個這樣子的需求,線上正在跑的業務,由于業務發展需要,需重新開發一套新系統,等新系統開發完成后,需要無縫對接切換,當初具體設計見草圖。

    SpringBoot整合Mybatis Plus多數據源的實現方法是什么

    添加依賴

      <!--lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.16</version>
                <!--scope=provided,說明它是在編譯階段生效,不需要打入包中,Lombok在編譯期將帶Lombok注解的Java文件正確編譯為完整的Class文件-->
                <scope>provided</scope>
            </dependency>
            <!--mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
            <!--mybatis plus和spring boot整合-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.4.0</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.10</version>
            </dependency>

    application.properties

    server.port=9999
    spring.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.master.url=jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
    spring.datasource.master.username=root
    spring.datasource.master.password=root
    
    spring.datasource.slave.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.slave.jdbc-url=jdbc:mysql://127.0.0.1/test2?useUnicode=true&characterEncoding=utf-8&useSSL=false
    spring.datasource.slave.username=root
    spring.datasource.slave.password=root

    2種方式創建DataSource

    Master配置,使用druid連接池

    import com.alibaba.druid.pool.DruidDataSource;
    import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import org.springframework.core.env.Environment;
    
    import javax.sql.DataSource;
    
    /**
     * @Author:chenyanbin
     */
    @Configuration
    @MapperScan(basePackages = "com.example.demo.mapper", sqlSessionFactoryRef = "masterSqlSessionFactory")
    public class MasterDataSourceConfig {
        @Autowired
        private Environment env;
    
        @Primary
        @Bean(name = "masterDataSource")
    //    @ConfigurationProperties("spring.datasource.master")
        public DataSource masterDataSource() {
    //        return DataSourceBuilder.create().build();
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setUrl(env.getProperty("spring.datasource.master.url"));
            dataSource.setUsername(env.getProperty("spring.datasource.master.username"));
            dataSource.setPassword(env.getProperty("spring.datasource.master.password"));
            dataSource.setDriverClassName(env.getProperty("spring.datasource.master.driver-class-name"));
            //配置初始化大小、最小、最大
            dataSource.setMinIdle(10);
            //配置初始化大小、最小、最大
            dataSource.setMaxActive(200);
            //配置初始化大小、最小、最大
            dataSource.setInitialSize(10);
            //配置獲取連接等待超時的時間
            dataSource.setMaxWait(60000);
            //配置一個連接在池中最小生存的時間,單位是毫秒
            dataSource.setMinEvictableIdleTimeMillis(300000);
            //配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒
            dataSource.setTimeBetweenEvictionRunsMillis(60000);
            //默認的testWhileIdle=true,testOnBorrow=false,testOnReturn=false
            dataSource.setValidationQuery("SELECT 1");
            //申請連接時執行validationQuery檢測連接是否有效
            dataSource.setTestOnBorrow(false);
            //建議配置為true,不影響性能,并且保證安全性。
            dataSource.setTestWhileIdle(true);
            //是否緩存preparedStatement,也就是PSCache
            dataSource.setPoolPreparedStatements(false);
            return dataSource;
        }
    
        @Bean(name = "masterSqlSessionFactory")
        public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
            MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
            sessionFactoryBean.setDataSource(dataSource);
    
            return sessionFactoryBean.getObject();
        }
    }

    Slave配置

    import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.boot.jdbc.DataSourceBuilder;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import javax.sql.DataSource;
    
    /**
     * @Author:chenyanbin
     */
    @Configuration
    @MapperScan(basePackages = "com.example.demo.mapper2",sqlSessionFactoryRef = "slaveSqlSessionFactory")
    public class SlaveDataSourceConfig {
        @Bean(name = "slaveDataSource")
        @ConfigurationProperties("spring.datasource.slave")
        public DataSource slaveDataSource(){
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "slaveSqlSessionFactory")
        public SqlSessionFactory sqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception {
            MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
            sessionFactoryBean.setDataSource(dataSource);
            return sessionFactoryBean.getObject();
        }
    }

    注意

      master和slave掃描不同的mapper包路徑!!!!!!

      如果需要指定.xml文件,需這樣配置!!!

    @Bean(name = "masterSqlSessionFactory")
        public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
            MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
            sessionFactoryBean.setDataSource(dataSource);
            sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                    .getResources("classpath:mapper/**/*.xml"));
            return sessionFactoryBean.getObject();
        }

    SpringBoot整合Mybatis Plus多數據源的實現方法是什么

    MybatisPlus分頁插件設置

    import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
    import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * MybatisPlus分頁配置
     *
     * @Author:chenyanbin
     */
    @Configuration
    public class MybatisPlusPageConfig {
    
        /**
         * 新版分頁插件
         *
         * @return
         */
        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor() {
            MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
            mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
            return mybatisPlusInterceptor;
        }
    }
      @Bean(name = "masterSqlSessionFactory")
        public SqlSessionFactory sqlSessionFactory(
                @Qualifier("masterDataSource") DataSource dataSource,
                @Qualifier("mybatisPlusInterceptor") MybatisPlusInterceptor mybatisPlusInterceptor
        ) throws Exception {
            MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
            sessionFactoryBean.setDataSource(dataSource);
            sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                    .getResources("classpath:mapper/**/*.xml"));
            sessionFactoryBean.setPlugins(mybatisPlusInterceptor);
            return sessionFactoryBean.getObject();
        }

    啟動類

    @SpringBootApplication(
    exclude = {DataSourceAutoConfiguration.class, MybatisPlusAutoConfiguration.class}
    )

    啟動類上排查,自動裝配,使用我們自定義的多數據源!!!

    演示

    SpringBoot整合Mybatis Plus多數據源的實現方法是什么

    SpringBoot整合Mybatis Plus多數據源的實現方法是什么

      多個數據源,同時也是支持事務的

    感謝各位的閱讀,以上就是“SpringBoot整合Mybatis Plus多數據源的實現方法是什么”的內容了,經過本文的學習后,相信大家對SpringBoot整合Mybatis Plus多數據源的實現方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    宝清县| 麻江县| 湖南省| 婺源县| 克什克腾旗| 镇康县| 屏边| 宝山区| 青阳县| 静海县| 无极县| 中宁县| 永城市| 东山县| 民丰县| 万全县| 巫溪县| 富裕县| 信宜市| 若羌县| 隆化县| 和顺县| 铜陵市| 舞钢市| 巴南区| 防城港市| 华阴市| 杨浦区| 抚顺县| 密云县| 定州市| 绥江县| 临武县| 闵行区| 嘉义县| 惠东县| 嘉兴市| 富平县| 天长市| 西贡区| 嘉定区|