1. 程式人生 > >動態修改JDBC資料來源配置

動態修改JDBC資料來源配置

因專案需要能動態修改資料來源的配置,及修改後不用重啟整個應用。使用的資料來源是apache的BasicDataSource,網上千篇一律的是如下實現:

BasicDataSource bds=getDataSource();
  try{
   bds.close();

  }
  catch(Exception e){
   e.printStackTrace();
  }
  bds.setUsername("sa");
  bds.setPassword("admin");

還說要先關閉,再修改配置才能生效。

這樣的程式碼根本就實現不了所說的功能,直接執行出錯。連線池關閉後,就無法使用了。本身也沒有open,reopen之類的方法。

也有說C3P0支援熱修改,但本身好像有bug,容易出錯死鎖錯誤。也就沒有去研究到底支援不。

BasicDataSource 的close方法其實只設置了一個標識變數:closed,標記為關閉就取不到連線,要是能修改該標識為非關閉,就可以繼續使用了。

所以實現的思路是:先關閉,再修改配置,再開啟標識。問題是BasicDataSource並沒有這樣的介面提供出來,幸運的是,BasicDataSource中的

closed屬性是protected,也就是我們可以在子類中訪問到這個屬性,也就可以進行修改了。

所以只要自定義一個類繼承於BasicDataSource,提供如下方法即可:

public void open(){


  this.closed=false;
 }

當然配置檔案中使用的資料來源的類名就需要改為這個自定義類了。

相關推薦

動態修改JDBC資料來源配置

因專案需要能動態修改資料來源的配置,及修改後不用重啟整個應用。使用的資料來源是apache的BasicDataSource,網上千篇一律的是如下實現: BasicDataSource bds=getDataSource();  try{   bds.close();  

如何動態修改ObjectDataSource資料來源的查詢引數

最近在使用LINQ過程中,經常和ObjectDataSource打交道。有時需要動態改變一個ObjectDataSource的查詢方法或者查詢引數。 例如:我的產品庫存可以根據產品型別的下拉列表過濾,也可以根據產品編碼直接查詢。 查詢方法:GetInventoryView

如何做到在webpack打包vue項目後,在外部動態修改配置文件

打包 測試 contex 我們 pro nbsp assets bpa gen 在我們做完vue項目後,只需要執行 npm run dist 就可以輕松進行打包轉測試,可是如果我們臨時需要修改一些配置文件比如域名,這時候我們就有點懵逼了,那就修改了再重新打一次包? NO N

Flume NG原始碼分析(二)支援執行時動態修改配置配置模組

在上一篇中講了Flume NG配置模組基本的介面的類,PropertiesConfigurationProvider提供了基於properties配置檔案的靜態配置的能力,這篇細說一下PollingPropertiesFileConfigurationProvider提供的執行時動態修改配置並生效的

spring boot的Jdbc資料來源配置實戰

一 新建依賴 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sprin

mvn spring-boot:run動態修改配置

背景 配置檔案application.properties有一個配置項server.port=8081,如果專案根目錄下執行命令 mvn spring-boot:run 會啟動8081埠web應用 問題 如果要動態修改成8081,怎麼通過mvn spring-boot:r

springboot+ssm+mysql 讀寫分離+動態修改資料來源

一.我們最開始先實現讀寫分離(其實和多資料來源差不多,只是多資料來源的定義更加廣泛,讀寫分離只是其中的一個應用而已) 這裡就不怎麼探討mysql的主從的一個原理了,我直接貼出一個部落格,可以去看看,大致瞭解一下mysql主從。 我學東西喜歡先跑一次,如果成功了,我就再深入研究了,其實大體的邏

PHP通過正則表示式動態修改配置檔案

一、相關的知識點 正表示式 preg_match_all – 進行全域性正則表示式匹配 preg_replace – 執行正則表示式的搜尋和替換 檔案的讀和寫 file_get_contents()–檔案讀取資訊函式 file_put_con

springboot+mybatis多資料來源配置,AOP註解動態切換資料來源

轉載至:https://blog.csdn.net/xiaosheng_papa/article/details/80218006 親測有效。 注:有些系統中已經配置了單資料來源,現在要轉成多資料來源,可能需要額外的配置。拿我自己當前專案來說: 專案在啟動類中配置了單資料來源:

spring cloud 雙資料來源配置,兩種方式jdbc和mybatis(jdbcTemplate和 sqlsessionTemplate)及需要注意的問題

一、jdbcTemplate:jdbc application.yml檔案:     spring:       application:       

thinkphp配置檔案動態修改

話不多說直接貼方法 protected function update_config($new_config, $config_file = '') { !is_file($config_file) && $config_file = CONF_PATH . '

idea配置熱載入,開發不用重啟tomcat,tomcat配置熱載入,釋出專案不用重啟tomcat,在自己專案的context配置jdbc資料來源

在conf/server.xml裡面的Host加入Context節點,設定以下屬性 path="/project_name" docBase="project_name" debug="1" reloadable="true"> 然後在Context節點加入以下子節點 <Watche

jdbc Template多資料來源配置(Spring boot 實現)

由於JdbcTemplate 的bean主要依賴項為一個DataSource 物件, 所以,可以在建立的dataSource 物件時進行自定義,並注入到對應的JdbcTemplate 中 ,實現多資

C# 基礎(十三)C# XML配置檔案、ini配置檔案的建立、讀寫:動態修改IP

一、簡介 傳統的配置檔案ini已有被xml檔案逐步代替的趨勢,這裡主要討論XML配置檔案。 二、ini網址 https://www.cnblogs.com/cncc/p/3415694.html(重點) https://www.cnblogs.com/xmy-007/p/640022

動態修改logback配置的三種方法

方案一 :通過jsconsole動態修改日誌級別   1.logback.xml configuration 標籤裡面 新增<jmxConfigurator />   <configuration >    

spring動態資料來源配置以及以及利用AOP自動設定

這個問題其實網上有很多的解決辦法。但是我在借鑑的時候,還是碰到了很多問題,有很多地方不明白。最後經過綜合參考幾篇博文,自己測試實驗,終於把問題解決了。在這裡記錄下來,避免以後我或者大家再遇到這樣的問題。 我主要參考的文章有: 1、Spring(AbstractRouting

springboot用yml配置jdbc資料來源

  要讓那些黃色配置生效,要自己寫一個配置類。   https://blog.csdn.net/justlpf/article/details/80728529詳細解釋   程式碼: application.yml:

Inno setup自定義視窗動態修改配置引數

目標:靜默安裝軟體,動態配置引數 初次使用inno setup ,完全不瞭解pascal語言,網上找了很多資料,很多也很零散,總結整理下,方便大家使用 第一步:按引導建立指令碼,這部分就不描述了 ; Script generated by the Inno Setup Sc

Android Studio Gradle 多渠道自動打包,動態修改HostUrl,簽名apk,混淆配置詳解

  文/ skay 最近遇到專案從Eclispe遷移到Android studio,以前的Ant自動打包指令碼已經相容不好了,所以用了Gradle實現打渠道包,切換環境等, Ant打包指令碼 <target name="-release-sign"

SpringBoot進行MySql動態資料來源配置實現讀寫分離(連線池Druid)

1.簡介 前面使用C3P0連線池進行過資料庫的讀寫分離的實驗,今天換一下資料庫連線池改造一下,原理還是和原來的一樣。 Druid是阿里出品,淘寶和支付寶專用資料庫連線池,但它不僅僅是一個數據庫連線池,它還包含一個ProxyDriver,一系列內建的JDBC元