jeesite1.X 集成多數據源

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

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

  1. 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()
  2. ?創建動態數據源類
    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();}}
    

    ?

  3. 修改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>

    ?

  4. 創建方言動態切換類 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();}}
    }
    

    ?

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

  6. 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>

    ?

  7. mybatis sqlserver 分頁查詢sql,findlist方法
    1f40ca5cecaf8f2c67bda0c0ef2778f35e9.jpg

  8. 動態調用方式:
    ?

    @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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281776.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281776.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281776.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

k8s HPA(HorizontalPodAutoscaler)-自動水平伸縮

Horizontal Pod Autoscaling in Kubernetes寫在前面我們平時部署web服務&#xff0c;當服務壓力大撐不住的時候&#xff0c;我們會加機器(加錢)&#xff1b;一般沒有上容器編排是手動加的&#xff0c;臨時加的機器&#xff0c;臨時部署的服務還要改Nginx的配置&#xff0c;最后…

jQuery 基金會和 Dojo 基金會合并:Open Web

統一基金會&#xff0c;服務開發人員&#xff0c;推動開放 Web 技術發展jQuery 基金會和 Dojo 基金會今天宣布計劃聯合&#xff0c;旨在建立最大&#xff0c;最多樣化和最全面的基金會&#xff0c;通過服務開發者&#xff0c;他們的項目&#xff0c;他們的社區來構建開放的 Web…

spark java 邏輯回歸_邏輯回歸分類技術分享,使用Java和Spark區分垃圾郵件

原標題&#xff1a;邏輯回歸分類技術分享&#xff0c;使用Java和Spark區分垃圾郵件由于最近的工作原因&#xff0c;小鳥很久沒給大家分享技術了。今天小鳥就給大家介紹一種比較火的機器學習算法&#xff0c;邏輯回歸分類算法。回歸是一種監督式學習的方式&#xff0c;與分類類似…

jQuery.extend()方法

定義和用法jQuery.extend()函數用于將一個或多個對象的內容合并到目標對象。 注意&#xff1a; 1. 如果只為$.extend()指定了一個參數&#xff0c;則意味著參數target被省略。此時&#xff0c;target就是jQuery對象本身。通過這種方式&#xff0c;我們可以為全局對象jQuery添加…

1066. 圖像過濾(15)

原題: https://www.patest.cn/contests/pat-b-practise/1066 思路: 開胃小菜 實現: #include <stdio.h>int main (void) {int m;int n;int a;int b;int c;char ch;int tmp;int i;int j;scanf("%d %d %d %d %d", &m, &n, &a, &b, &c);// 題…

Wget用法、參數解釋的比較好的一個文章

一個語句就可以下載cvpr2016的全部論文&#xff1a; wget -c -N --no-clobber --convert-links --random-wait -r -p -E -e robotsoff -U mozilla http://www.cv-foundation.org/openaccess/CVPR2016.py 其中&#xff0c;-c表示斷點續傳&#xff1b;-N表示已經下載的內容不再重…

.NET VS智能提示漢化 (.Net6)

先上現成的.net6漢化文件&#xff0c;可以手動下載后參照 [如何為 .NET 安裝本地化的 IntelliSense 文件 ](https://learn.microsoft.com/zh-cn/dotnet/core/install/localized-intellisense)進行安裝。或者使用后文的工具進行自動安裝。無對照英文在前中文在前漢化內容來自 官…

go 返回mysql數組_Go基礎之--操作Mysql(一)

關于標準庫database/sqldatabase/sql是golang的標準庫之一&#xff0c;它提供了一系列接口方法&#xff0c;用于訪問關系數據庫。它并不會提供數據庫特有的方法&#xff0c;那些特有的方法交給數據庫驅動去實現。database/sql庫提供了一些type。這些類型對掌握它的用法非常重要…

Vue CLI 3開發中屏蔽煩人的EsLint錯誤

問題 Vue開發中&#xff0c;特別是當你閱讀分析別人的其中早期版本的Vue代碼時往往會遭遇到滿屏幕的煩人的EsLint錯誤。有關EsLint這個工具的作用不再贅述。查閱網上參考文檔&#xff0c;大多是針對早起版本Vue CLI工具項目的&#xff0c;在我最新使用的Vue CLI 3生成的工程中根…

pyinstaller---將py文件打包成exe

pyinstaller可將Python腳本打包成可執行程序&#xff0c;使在沒有Python環境的機器上運行。 1.pyinstaller在windows下的安裝 直接在命令行用pip安裝 pyinstaller&#xff0c; 在windows下&#xff0c;pyinstaller需要PyWin32的支持。當用pip安裝pyinstaller時未找到PyWin32&am…

老人尋求到一名程序員,用2W行代碼給自己打造了一幅肖像畫

今天翻墻看了下國外的論壇&#xff0c;看到了一位版主給一位老人描繪肖像畫的文章&#xff0c;不得不說這位大佬是真的厲害&#xff0c;近20000行代碼&#xff0c;而且還畫的很像&#xff0c;像小編我這種手殘黨&#xff0c;用筆也不能畫出來&#xff0c;不得不服&#xff0c;今…

一題多解,ASP.NET Core應用啟動初始化的N種方案[下篇]

[接上篇]“天下大勢&#xff0c;分久必合&#xff0c;合久必分”&#xff0c;ASP.NET應用通過GenericWebHostService這個承載服務被整合到基于IHostBuilder/IHost的服務承載系統中之后&#xff0c;也許微軟還是意識到Web應用和后臺服務的承載方式還是應該加以區分&#xff0c;于…

java jpa 模糊查詢_JPA 以SQL實現分頁不模糊查詢(參數可能為空)

repository代碼:package com.fancy.miniflow.repository;import java.util.List;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.jpa.repository.JpaSpecificationExecutor;import org.springframework.data.jpa.repository.Q…

GitHub服務中斷24小時11分鐘事故分析報告\n

上周&#xff0c;GitHub經歷了一次事故&#xff0c;導致服務降級24小時11分鐘。雖然平臺的某些部分不受事故影響&#xff0c;但仍然有多個內部系統受到了影響&#xff0c;向用戶顯示了過時且不一致的內容。所幸沒有用戶數據丟失&#xff0c;但針對幾秒鐘數據庫寫入的手動調整工…

8 旋轉數組的最小數字

輸入一個遞增排序數組的一個旋轉&#xff0c;輸出旋轉數組的最小元素例如1,2,3,4,5的一個旋轉可以為3,4,5,1,2把一個數組的最開始若干個元素搬到數組的末尾&#xff0c;稱之為數組的旋轉 輸出旋轉數組的最小元素 C: 1 class Solution {2 public:3 int minInOrder(vector<…

軟考新思維--2017年上半年信息系統項目管理師上午試題分析與答案(試題6-10題)...

2017年上半年信息系統項目管理師上午試題分析與答案&#xff08;試題1-5題&#xff09; 6.&#xff08;&#xff09;不是獲取需求的方法。A、問卷調查B、會議討論C、獲取原型D、決策分析【軟考新思維】需求是獲取的得來的&#xff0c;不是決策得來的。 先是獲取需求&#xff0c…

php 合并 字符串_PHP如何去重合并字符串

本篇文章主要給大家介紹PHP如何去重合并字符串。推薦教程&#xff1a;《PHP教程》對于PHP學習者來說&#xff0c;合并多個字符串&#xff0c;應該并不是很難。但是如果這多個字符串中&#xff0c;有相同元素&#xff0c;當我們想要合并他們并且要使其值具有唯一值。也就是說合并…

10.31T4 HAOI2010最長公共子序列 計數+容斥原理

2775 -- 【HAOI2010】最長公共子序列 Description 字符序列的子序列是指從給定字符序列中隨意地&#xff08;不一定連續&#xff09;去掉若干個字符&#xff08;可能一個也不去掉&#xff09;后所形成的字符序列。令給定的字符序列X“x0&#xff0c;x1&#xff0c;…&#xff0…

軟概(lesson 2):課堂測試

一、測試題目 二、完成過程 1.設計思想 ①連接mysql數據庫 ②設計user類&#xff0c;增加參數 ③設計add類&#xff0c;向數據庫內增加內容 ④設計addInput頁面&#xff0c;完成錄入操作 ⑤設計add頁面&#xff0c;接收錄入的參數&#xff0c;并調用add類函數 2.源代碼 user.ja…

谷歌Gboard輸入法新增“無痕模式”:僅在Chrome隱身窗口中適用

據外媒Android Police報道&#xff0c;如大家所知道的&#xff0c;Chrome瀏覽器中的“隱身模式”是為了防止你的私密瀏覽記錄被其他人看到&#xff0c;但是&#xff0c;在這種模式下&#xff0c;你的輸入法鍵盤依然會記住你輸入的短語&#xff0c;為了阻止你的鍵盤在Chrome隱身…