麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > 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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 毛片视频免费观看 | 九色一区二区 | 在线a亚洲视频播放在线观看 | 欧美久久久一区二区三区 | 久在线播放 | 国产精品白嫩白嫩大学美女 | 中文字幕欧美亚洲 | 免费看污视频在线观看 | 久久草草亚洲蜜桃臀 | 国产午夜精品一区二区三区免费 | 一区二区国产在线 | 在线视频1区 | 国产成人在线一区二区 | 成人做爰www免费看 欧美精品免费一区二区三区 | 国产精品hd免费观看 | 久久九九热re6这里有精品 | 羞羞视频免费观看网站 | 在线男人天堂 | 天天躁狠狠躁夜躁2020挡不住 | 一区二区久久精品66国产精品 | 国产精品久久久网站 | 欧美视频黄色 | 久久久资源网 | av免费在线观看av | 日韩黄在线 | 最近中文字幕一区二区 | 青青草成人免费视频在线 | av免费在线观看免费 | 美国av片在线观看 | 日本欧美一区二区三区视频麻豆 | 午夜视频国产 | 天堂福利电影 | 成人午夜在线免费 | 精品一区二区三区在线观看视频 | 久久久免费观看完整版 | av在线视 | 91成人免费在线观看 | 91 在线| 久久99亚洲精品久久99果 | 5xx免费看| 一二区成人影院电影网 |