1. 程式人生 > >修改配置檔案不用重啟tomcat

修改配置檔案不用重啟tomcat

專案需要頻繁更新配置檔案,每次改完需要先停tomcat,在重啟很麻煩~~~

今天抽個空研究了一下,發現很多人都遇到類似的問題,然後綜合了下各個網站的解決辦法,我整了一個demo出來了,廢話不多說先上圖:


說明:配置檔案第一次只有一個屬性,test;待執行完後又新增一個新屬性appId;

原始碼如下:

package conf;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;

import org.apache.log4j.Logger;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.support.PropertiesLoaderUtils;

/**
 * 動態載入配置檔案
 * @author iYjrg_xiebin
 * @date 2016年8月9日下午3:55:09
 */
public class SysProperties implements Runnable{

	private static Logger log = Logger.getLogger(SysProperties.class);  

	private Map<String,Long> configFileModifyDate = new HashMap<String, Long>();
	/**
	 * 系統配置檔案,包含系統classpath目錄下config*.properties中的內容,5秒鐘檢查一次,如果有變化自動重新載入。
	 */
	public static Map<String,String> SYSTEM_CONFIG = new ConcurrentHashMap<String,String>();

	//配置檔案路徑  
	private static String defaultPropFileName = "/resources";  


	/**
	 * 系統配置檔案監測,每5秒檢測一次,如果配置檔案有變化,則重新載入。
	 */
	@Override
	public void run() {
		int checkDely= 5*1000 ;		// 配置檔案自動檢查間隔;
		int beginDely = 60*1000;	// 1分鐘後執行配置檔案自動檢查功能。
		try {
			Thread.sleep(beginDely);		
			log.info("啟動 配置檔案檢查 執行緒,當前檢測頻率:"+checkDely);
		} catch (InterruptedException e1) {
			e1.printStackTrace();
		}
		while(true){
			try {
				this.loadAllConfigFiles();
			} catch (Exception e) {
				e.printStackTrace();
			}

			try {
				Thread.currentThread();
				Thread.sleep(checkDely);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

	}
	
	/**
	 * 檢查系統配置檔案,並更新全域性變數 。
	 * @throws Exception 
	 * @date 2012-8-31
	 */
	private void loadAllConfigFiles(){
		String tempPath = this.getClass().getResource(defaultPropFileName).getFile();  
		File fileDir = new File(tempPath);  

		fileDir.listFiles(new FileFilter() {
			@Override
			public boolean accept(File file) {
				try {
					String name = file.getName();
					String fullPath = file.getAbsolutePath();

					if(name.matches("^sys.*\\.properties$")){//properties
						Long value = configFileModifyDate.get(fullPath);
						if(value==null || value.longValue()!=file.lastModified()){
							log.info("載入配置檔案:"+file);
							loadPropertieFile(file);
							configFileModifyDate.put(fullPath,file.lastModified());
						}
					}
				} catch (Exception e) {
					e.printStackTrace();
				}

				return false;
			}
		});

	}

	/**
	 * 載入配置檔案到SYSTEM_CONFIG
	 * @date 2012-8-31
	 * @param configFile 系統配置檔案以 sys*.properties命名。
	 */
	private void loadPropertieFile(File configFile) {
		try {
			Properties properties = PropertiesLoaderUtils.loadProperties(new FileSystemResource(configFile));
			for(String key:properties.stringPropertyNames()){
				String value=properties.getProperty(key);

				log.info("load property:"+ key+"->"+value);
				SYSTEM_CONFIG.put(key,value);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		SysProperties sys = new SysProperties();
		sys.run();
	}

}

問題的核心在於:file.lastModified,如果當前map中儲存的時間戳跟本次載入的不一致,就重新load一把;

然後哦哦~

相關推薦

修改配置檔案不用tomcat

專案需要頻繁更新配置檔案,每次改完需要先停tomcat,在重啟很麻煩~~~ 今天抽個空研究了一下,發現很多人都遇到類似的問題,然後綜合了下各個網站的解決辦法,我整了一個demo出來了,廢話不多說先上圖: 說明:配置檔案第一次只有一個屬性,test;待執行完後又新增一個新屬

修改Java檔案不用Tomcat服務的方法

在tomcat的安裝目錄的conf檔案中找到server.xml這個檔案,在 <Host>結點裡面加上 <Context docBase="工程物理路徑" path="/工程名" reloadable="true" source="org.eclip

[JAVA]修改Java檔案不用Tomcat服務的方法

修改Java檔案不用重啟Tomcat服務的方法       在使用Eclipse+Tomcat開發Java專案的時候常常會碰到這樣的情況,已修改Java檔案Tomcat就會自動重啟,接下來就是漫長的等待服務重啟完畢。那其實大多數的Java檔案修改是沒有必要重啟服務的,只有一

eclipse mavenWeb專案真正實現熱部署(修改java程式碼和頁面檔案不用tomcat

        1.前言   先說熱部署的含義:   熱部署原來被定義為:tomcat啟動後,如果你往webapps目錄下,新增新的專案,tomcat會實現自動將其釋出的功能,這時,就叫做熱部署。   網上所實現的熱部署

windows設定開機啟動指令碼修改配置檔案服務

有一臺動態ip的測試機器,上面部署Nginx,然後每次重啟機器後ip總會變動,需要改nginx.conf配置檔案和重啟nginx服務。 所以要解決這個問題,想到的解決方法: 1、python指令碼來

Java中Web程式修改配置檔案伺服器的方法

1. 配置tomcat伺服器:修改tomcat的部署配置為:從不自動釋出,禁用Web模組的自動從新裝入為:禁用 2. 在tomcat執行配置上新增vm引數:-noverify -javaagent:D:\RUNTIME\jrebel\jrebel.jar -Dmyproject.root=D:/pro

IDEA修改java檔案不用Tomcat服務便可自動更新

一、問題使用IDEA開發Java時,修改java檔案後,需要重啟tomcat,程式碼方生效,重啟tomcat耗時較長,嚴重影響開發效率。二、解決1、配置tomcat時,on 'update' action和on frame deactivation選項都選擇 update c

不用Tomcat服務實現修改Java檔案後自動部署

可以修改類不用重啟Tomcat載入整個專案(手工啟動) 1.配置reloadable=true(自動過載) 2.使用Debug模式,前提是僅限於區域性修改。(修改類不用重啟--熱載入) 在使用Eclipse+Tomcat開發Java專案的時候常常會碰到這樣的情況,已修改Ja

為什麼修改jsp不用tomcat,而修改servlet要tomcat

servlet和jsp本質都是servlet,執行時都是執行.class檔案。但是它們的部署方式不一樣。   servlet是先編譯後部署,修改完以後,MyEclipse進行編譯,然後部署.class檔案到servlet容器中。如果web伺服器已啟動,則之前class已被servl

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

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

maven專案 修改properties屬性檔案不用

1.專案中經常變化的值, 比如 圖片伺服器路徑啊‘第三方的路徑’,都需要放到 屬性檔案裡, 怎樣才能不用重啟 修改 屬性檔案呢, public static String getPropertiesValue(String name, String key) {     

用jrebel實現 jvm熱部署,修改不用tomcat

我們用eclipse開發時經常遇到一個麻煩的問題是修改類檔案後需重啟tomcat才能生效,即使使用一些tomcat外掛,有時修改了方法名或添加了類,也需要重啟。使用獲得jolt大獎的作品jrebel,就能輕鬆實現 jvm熱部署,無論任何情況修改類都不用重啟tomcat 首先

MyEclipse中web開發修改檔案配置檔案伺服器的方法

在java web實際開發中我們在修改配置檔案與java程式碼時往往會重新部署或者重新啟動tomcat伺服器,為了提高開發效率,現總結以下方法以在網路共享(高手莫看)  一 、修改struts2配置檔案不用重啟方法 方法1:  在src目錄下新建一個檔案struts.pro

groovy修改代碼不用通過監聽記錄改變時間重新加載

.com 寫法 ges java代碼 好的 jpg 一個 png blog groovy是一個跟java 很像的腳本語言,基於jvm,寫法比java隨意一點可以跟java代碼很好的集合,如果項目中有用到規則可以在控制層使用groovy編寫代碼,調用規則。 在spring-m

Eclipse下設定tomcat,修改Java程式碼不必tomcat

以前一直都是使用MyEclipse,在新公司原來專案比較大,使用MyEclipse無論是啟動還是在編碼過程中都非常慢,優化了也是。所以換了Eclipse,速度雖然提高了,但是有點非常不友好,就是不管我怎麼修改Java程式碼,哪怕只有僅僅一行程式碼都需要重新啟動,才能使修改程式碼生效,而這點MyEcl

前端熱部署(更改前端程式碼,不用tomcat,重新整理瀏覽器就可以)

注:如果使用Springboot可以是一個devtool實現熱部署 主要在於 On frame deactivation選項配置選擇為 Update classes and resourses(當且僅當在Deployment配置頁,對應的目的war形式配置為exploded

IntelliJ IDEA - 熱部署(更新HTML/JSP/JS/CSS程式碼、不用Tomcat

前言 前端熱部署(更改前端程式碼,不用重啟tomcat,重新整理瀏覽器就可以)。   步驟 Ps:主要在於 On frame deactivation 選項配置選擇為 Update classes and resourses (當且僅當在Deployment配置頁

Eclipse下的maven工程自動熱部署方案(不用編譯,不用tomcat

今天接了一個小小的web工程專案,就基於eclipse+maven的開發環境搭建了一個javaweb專案。結果在開發的過程中無比痛苦:修改程式碼-重新構建-重啟tomcat-修改程式碼-重新構建-重啟tomcat。。。。簡直不能再浪費時間了,於是在網上搜了搜怎麼去實現mav

IntelliJ IDEA 在使用manven後的糾結(每次修改程式碼都要tomcat才能看效果嗎?),請各位大俠來看看問題

在加入manven後每次都要從其tomcat 或者重新package才能看到修改的效果這樣對於程式原來說很瘋狂,反正我是快瘋了,都不想用manven了 。 直接上圖: 上圖為沒用manven之前的專案 project Structure的配置也在,每次直接編譯 在tomca

解決jsp上傳檔案tomcat後文件和資料夾自動刪除

吼吼,我遇到的問題是這樣的...... 我寫了一個圖片上傳的方法,上傳時,判斷沒有這個目錄就自動建立一個。 然後開始上傳圖片,能成功,能在伺服器找到資料夾和相應的檔案。但是,重啟專案,或者清理快取之後,圖片和資料夾就會自動被刪除,不見了。 先說解決辦法吧,後面在分析: 1