日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jeesite1.X 集成多数据源

發布時間:2023/12/6 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jeesite1.X 集成多数据源 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

網上看了幾個例子,都是相同數據源的動態切換,如果不是同一種數據庫類型,分頁查詢就出問題。經過研究解決問題。

  • jeesite.properties配置多數數據源地址,這里以mysql5.7sqlserver2008版本為例子 #mysql database setting jdbc.type=mysql #jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/nkydsj?useUnicode=true&characterEncoding=utf-8 jdbc.username=root jdbc.password=111111 #mssql database settings #jdbc.type2=mssql jdbc.url2=jdbc:sqlserver://localhost:1433;DatabaseName=NXQiXiang jdbc.username2=sa jdbc.password2=111111 #pool settings jdbc.pool.init=1 jdbc.pool.minIdle=3 jdbc.pool.maxActive=20 #jdbc.testSql=SELECT 'x' jdbc.testSql=SELECT 'x' FROM DUAL jdbc.testSql2 = SELECT getdate()
  • ?創建動態數據源類 package com.thinkgem.jeesite.common.db;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class DynamicDataSource extends AbstractRoutingDataSource {private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();/*** @return the currentLookupKey* @author sa* @date 2012-5-18 下午4:06:44*/public static String getCurrentLookupKey() {return (String) contextHolder.get();}/*** @param currentLookupKey the currentLookupKey to set* @author sa* @date 2012-5-18 下午4:06:44*/public static void setCurrentLookupKey(String currentLookupKey) {contextHolder.set(currentLookupKey);}/** (non-Javadoc)** @see* org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource#* determineCurrentLookupKey()*/@Overrideprotected Object determineCurrentLookupKey() {return getCurrentLookupKey();}}

    ?

  • 修改spring-context.xml
    ?

    <!-- 數據源配置, 使用 BoneCP 數據庫連接池 --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <!-- 數據源驅動類可不寫,Druid默認會自動根據URL識別DriverClass --><!--<property name="driverClassName" value="${jdbc.driver}" />--><!--<property name="DbType" value="${jdbc.type}" />--><!-- 基本屬性 url、user、password --><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><!-- 配置初始化大小、最小、最大 --><property name="initialSize" value="${jdbc.pool.init}" /><property name="minIdle" value="${jdbc.pool.minIdle}" /> <property name="maxActive" value="${jdbc.pool.maxActive}" /><!-- 配置獲取連接等待超時的時間 --><property name="maxWait" value="60000" /><!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 --><property name="timeBetweenEvictionRunsMillis" value="60000" /><!-- 配置一個連接在池中最小生存的時間,單位是毫秒 --><property name="minEvictableIdleTimeMillis" value="300000" /><property name="validationQuery" value="${jdbc.testSql}" /><property name="testWhileIdle" value="true" /><property name="testOnBorrow" value="false" /><property name="testOnReturn" value="false" /><!-- 打開PSCache,并且指定每個連接上PSCache的大小(Oracle使用)<property name="poolPreparedStatements" value="true" /><property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> --><!-- 配置監控統計攔截的filters --><property name="filters" value="stat" /> </bean><!-- 第二個數據源配置, 使用 BoneCP 數據庫連接池 --><bean id="dataSource2" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"><!-- 數據源驅動類可不寫,Druid默認會自動根據URL識別DriverClass --><!--<property name="driverClassName" value="${jdbc.driver2}" />--><!-- 基本屬性 url、user、password --><property name="url" value="${jdbc.url2}" /><property name="username" value="${jdbc.username2}" /><property name="password" value="${jdbc.password2}" /><!--<property name="DbType" value="${jdbc.type2}" />--><!-- 配置初始化大小、最小、最大 --><property name="initialSize" value="${jdbc.pool.init}" /><property name="minIdle" value="${jdbc.pool.minIdle}" /><property name="maxActive" value="${jdbc.pool.maxActive}" /><!-- 配置獲取連接等待超時的時間 --><property name="maxWait" value="60000" /><!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 --><property name="timeBetweenEvictionRunsMillis" value="60000" /><!-- 配置一個連接在池中最小生存的時間,單位是毫秒 --><property name="minEvictableIdleTimeMillis" value="300000" /><property name="validationQuery" value="${jdbc.testSql2}" /><property name="testWhileIdle" value="true" /><property name="testOnBorrow" value="false" /><property name="testOnReturn" value="false" /><!-- 打開PSCache,并且指定每個連接上PSCache的大小(Oracle使用)<property name="poolPreparedStatements" value="true" /><property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> --><!-- 配置監控統計攔截的filters --><property name="filters" value="stat" /></bean><!-- 動態數據源 --><bean id="dynamicDataSource" class="com.thinkgem.jeesite.common.db.DynamicDataSource"><property name="defaultTargetDataSource" ref="dataSource"/><property name="targetDataSources"><map><entry key="mysql" value-ref="dataSource"/><entry key="sqlserver" value-ref="dataSource2"/></map></property></bean>

    ?

  • 創建方言動態切換類 com.thinkgem.jeesite.common.db.DbDialectFoactory,暫時只用sqlserver2008和mysql,所以只寫兩個
    ?

    package com.thinkgem.jeesite.common.db;import com.thinkgem.jeesite.common.persistence.dialect.Dialect; import com.thinkgem.jeesite.common.persistence.dialect.db.MySQLDialect; import com.thinkgem.jeesite.common.persistence.dialect.db.SQLServer2005Dialect;public class DbDialectFoactory {public static Dialect createDbDialect(String type) {if ("sqlserver".equals(type)) {return new SQLServer2005Dialect();}else{return new MySQLDialect();}} }

    ?

  • 修改框架自帶類 com.thinkgem.jeesite.common.persistence.interceptor.PaginationInterceptor
    67行添加如下兩行代碼,并修改原來的圓圈地方:

  • pom.xml 添加sqlserver2008驅動和依賴

    <dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>sqljdbc4</artifactId><version>4.0</version></dependency><!-- https://mvnrepository.com/artifact/com.github.jsqlparser/jsqlparser --><dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifactId><version>1.2</version></dependency>

    ?

  • mybatis sqlserver 分頁查詢sql,findlist方法

  • 動態調用方式:
    ?

    @RequestMapping(value = {"api/list", ""})@ResponseBodypublic ResponseEntity<?> list(WeatherCondition weatherCondition, HttpServletRequest request, HttpServletResponse response, Model model) {//切換數據源sqlserver,默認數據源mysqlDynamicDataSource.setCurrentLookupKey("sqlserver");Page<WeatherCondition> page = weatherConditionService.findPage(new Page<WeatherCondition>(request, response), weatherCondition);DynamicDataSource.setCurrentLookupKey("mysql");return new ResponseEntity(page, HttpStatus.OK);}

    ?

  • ?

    轉載于:https://my.oschina.net/matt0614/blog/2254180

    總結

    以上是生活随笔為你收集整理的jeesite1.X 集成多数据源的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。