亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Spring配置多數據源切換

2024-07-14 08:43:29
字體:
來源:轉載
供稿:網友

多數據源切換

db.properties

#MySQLjdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/test?autoReconnect=true&characterEncoding=utf-8jdbc.username=rootjdbc.password=admin#定義初始連接數initialSize=0#定義最大連接數maxActive=1000#定義最大空閑maxIdle=20#定義最小空閑minIdle=1#定義最長等待時間maxWait=60000#MySQL# driverClassName 根據url自動識別 這一項可配可不配,如果不配置druid會根據url自動識別dbType,然后選擇相應的driverClassNamejdbc.driver1=com.mysql.jdbc.Driverjdbc.url1=jdbc:mysql://localhost:3306/test1?allowMultiQueries=true&autoReconnect=true&characterEncoding=utf-8jdbc.username1=rootjdbc.password1=admin# 初始化時建立物理連接的個數。初始化發生在顯示調用init方法,或者第一次getConnection時initialSize1=0# 最大連接池數量maxActive1=1000#定義最小空閑minIdle1=1# 獲取連接時最大等待時間,單位毫秒。配置了maxWait之后, # 缺省啟用公平鎖,并發效率會有所下降, # 如果需要可以通過配置useUnfairLock屬性為true使用非公平鎖。maxWait1=60000# druid 監控# 屬性類型是字符串,通過別名的方式配置擴展插件, # 常用的插件有: # 監控統計用的filter:stat # 日志用的filter:log4j # 防御sql注入的filter:wallfilters1=stat,log4j# 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒timeBetweenEvictionRunsMillis1=60000# 配置一個連接在池中最小生存的時間,單位是毫秒minEvictableIdleTimeMillis1=300000# 建議配置為true,不影響性能,并且保證安全性。 # 申請連接的時候檢測,如果空閑時間大于 # timeBetweenEvictionRunsMillis, # 執行validationQuery檢測連接是否有效。testWhileIdle1=true# 申請連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能。testOnBorrow1=false# 歸還連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能testOnReturn1=false# 是否緩存preparedStatement,也就是PSCache。# PSCache對支持游標的數據庫性能提升巨大,比如說oracle。 # 在mysql5.5以下的版本中沒有PSCache功能,建議關閉掉。# 作者在5.5版本中使用PSCache,通過監控界面發現PSCache有緩存命中率記錄, # 該應該是支持PSCache。poolPreparedStatements1=false# 要啟用PSCache,必須配置大于0,當大于0時, # poolPreparedStatements自動觸發修改為true。 # 在Druid中,不會存在Oracle下PSCache占用內存過多的問題, # 可以把這個數值配置大一些,比如說100maxOpenPreparedStatements1=-1

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:context="http://www.springframework.org/schema/context"  xmlns:tx="http://www.springframework.org/schema/tx"  xmlns:websocket="http://www.springframework.org/schema/websocket"  xsi:schemaLocation="    http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans.xsd    http://www.springframework.org/schema/context    http://www.springframework.org/schema/context/spring-context.xsd    http://www.springframework.org/schema/tx    http://www.springframework.org/schema/tx/spring-tx.xsd    http://www.springframework.org/schema/websocket    http://www.springframework.org/schema/websocket/spring-websocket.xsd">  <!-- spring使用注解 配置掃描  com.ys下的掃描 但是在springmvc里邊已經掃描一次了   這時就要加上屬性 use-default-filters="true"  這個屬性就是使用默認的掃描    默認就掃描com.ys下所有 設置為false 在下邊配置需要掃描的部分-->   <!-- 現在的配置就只會掃描帶@Service和@Repository注解的類 -->  <context:component-scan base-package="com" use-default-filters="false">  <!-- org.springframework.stereotype.Service就是注解@service 這個注解使用在service里 所以就是掃描service包   org.springframework.stereotype.Repository  Repository倉庫-->    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>    <context:include-filter type="annotation" expression="org.springframework.beans.factory.annotation.Autowired"/>    <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>    <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>  </context:component-scan>  <!-- 讀取properties文件 -->  <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">    <property name="locations">      <list>        <value>classpath:db.properties</value>      </list>    </property>  </bean>  <!-- 配置連接池數據源  文檔搜索BasicDataSource -->  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">    <!-- results in a setDriverClassName(String) call -->    <property name="driverClassName" value="${jdbc.driver}"/>    <property name="url" value="${jdbc.url}"/>    <property name="username" value="${jdbc.username}"/>    <property name="password" value="${jdbc.password}"/>    <!-- 初始化連接大小 -->    <property name="initialSize" value="${initialSize}"></property>    <!-- 連接池最大數量 -->    <property name="maxActive" value="${maxActive}"></property>    <!-- 連接池最大空閑 -->    <property name="maxIdle" value="${maxIdle}"></property>    <!-- 連接池最小空閑 -->    <property name="minIdle" value="${minIdle}"></property>    <!-- 獲取連接最大等待時間 -->    <property name="maxWait" value="${maxWait}"></property>  </bean>  <bean id="dataSource1" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">    <property name="url" value="${jdbc.url1}" />    <property name="username" value="${jdbc.username1}" />    <property name="password" value="${jdbc.password1}" />    <property name="driverClassName" value="${jdbc.driver1}" />    <!-- 初始化連接大小 -->    <property name="initialSize" value="${initialSize1}"/>    <!-- 最小空閑 -->    <property name="minIdle" value="${minIdle1}" />    <!-- 最大連接池數量 -->    <property name="maxActive" value="${maxActive1}" />    <!-- 獲取連接最大等待時間 -->    <property name="maxWait" value="${maxWait1}"/>    <!-- 監控統計用的filter:stat  日志用的filter:log4j 防御sql注入的filter:wall -->    <property name="filters" value="${filters1}" />    <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 -->    <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis1}" />    <!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->    <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis1}" />    <!-- 建議配置為true,不影響性能,并且保證安全性。 申請連接的時候檢測 -->    <property name="testWhileIdle" value="${testWhileIdle1}"/>    <!-- 申請連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能。 -->    <property name="testOnBorrow" value="${testOnBorrow1}"/>    <!-- 歸還連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能 -->    <property name="testOnReturn" value="false" />    <!-- 是否緩存preparedStatement,也就是PSCache 適用支持游標的數據庫 如Oracle -->    <property name="poolPreparedStatements" value="${poolPreparedStatements1}"/>    <!-- 要啟用PSCache,必須配置大于0,當大于0時 poolPreparedStatements自動觸發修改為true。 -->    <property name="maxOpenPreparedStatements" value="${maxOpenPreparedStatements1}"/>    <!-- 定義監控日志輸出間隔 -->    <property name="timeBetweenLogStatsMillis" value="60000"/>    <!--<property name="statLogger" ref ="statLoggerb"/> -->    <!-- 若需要mybatis的批量sql需配置   不配置則報錯:nested exception is java.sql.SQLException: sql injection violation, multi-statement not allow-->    <property name="proxyFilters" ref="wall-filter"/>  </bean>  <!-- 若需要mybatis的批量sql需配置 -->  <bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">     <property name="config" ref="wall-config" />   </bean>   <bean id="wall-config" class="com.alibaba.druid.wall.WallConfig">     <property name="multiStatementAllow" value="true" />   </bean>   <!-- 多數據源配置 -->  <bean id="multipleDataSource" class="com.ys.dbConfig.MultipleDataSource">    <!-- 默認數據源 -->    <property name="defaultTargetDataSource" ref="dataSource" />    <property name="targetDataSources">      <map key-type="java.lang.String">        <entry key="dataSource" value-ref="dataSource"/>        <entry key="dataSource1" value-ref="dataSource1"/>      </map>    </property>  </bean>  <!-- 配置 sqlSessionFactory -->  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">    <!-- 數據庫連接池 -->    <property name="dataSource" ref="multipleDataSource"/>    <property name="configLocation" value="classpath:mybatis.cfg.xml"/>    <!-- 加載Mybatis全局配置文件 -->    <property name="mapperLocations" value="classpath:com/ys/mapper/*.xml"/>  </bean>  <!-- 掃描的dao包(映射文件) 本身應該在mybatis里 現在交給spring -->  <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">    <property name="basePackage" value="com.ys.dao"/>  </bean><!-- 事務配置 -->    <!-- 配置事務管理 -->  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    <property name="dataSource" ref="multipleDataSource"></property>  </bean>  <!-- 開啟注解事務 引用transactionManager -->  <tx:annotation-driven transaction-manager="transactionManager"/></beans>

創建MultipleDataSource.java

package com.ys.dbConfig;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class MultipleDataSource extends AbstractRoutingDataSource{  @Override  protected Object determineCurrentLookupKey() {    return MultipleDataSourceHandler.getRouteKey();  }}

創建MultipleDataSourceHandler.java

package com.ys.dbConfig; /** *@ Title MultipleDataSourceHandler.java *@ description: 多數據源Handler*@ time 創建時間:2018年8月25日 上午10:52:12 **/public class MultipleDataSourceHandler {  private static ThreadLocal<String> routeKey = new ThreadLocal<String>();  /**   * @Title: getRouteKey    * @Description: 獲取當前線程的數據源路由的key   * @param @return   * @return String   * @date createTime:2018年8月27日上午10:34:52   */  public static String getRouteKey(){    return routeKey.get();  }  /**   * @Title: setRouteKey    * @Description: 綁定當前線程數據源路由的key 使用完成后必須調用removeRouteKey()方法刪除   * @param @param key   * @return void   * @date createTime:2018年8月27日上午10:35:03   */  public static void setRouteKey(String key){    routeKey.set(key);  }  /**   * @Title: removeRouteKey    * @Description: 刪除與當前線程綁定的數據源路由的key   * @return void   * @date createTime:2018年8月27日上午10:35:31   */  public static void removeRouteKey(){    routeKey.remove();  }}

切換數據源

MultipleDataSourceHandler.setRouteKey(“dataSource1”);

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产suv精品一区二区三区88区| 欧美日韩中文字幕综合视频| 2019中文字幕在线观看| 欧美亚洲免费电影| 国产精国产精品| 亚洲一区二区在线播放| 欧美国产一区二区三区| 亚洲人午夜色婷婷| 高清一区二区三区四区五区| 欧美日韩亚洲91| 亚洲美女在线视频| 日本不卡高字幕在线2019| 欧美亚洲另类在线| 日韩成人网免费视频| 亚洲欧洲激情在线| 高潮白浆女日韩av免费看| 久久久97精品| 日本午夜在线亚洲.国产| 国产欧美日韩中文字幕| 欧美体内谢she精2性欧美| 操人视频在线观看欧美| 成人黄色影片在线| 91中文字幕在线观看| 91九色精品视频| 亚洲国产古装精品网站| 欧美理论电影在线播放| 5566成人精品视频免费| 日韩美女视频免费在线观看| 日韩中文有码在线视频| 亚洲精品国产综合久久| 久久久免费电影| 国产精品永久免费在线| 亚洲伊人久久大香线蕉av| 欧美极品xxxx| 77777少妇光屁股久久一区| 久久久久久久久亚洲| 久久精品亚洲国产| 国产精品久久久久7777婷婷| 国产欧洲精品视频| 国产一区二区三区丝袜| 欧美区二区三区| 久久久最新网址| 91日本在线观看| 自拍偷拍免费精品| 欧美成人黑人xx视频免费观看| 国产精品美女无圣光视频| 欧美午夜片欧美片在线观看| 国产亚洲激情视频在线| 精品国产乱码久久久久久虫虫漫画| 中文字幕日韩免费视频| 在线播放亚洲激情| 欧美色视频日本高清在线观看| 亚洲影院污污.| 日韩欧美在线看| 欧美成人国产va精品日本一级| 91牛牛免费视频| 亚洲一区美女视频在线观看免费| 欧美大片免费观看| 在线国产精品播放| 色诱女教师一区二区三区| 亚洲电影免费在线观看| 日韩欧美精品中文字幕| 日韩在线视频观看正片免费网站| 中文字幕欧美精品日韩中文字幕| 亚洲最大在线视频| 久久久久一本一区二区青青蜜月| 91精品国产乱码久久久久久久久| 日本中文字幕成人| 91成人在线观看国产| 一本色道久久综合狠狠躁篇的优点| 日韩精品极品在线观看播放免费视频| 亚洲第一福利网| 欧美日韩午夜激情| 在线中文字幕日韩| 久久久精品999| 秋霞成人午夜鲁丝一区二区三区| 精品国产999| 欧美日韩第一视频| 欧美亚洲成人免费| 亚洲成人激情在线观看| 亚洲欧洲自拍偷拍| 欧美电影免费观看| 亚洲精品福利免费在线观看| 亚洲成人久久久| 91精品视频网站| 日韩av最新在线观看| 日韩中文在线中文网三级| 日韩在线观看你懂的| 欧美黑人一级爽快片淫片高清| 国产不卡一区二区在线播放| 日本亚洲欧美成人| 久久国产精品网站| 欧美做爰性生交视频| 欧美人与性动交a欧美精品| 国产日韩在线看片| 日韩成人激情影院| 91午夜在线播放| 97成人在线视频| 美女精品视频一区| 97超级碰碰人国产在线观看| 亚洲激情自拍图| 亚洲精品午夜精品| 亚洲国产精品推荐| 日韩精品免费电影| 亚洲国产高清福利视频| 亚洲人成电影网站色| 国产91色在线|免| 国产精品久久久久久婷婷天堂| 国产91免费观看| 亚州欧美日韩中文视频| 久久国产精品久久久| 2019中文字幕全在线观看| 午夜精品久久久久久久白皮肤| 中文字幕亚洲国产| 久久精品成人欧美大片古装| 日韩精品久久久久| 亚洲性生活视频在线观看| 久久久久亚洲精品成人网小说| 亚洲国产精品人人爽夜夜爽| 久操成人在线视频| 国产亚洲精品美女久久久久| 亚洲成人免费网站| 国产成人综合精品| 欧美色欧美亚洲高清在线视频| 欧美日韩黄色大片| 国产在线拍偷自揄拍精品| 亚洲国产三级网| 热久久这里只有| 在线观看免费高清视频97| 一区二区三区黄色| 国产精品va在线播放我和闺蜜| 国产精品激情自拍| 亚洲乱码一区av黑人高潮| 成人两性免费视频| 国产精品久久久久高潮| 久久久精品在线观看| 久久久久久久久久久久av| 国产精品中文字幕在线| 欧美激情2020午夜免费观看| 91欧美精品成人综合在线观看| 久久久久在线观看| 福利微拍一区二区| 成人欧美一区二区三区在线湿哒哒| 久久视频中文字幕| 久久精品男人天堂| 亚洲香蕉av在线一区二区三区| 欧美在线视频播放| 青青草原一区二区| 日韩女优人人人人射在线视频| 亚洲第一福利视频| 91精品国产高清久久久久久91| 国产区精品视频| 亚洲一级片在线看| 久久久噜久噜久久综合| 亚洲人成网站777色婷婷| 国产精品狼人色视频一区| 7m第一福利500精品视频| 亚洲国产欧美精品| 国产美女久久久| 国产色婷婷国产综合在线理论片a| 日本人成精品视频在线| 国产精品91免费在线| www.日韩.com| 色噜噜狠狠色综合网图区|