最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot 整合mybatis 使用多數(shù)據(jù)源的實現(xiàn)方法

 更新時間:2018年03月06日 09:10:53   作者:互扯程序  
這篇文章主要介紹了Spring Boot 整合mybatis 使用多數(shù)據(jù)源的實現(xiàn)方法,需要的朋友可以參考下

前言

本篇教程偏向?qū)崙?zhàn),程序猿直接copy代碼加入到自己的項目中做簡單的修修改改便可使用,而對于springboot以及mybatis不在此進行展開介紹,如有讀者希望了解可以給我留言,并持續(xù)關(guān)注,我后續(xù)會慢慢更新。(黑色區(qū)域代碼部分,安卓手機可手動向左滑動,來查看全部代碼)

整合

其實整合很簡單,如果是用gradle的話,在build.gradle文件里加入

compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.1')

如果是用maven的話在pom.xml文件里加入

 

單庫配置:

引入之后,默認情況下,Spring Boot會自動為我們配置好一個DataSource,它會在classpath中搜索H2、hsqldb等內(nèi)存數(shù)據(jù)庫的jar包,如果找到了,就會自動配置一個內(nèi)存數(shù)據(jù)庫的DataSource。

如果在application.yml或application.property中指定了spring.datasource.*的相關(guān)配置參數(shù),Spring Boot就會使用該配置創(chuàng)建一個DataSource。

然后會自動創(chuàng)建使用該DataSource的SqlSessionFactoryBean以及SqlSessionTemplate。會自動掃描你的Mappers,連接到SqlSessionTemplate,并注冊到Spring上下文中。

 spring.datasource.url=jdbc:mysql://localhost/test
 spring.datasource.username=dbuser
 spring.datasource.password=dbpass
 spring.datasource.driver-class-name=com.mysql.jdbc.Driver

更多參數(shù)請查看DataSourceProperties

多庫配置:

由于業(yè)務需要,項目要同時使用多個數(shù)據(jù)庫進行業(yè)務開發(fā):

首先,我們必須在application.property中自定義兩個數(shù)據(jù)源的配置,一個使用first.datasource.*,另一個使用second.datasource.*,為了能使別人一眼看出連接的是什么庫,可以使用數(shù)據(jù)庫命名,比如user庫,則可以使用user.datasource.*,在使用多數(shù)據(jù)源的時候,所有必要配置都不能省略。

first.datasource.url=jdbc:mysql://localhost/first
first.datasource.username=dbuser1
first.datasource.password=dbpass1
first.datasource.driver-class-name=com.mysql.jdbc.Driver
first.datasource.type=com.alibaba.druid.pool.DruidDataSource//我用的是Druid,也可以不加用默認的
second.datasource.url=jdbc:mysql://localhost/second
second.datasource.username=dbuser2
second.datasource.password=dbpass2
second.datasource.driver-class-name=com.mysql.jdbc.Driver
second.datasource.type=com.alibaba.druid.pool.DruidDataSource

直接上代碼,我的做法是將兩個數(shù)據(jù)源用兩個配置類創(chuàng)建:

@Configuration
@MapperScan(basePackages = {"com.user.server.dao"}, sqlSessionTemplateRef = "userSqlSessionTemplate")
public class UserMybatisConfig {
 @Bean(name = "userDataSource")
 @Primary //必須加此注解,不然報錯,下一個類則不需要添加
 @ConfigurationProperties(prefix = "first.datasource") // prefix值必須是application.properteis中對應屬性的前綴
 public DataSource userDataSource() {
  return DataSourceBuilder.create().build();
 }
 @Bean
 public SqlSessionFactory userSqlSessionFactory(@Qualifier("userDataSource") DataSource dataSource) throws Exception {
  SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
  bean.setDataSource(dataSource);
  //添加XML目錄
  ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
 try {
   bean.setMapperLocations(resolver.getResources("classpath*:com/user/server/dao/mapping/*.xml"));
   return bean.getObject();
  } catch (Exception e) {
   e.printStackTrace();
   throw new RuntimeException(e);
  }
 }
 @Bean
 public SqlSessionTemplate userSqlSessionTemplate(@Qualifier("userSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
  SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory); // 使用上面配置的Factory
  return template;
 }
}
@Configuration
@MapperScan(basePackages = {"com.airmi.server.dao"}, sqlSessionTemplateRef = "autoTestSqlSessionTemplate")
 public class AutoTestMybatisConfig {
  @Bean
  @ConfigurationProperties(prefix = "autotest.datasource")
   public DataSource autoTestDataSource() {
   return DataSourceBuilder.create().build();
  }
  @Bean
  public SqlSessionTemplate autoTestSqlSessionTemplate(@Qualifier("autoTestSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
   SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory);
    return template;
   }
  @Bean
  public SqlSessionFactory autoTestSqlSessionFactory(@Qualifier("autoTestDataSource") DataSource dataSource) throws Exception {
   SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
   bean.setDataSource(dataSource);
   //添加XML目錄
   ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
   try {
    bean.setMapperLocations(resolver.getResources("classpath*:com/airmi/server/dao/mapping/*.xml"));
    return bean.getObject();
   } catch (Exception e) {
    e.printStackTrace();
    throw new RuntimeException(e);
   }
  }
 }

 @Primary //該注解表示在同一個接口有多個實現(xiàn)類可以注入的時候,默認選擇哪一個,而不是讓autowire注解報錯,官網(wǎng)要求當多個數(shù)據(jù)源時,必須指定一個datasource,另一個datasource則不用添加。

@Qualifier 根據(jù)名稱進行注入,通常是在具有相同的多個類型的實例的一個注入(例如有多個DataSource類型的實例)。

 @MapperScan (basePackages = {"com.user.server.dao"}, sqlSessionTemplateRef = "userSqlSessionTemplate") basePackages為mapper所在的包,sqlSessionTemplateRef要引用的實例。

user代碼結(jié)構(gòu)如下:

 

總結(jié)

以上所述是小編給大家介紹的Spring Boot 整合mybatis 使用多數(shù)據(jù)源的實現(xiàn)方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java基于fork/koin類實現(xiàn)并發(fā)排序

    Java基于fork/koin類實現(xiàn)并發(fā)排序

    這篇文章主要介紹了Java基于fork/koin類實現(xiàn)并發(fā)排序,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Java中的自旋鎖解析

    Java中的自旋鎖解析

    這篇文章主要介紹了Java中的自旋鎖解析,自旋鎖是指當一個線程嘗試獲取某個鎖時,如果該鎖已被其他線程占用,就一直循環(huán)檢測鎖是否被釋放,而不是進入線程掛起或睡眠狀態(tài),需要的朋友可以參考下
    2023-10-10
  • RabbitMQ實現(xiàn)Work Queue工作隊列的示例詳解

    RabbitMQ實現(xiàn)Work Queue工作隊列的示例詳解

    工作隊列(又稱任務隊列)的主要思想是避免立即執(zhí)行資源密集型任務,而不得不等待它完成。本篇文章將記錄和分享RabbitMQ工作隊列相關(guān)的知識點,希望對大家有所幫助
    2023-01-01
  • 淺談Java內(nèi)存模型之happens-before

    淺談Java內(nèi)存模型之happens-before

    于存在線程本地內(nèi)存和主內(nèi)存的原因,再加上重排序,會導致多線程環(huán)境下存在可見性的問題。那么我們正確使用同步、鎖的情況下,線程A修改了變量a何時對線程B可見?下面小編來簡單介紹下
    2019-05-05
  • 詳解idea從git上拉取maven項目詳細步驟

    詳解idea從git上拉取maven項目詳細步驟

    這篇文章主要介紹了詳解idea從git上拉取maven項目詳細步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • SpringBoot實現(xiàn)圖形驗證碼生成的方法

    SpringBoot實現(xiàn)圖形驗證碼生成的方法

    驗證碼可以有效防止其他人對某一個特定的注冊用戶用特定的程序暴力 破解方式進行不斷的登錄嘗試,斷的登錄嘗試
    我們其實很經(jīng)??吹?登錄一些網(wǎng)站其實是需要驗證碼的,本文給大家介紹了SpringBoot實現(xiàn)圖形驗證碼生成的方法,需要的朋友可以參考下
    2025-03-03
  • Java命名規(guī)則詳細總結(jié)

    Java命名規(guī)則詳細總結(jié)

    Class名應是首字母大寫的名詞。命名時應該使其簡潔而又具有描述性。異常類的命名,應以Exception結(jié)尾。Interface的命名規(guī)則與Class相同
    2013-10-10
  • java實現(xiàn)MD5加密的方法小結(jié)

    java實現(xiàn)MD5加密的方法小結(jié)

    這篇文章主要介紹了java實現(xiàn)MD5加密的方法,結(jié)合具體實例形式總結(jié)分析了java實現(xiàn)md5加密的常用操作技巧與使用方法,需要的朋友可以參考下
    2017-10-10
  • JDK動態(tài)代理的深入理解與實際應用

    JDK動態(tài)代理的深入理解與實際應用

    這篇文章主要介紹了JDK動態(tài)代理的深入理解與實際應用,在Java的世界里,JDK的動態(tài)代理是一項非常強大且實用的技術(shù),它為我們在運行時動態(tài)地創(chuàng)建代理類提供了可能,從而實現(xiàn)對目標對象方法調(diào)用的靈活攔截和增強,需要的朋友可以參考下
    2025-02-02
  • Springboot快速集成sse服務端推流(最新整理)

    Springboot快速集成sse服務端推流(最新整理)

    SSE?Server-Sent?Events是一種允許服務器向客戶端推送實時數(shù)據(jù)的技術(shù),它建立在?HTTP?和簡單文本格式之上,提供了一種輕量級的服務器推送方式,通常也被稱為“事件流”(Event?Stream),這篇文章主要介紹了Springboot快速集成sse服務端推流(最新整理),需要的朋友可以參考下
    2024-02-02

最新評論

五原县| 酉阳| 社会| 临潭县| 大关县| 五大连池市| 富宁县| 永济市| 兴国县| 巴南区| 康马县| 虞城县| 岳池县| 沐川县| 修文县| 高安市| 西城区| 南投市| 乌恰县| 油尖旺区| 邵东县| 桂平市| 冕宁县| 海宁市| 灌云县| 永年县| 哈巴河县| 都安| 漳浦县| 浑源县| 昆明市| 老河口市| 株洲市| 苏尼特右旗| 青田县| 墨脱县| 龙井市| 石柱| 抚松县| 丹江口市| 泸定县|