溫馨提示×

溫馨提示×

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

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

Springboot 中如何使用dynamic-datasource實現(xiàn)解決多數(shù)據(jù)源問題

發(fā)布時間:2020-11-19 15:31:56 來源:億速云 閱讀:1623 作者:Leah 欄目:開發(fā)技術

本篇文章給大家分享的是有關Springboot 中如何使用dynamic-datasource實現(xiàn)解決多數(shù)據(jù)源問題,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

依賴

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  <version>2.5.0</version>
</dependency>
<dependency>
  <groupId>p6spy</groupId>
  <artifactId>p6spy</artifactId>
  <version>3.9.1</version>
</dependency>
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid-spring-boot-starter</artifactId>
  <version>1.1.21</version>
</dependency>
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.3.1.tmp</version>
</dependency>

p6spy配置文件spy.properties,有性能影響,生產(chǎn)環(huán)境建議關閉

#3.2.1以上使用
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory
#3.2.1以下使用或者不配置
#modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定義日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志輸出到控制臺
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系統(tǒng)記錄 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 設置 p6spy driver 代理
deregisterdrivers=true

# 取消JDBC URL前綴
useprefix=true
# 配置記錄 Log 例外,可去掉的結果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 實際驅(qū)動可多個
#driverlist=org.h3.Driver
# 是否開啟慢SQL記錄
outagedetection=true
# 慢SQL記錄標準 2 秒
outagedetectioninterval=5

配置文件application.yml

server:
 port: 8080

spring:
 datasource:
  dynamic:
   p6spy: true # 默認false,建議線上關閉。
   primary: master #設置默認的數(shù)據(jù)源或者數(shù)據(jù)源組,默認值即為master
   datasource:
    master:
     url: jdbc:mysql://localhost:3306/bdata&#63;serverTimezone=GMT%2B8&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=true&allowMultiQueries=true
     username: root
     password: root
     driver-class-name: com.mysql.cj.jdbc.Driver
    slave:
     url: jdbc:mysql://localhost:3306/lmkstudy&#63;serverTimezone=GMT%2B8&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=true&allowMultiQueries=true
     username: root
     password: root
     driver-class-name: com.mysql.cj.jdbc.Driver
     druid:
      password: root
      username: root
      # 初始化連接大小
      initial-size: 5
      #最大連接池數(shù)量
      max-active: 20
      # 最小連接池數(shù)量
      min-idle: 3
      # 配置獲取連接等待超時的時間 單位毫秒
      max-wait: 60000
      # 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒
      time-between-eviction-runs-millis: 60000
      # 配置一個連接在池中最小生存的時間,單位是毫秒
      min-evictable-idle-time-millis: 300000
      # 測試連接
      validation-query: select
      # 申請連接的時候檢測,建議配置為true,不影響性能,并且保證安全性
      test-while-idle: true
      # 獲取連接時執(zhí)行檢測,建議關閉,影響性能
      test-on-borrow: false
      # 歸還連接時執(zhí)行檢測,建議關閉,影響性能
      test-on-return: false
      # 打開PSCache,并且指定每個連接上PSCache的大小
      pool-prepared-statements: true
      #   配置監(jiān)控統(tǒng)計攔截器 防火墻 日志配置
      #   stat監(jiān)控數(shù)據(jù)庫性能
      #   wall 用于防火墻
      #   日志 slf4j logback
      #   log4j
      #   log4j2
      # 配置多個英文逗號分隔
      filters: stat,wall,slf4j

      max-pool-prepared-statement-per-connection-size: 20
      # 合并多個DruidDataSource的監(jiān)控數(shù)據(jù)
      use-global-data-source-stat: true
      # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄 SQL優(yōu)化
      connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
      # ===========監(jiān)控配置===========
      # WebStatFilter配置,說明請參考Druid Wiki,配置_配置WebStatFilter
      web-stat-filter:
       #是否啟用StatFilter默認值false
       enabled: true
       # 攔截所有的
       url-pattern: /*
       # 排除一些不必要的url,比如*:js,/jslib/*等等:
       exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico, /druid/*"
       # 關閉和開啟session 統(tǒng)計功能 默認關閉
       #    session-stat-enable: true
       # sessionStatMaxCount是1000個
       #    session-stat-max-count: 1000
       # 配置principalSessionName,使得druid能夠知道當前的session的用戶是誰
       #    principal-session-name:
       # StatViewServlet配置,說明請參考Druid Wiki,配置_StatViewServlet配置
      stat-view-servlet:
       # 是否啟用StatViewServlet默認值true
       enabled: true
       url-pattern: /druid/*
       # 界面上有一個重置功能 執(zhí)行這個操作之后,會導致所有計數(shù)器清零,重新計數(shù) 建議false
       reset-enable: false
       # 登錄的后臺的用戶名,密碼
       login-username: admin
       login-password: admin
mybatis-plus:
 type-aliases-package: com.site.datasource.entity
 mapper-locations: classpath*:mapper/*.xml

service層添加注解@DS(“slave”),選定數(shù)據(jù)源

@DS("slave")
@Service("userService")
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

}

啟動類上添加@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)

@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
public class ThreadApplication {

  public static void main(String[] args) {
    SpringApplication.run(ThreadApplication.class, args);
  }

}

遇到的坑:記得要去掉DruidConfig這個文件,不然會報錯

以上就是Springboot 中如何使用dynamic-datasource實現(xiàn)解決多數(shù)據(jù)源問題,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

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

AI