1. 程式人生 > 程式設計 >springboot的yml配置檔案通過db2的方式整合mysql的教程

springboot的yml配置檔案通過db2的方式整合mysql的教程

springboot整合MySQL很簡單,多資料來源就master,slave就行了,但是在整合DB2就需要另起一行,以下是同一個yml檔案
先配置MySQL,程式碼如下

spring:
 datasource:
  type: com.alibaba.druid.pool.DruidDataSource
  druid:
   # 主庫資料來源
   master:
    url: jdbc:mysql://localhost:3308/<資料庫名>?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    username: root
    password: 123456
   # 從庫資料來源
   slave:
    # 從資料來源開關/預設關閉
    enabled: true
    url: jdbc:mysql://localhost:3308/<資料庫名>?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    username: root
    password: 123456
   # 初始連線數
   initialSize: 5
   # 最小連線池數量
   minIdle: 10
   # 最大連線池數量
   maxActive: 20
   # 配置獲取連線等待超時的時間
   maxWait: 60000
   # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒
   timeBetweenEvictionRunsMillis: 60000
   # 配置一個連線在池中最小生存的時間,單位是毫秒
   minEvictableIdleTimeMillis: 300000
   # 配置一個連線在池中最大生存的時間,單位是毫秒
   maxEvictableIdleTimeMillis: 900000
   # 配置檢測連線是否有效
   validationQuery: SELECT 1 FROM DUAL
   testWhileIdle: true
   testOnBorrow: false
   testOnReturn: false
   webStatFilter: 
    enabled: true
   statViewServlet:
    enabled: true
    # 設定白名單,不填則允許所有訪問
    allow:
    url-pattern: /druid/*
    # 控制檯管理使用者名稱和密碼
    login-username: 
    login-password: 
   filter:
    stat:
     enabled: true
     # 慢SQL記錄
     log-slow-sql: true
     slow-sql-millis: 1000
     merge-sql: true
    wall:
     config:
      multi-statement-allow: true

接下來配置DB2

second:
 spring:
  datasource:
   type: com.alibaba.druid.pool.DruidDataSource
   driver-class-name: com.ibm.db2.jcc.DB2Driver
   url: jdbc:db2://<DB2的IP>:<埠>/<資料庫名>:currentSchema=<所要連線的schema名>;
   username: <使用者名稱>
   password: <密碼>
   # 初始連線數
   initialSize: 5
   # 最小連線池數量
   minIdle: 10
   # 最大連線池數量
   maxActive: 20
   # 配置獲取連線等待超時的時間
   maxWait: 60000
   # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒
   timeBetweenEvictionRunsMillis: 60000
   # 配置一個連線在池中最小生存的時間,單位是毫秒
   minEvictableIdleTimeMillis: 300000
   # 配置一個連線在池中最大生存的時間,單位是毫秒
   maxEvictableIdleTimeMillis: 900000
   # 配置檢測連線是否有效  注意這裡DUAL是檢測的表名,可以是當前schema下的任意一張表
   validationQuery: SELECT 1 FROM **<檢測表名>**
   testWhileIdle: true
   testOnBorrow: false
   testOnReturn: false
   webStatFilter:
    enabled: true
   statViewServlet:
    enabled: true
    # 設定白名單,不填則允許所有訪問
    allow:
    url-pattern: /druid/*
    # 控制檯管理使用者名稱和密碼
    login-username:
    login-password:
   filter:
    stat:
     enabled: true
     # 慢SQL記錄
     log-slow-sql: true
     slow-sql-millis: 1000
     merge-sql: true
    wall:
     config:
      multi-statement-allow: true

OK這樣就能通過Config獲取到了,下面是Config原始碼

package com.map.framework.config;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
import com.alibaba.druid.util.Utils;
import com.map.common.enums.DataSourceType;
import com.map.common.utils.spring.SpringUtils;
import com.map.framework.config.properties.DruidProperties;
import com.map.framework.datasource.DynamicDataSource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

/**
 * druid 配置多資料來源
 * 
 *
 */
@Configuration
public class DruidConfig
{

 @Bean
 @ConfigurationProperties("spring.datasource.druid.master")
 public DataSource masterDataSource(DruidProperties druidProperties)
 {
  DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
  return druidProperties.dataSource(dataSource);
 }

 @Bean
 @ConfigurationProperties("spring.datasource.druid.slave")
 @ConditionalOnProperty(prefix = "spring.datasource.druid.slave",name = "enabled",havingValue = "true")
 public DataSource slaveDataSource(DruidProperties druidProperties)
 {
  DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
  return druidProperties.dataSource(dataSource);
 }

 @Bean
 @ConfigurationProperties("second.spring.datasource")
 public DataSource db2DataSource(DruidProperties druidProperties)
 {
  DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
  return druidProperties.dataSource(dataSource);
 }

 @Bean(name = "dynamicDataSource")
 @Primary
 public DynamicDataSource dataSource(DataSource masterDataSource)
 {
  Map<Object,Object> targetDataSources = new HashMap<>();
  targetDataSources.put(DataSourceType.MASTER.name(),masterDataSource);
  setDataSource(targetDataSources,DataSourceType.SLAVE.name(),"slaveDataSource");
  setDataSource(targetDataSources,DataSourceType.DB2.name(),"db2DataSource");
  return new DynamicDataSource(masterDataSource,targetDataSources);
 }

 /**
  * 設定資料來源
  * 
  * @param targetDataSources 備選資料來源集合
  * @param sourceName 資料來源名稱
  * @param beanName bean名稱
  */
 public void setDataSource(Map<Object,Object> targetDataSources,String sourceName,String beanName)
 {
  try
  {
   DataSource dataSource = SpringUtils.getBean(beanName);
   targetDataSources.put(sourceName,dataSource);
  }
  catch (Exception e)
  {
  }
 }
}

這就是我整合MySQL和DB2時遇到的問題,記錄一下

總結

到此這篇關於springboot的yml配置檔案通過db2的方式整合mysql的教程的文章就介紹到這了,更多相關springboot yml配置檔案整合mysql內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!