欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

spring boot動態(tài)切換數(shù)據(jù)源的實現(xiàn)

 更新時間:2021年01月14日 09:24:38   作者:歸來_仍是少年  
這篇文章主要介紹了spring boot動態(tài)切換數(shù)據(jù)源的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

當(dāng)數(shù)據(jù)量比較大的時候,我們就需要考慮讀寫分離了,也就是動態(tài)切換數(shù)據(jù)庫連接,對指定的數(shù)據(jù)庫進(jìn)行操作。在spring中實現(xiàn)動態(tài)的切換無非就是利用AOP實現(xiàn)。我們可以使用mybatis-plus作者開發(fā)的插件dynamic-datasource-spring-boot-starter。

demo地址:https://github.com/songshijun1995/spring-boot-dynamic-demo

新建項目引入依賴

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  <version>3.3.1</version>
</dependency>
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.4.1</version>
</dependency>

配置yml

server:
 port: 8081
 servlet:
  context-path: /

spring:
 application:
  name: spring-boot-dynamic-demo
 datasource:
  dynamic:
   primary: master #設(shè)置默認(rèn)的數(shù)據(jù)源或者數(shù)據(jù)源組,默認(rèn)值即為master
   strict: false #設(shè)置嚴(yán)格模式,默認(rèn)false不啟動. 啟動后在未匹配到指定數(shù)據(jù)源時候會拋出異常,不啟動則使用默認(rèn)數(shù)據(jù)源.
   datasource:
    master: #替換成自己的數(shù)據(jù)庫連接
     url: jdbc:mysql://127.0.0.1:3306/dynamic1?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowMultiQueries=true&rewriteBatchedStatements=true
     username: root
     password: 123456
     driver-class-name: com.mysql.cj.jdbc.Driver
    slave_1:
     url: jdbc:mysql://127.0.0.1:3306/dynamic2?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowMultiQueries=true&rewriteBatchedStatements=true
     username: root
     password: 123456
     driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
 configuration:
  log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
 global-config:
  db-config:
   logic-delete-value: 1
   logic-not-delete-value: 0
   logic-delete-field: deleted
 mapper-locations: classpath:/mapper/**.xml

logging:
 level:
  ROOT: INFO
  com.dynamic.dynamicdemo: DEBUG
 pattern:
  file: '%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{50} - %msg%n'
 file:
  name: ${logging.file.path}/${spring.application.name}.log
  path: /home/logs/${spring.application.name}
 logback:
  rollingpolicy:
   max-file-size: 10MB
   max-history: 30

mybatis-plus和swagger配置我就不多說了,demo里都有

如何使用

package com.dynamic.dynamicdemo.service.impl;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dynamic.dynamicdemo.dto.PageRequest;
import com.dynamic.dynamicdemo.dto.UserInfoRequest;
import com.dynamic.dynamicdemo.entities.BaseEntity;
import com.dynamic.dynamicdemo.entities.UserInfo;
import com.dynamic.dynamicdemo.mapper.UserInfoMapper;
import com.dynamic.dynamicdemo.service.UserInfoService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> implements UserInfoService {

  @DS("master")
  @Transactional(rollbackFor = Exception.class)
  @Override
  public String saveUser(UserInfoRequest request) {
    UserInfo userInfo = new UserInfo();
    BeanUtils.copyProperties(request, userInfo);
    boolean save = save(userInfo);
    if (!save) {
      throw new RuntimeException("添加用戶失敗");
    }
    return "添加用戶成功";
  }

  @DS("slave_1")
  @Override
  public IPage<UserInfo> pageUser(PageRequest request) {
    return page(new Page<>(request.getPageNum(), request.getPageSize()), Wrappers.<UserInfo>lambdaQuery().orderByDesc(BaseEntity::getCreateTime));
  }
}

在方法上或者類上加@DS("master")注解,來指定數(shù)據(jù)源

更換為自己的數(shù)據(jù)庫連接,以及建庫,運行resources/sql目錄下的sql文件
然后啟動項目訪問http://127.0.0.1:8081/doc.html進(jìn)行測試

到此這篇關(guān)于spring boot動態(tài)切換數(shù)據(jù)源的實現(xiàn)的文章就介紹到這了,更多相關(guān)spring boot動態(tài)切換數(shù)據(jù)源內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入理解Spring中的Lookup(方法注入)

    深入理解Spring中的Lookup(方法注入)

    “Lookup方法”可以使Spring替換一個bean原有的,獲取其它對象具體的方法,并自動返回在容器中的查找結(jié)果。下面這篇文章主要給大家介紹了關(guān)于Spring中Lookup(方法注入)的相關(guān)資料,需要的朋友可以參考下
    2018-05-05
  • javabean servlet jsp實現(xiàn)分頁功能代碼解析

    javabean servlet jsp實現(xiàn)分頁功能代碼解析

    這篇文章主要為大家詳細(xì)解析了javabean servlet jsp實現(xiàn)分頁功能代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • java 對象的序列化和反序列化詳細(xì)介紹

    java 對象的序列化和反序列化詳細(xì)介紹

    這篇文章主要介紹了java 對象的序列化和反序列化的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • 創(chuàng)建Spring Boot項目的幾種方式總結(jié)(推薦)

    創(chuàng)建Spring Boot項目的幾種方式總結(jié)(推薦)

    這篇文章主要介紹了創(chuàng)建Spring Boot項目的幾種方式總結(jié)(推薦),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 使用SpringBoot Actuator監(jiān)控應(yīng)用示例

    使用SpringBoot Actuator監(jiān)控應(yīng)用示例

    Actuator是Spring Boot提供的對應(yīng)用系統(tǒng)的自省和監(jiān)控的集成功能,可以對應(yīng)用系統(tǒng)進(jìn)行配置查看、相關(guān)功能統(tǒng)計等。這篇文章主要介紹了使用SpringBoot Actuator監(jiān)控應(yīng),有興趣的可以了解一下
    2018-05-05
  • Spring注解之@Conditional使用解析

    Spring注解之@Conditional使用解析

    這篇文章主要介紹了Spring注解之@Conditional使用解析,@Conditional注解可以說是SpringBoot的條件注解,表示組件只有在所有指定條件都匹配時才有資格注冊,條件是可以在 bean 定義注冊之前??以編程方式確定的任何狀態(tài),需要的朋友可以參考下
    2024-01-01
  • 詳解SpringBoot基礎(chǔ)之banner玩法解析

    詳解SpringBoot基礎(chǔ)之banner玩法解析

    SpringBoot項目啟動時會在控制臺打印一個默認(rèn)的啟動圖案,這個圖案就是我們要講的banner,這篇文章主要介紹了SpringBoot基礎(chǔ)之banner玩法解析,感興趣的小伙伴們可以參考一下
    2019-04-04
  • java面試常見問題之Hibernate總結(jié)

    java面試常見問題之Hibernate總結(jié)

    這篇文章主要介紹了在java面試過程中hibernate比較常見的問題,包括Hibernate的檢索方式,Hibernate中對象的狀態(tài),Hibernate的3種檢索策略是什么,Session的find()方法以及Query接口的區(qū)別等方面問題的總結(jié),需要的朋友可以參考下
    2015-07-07
  • Java實現(xiàn)郵件找回密碼功能

    Java實現(xiàn)郵件找回密碼功能

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)郵件找回密碼功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 詳解Java的堆內(nèi)存與棧內(nèi)存的存儲機(jī)制

    詳解Java的堆內(nèi)存與棧內(nèi)存的存儲機(jī)制

    這篇文章主要介紹了Java的堆內(nèi)存與棧內(nèi)存的存儲機(jī)制,包括JVM的內(nèi)存優(yōu)化和GC等相關(guān)方面內(nèi)容,需要的朋友可以參考下
    2016-01-01

最新評論