亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

Spring Boot 整合mybatis 使用多數據源的實現方法

發布時間:2020-08-21 19:53:48 來源:腳本之家 閱讀:241 作者:互扯程序 欄目:編程語言

前言

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

整合

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

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

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

Spring Boot 整合mybatis 使用多數據源的實現方法 

單庫配置:

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

如果在application.yml或application.property中指定了spring.datasource.*的相關配置參數,Spring Boot就會使用該配置創建一個DataSource。

然后會自動創建使用該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

更多參數請查看DataSourceProperties

多庫配置:

由于業務需要,項目要同時使用多個數據庫進行業務開發:

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

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

直接上代碼,我的做法是將兩個數據源用兩個配置類創建:

@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 //該注解表示在同一個接口有多個實現類可以注入的時候,默認選擇哪一個,而不是讓autowire注解報錯,官網要求當多個數據源時,必須指定一個datasource,另一個datasource則不用添加。

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

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

user代碼結構如下:

Spring Boot 整合mybatis 使用多數據源的實現方法 

總結

以上所述是小編給大家介紹的Spring Boot 整合mybatis 使用多數據源的實現方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

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

AI

利津县| 苍溪县| 辽宁省| 睢宁县| 嘉祥县| 遂昌县| 龙川县| 江西省| 祁门县| 克什克腾旗| 闸北区| 铁岭县| 彩票| 陆良县| 新蔡县| 泰安市| 永登县| 建水县| 长宁区| 平乐县| 报价| 虎林市| 马山县| 股票| 涿鹿县| 泰来县| 津市市| 剑阁县| 化州市| 华蓥市| 云南省| 古浪县| 镇原县| 丘北县| 衡阳市| 二连浩特市| 南召县| 丹东市| 礼泉县| 珲春市| 武强县|