如何配置並獲取多個properties檔案源資訊
在搭配框架的時候,大多數時候都是需要配置多個properties檔案, 那麼這個時候,如何配置並獲取檔案裡的內容呢?
第一種方法:寫一個類,繼承PropertyPlaceholderConfigurer ,然後啟動的時候就載入:程式碼如下
package com.cmos.ngmttcontrol.util; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Decrypt the password to the properties file * */ public final class PropertyConfigurer extends org.springframework.beans.factory.config.PropertyPlaceholderConfigurer { private static final Pattern PATTERN = Pattern .compile("\\$\\{([^\\}]+)\\}"); private static Properties props=null; private static Map<String, String> map=new HashMap<String, String>(); //服務啟動時,該方法就會執行。 protected void loadProperties(Properties props) throws IOException { super.loadProperties(props); PropertyConfigurer.setProps(props); props.size(); if(props.size()>0){ String key = null; String value = null; for(Entry<Object, Object> entry: props.entrySet()){ key = (String) entry.getKey(); value = (String) entry.getValue(); if(key != null){ value = getdynamicValue(key); if(value != null){ map.put(key, value); } } } } try { /*String password = props.getProperty("password"); String decryPassword = new String(EncryptionUtil.decode( EncryptionUtil.hex2byte(password), "cmoscmos".getBytes())); props.setProperty("password", decryPassword);*/ } catch (Exception e) { logger.error("decode password in properties error!", e); } } /** * 當從屬性檔案properties中通過key取值時, * 要取的value中有變數時,必須使用該方法,才能獲取到正確的值。(如:變數${ip}) * * @param key * @return */ private static String getdynamicValue(String key) { String value = props.getProperty(key); if(value ==null){ return null; } Matcher matcher = PATTERN.matcher(value); StringBuffer buffer = new StringBuffer(); while (matcher.find()) { String matcherKey = matcher.group(1); String matchervalue = props.getProperty(matcherKey); if (matchervalue != null) { matcher.appendReplacement(buffer, matchervalue); } } matcher.appendTail(buffer); return buffer.toString(); } /** * * @param key * @return */ public static String get(String key) { if(map.size()>0 && key !=null){ return map.get(key); }else{ return null; } } public static Properties getProps() { return props; } public static void setProps(Properties props) { PropertyConfigurer.props = props; } }
這個程式碼寫好後,就需要在xml裡配置了
相關程式碼如下:
這樣寫的好處是: 這種擴充套件以後更靈活。 比如 properties中還有變數 ${} 這種是從 pom.xml 或者maven相關的變數讀取的話。 就必須自己擴充套件寫這個類了<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <bean class="com.cmos.ngmttcontrol.util.PropertyConfigurer"> <property name="order" value="1" /> <property name="ignoreUnresolvablePlaceholders" value="true" /> <property name="locations"> <list> <!--有新的properties檔案可以在這裡追加,然後通過PropertyConfigurer可以獲取值。--> <!-- <value>classpath:config/jdbc-${profiles.active}.properties</value>--> <!--<value>classpath:config/interfaceURL-${profiles.active}.properties</value>--> <value>${interfaceURL}</value> <value>classpath:config/system.properties</value> <value>classpath:config/rediskey.properties</value> </list> </property> </bean> </beans>
第二種寫法:
寫一個param載入的監聽器,需要實現 ServletContextListener介面
程式碼如下
package com.jmt.webapp.listener; import java.io.InputStream; import java.util.Properties; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; /** * @Description:param載入監聽器 * * @author ZZK * @ date 2017年3月28日 * title ParamLoadListener */ public class ParamLoadListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { Properties props=new Properties(); try{ InputStream in=getClass().getClassLoader().getResourceAsStream("param.properties");//先獲取輸入流 props.load(in);//載入流資訊 //把獲取到的資訊設定進去 sce.getServletContext().setAttribute("authInterval",props.getProperty("authInterval")); sce.getServletContext().setAttribute("host", props.getProperty("host")); sce.getServletContext().setAttribute("jghost", props.getProperty("jghost")); sce.getServletContext().setAttribute("authkey", props.getProperty("authkey")); sce.getServletContext().setAttribute("size", props.getProperty ("size")); sce.getServletContext().setAttribute("handler", props.getProperty ("handler")); sce.getServletContext().setAttribute("hostStarFace", props.getProperty ("hostStarFace")); sce.getServletContext().setAttribute("starFaceName", props.getProperty ("starFaceName")); sce.getServletContext().setAttribute("starFacePwd", props.getProperty ("starFacePwd")); }catch(Exception e){ e.printStackTrace(); } } @Override public void contextDestroyed(ServletContextEvent sce) { // TODO Auto-generated method stub } }
這裡面,需要先通過流的方式把param.properties讀出來
然後再載入資訊, 最後把屬性新增進去, 新增的資訊需要和properties裡的命對應。
這寫好後,就可以在web.xml裡配置監聽器了:
<!-- 過濾器配置 -->
<!-- param.properties的配置過濾器 -->
<listener>
<listener-class>com.jmt.webapp.listener.ParamLoadListener</listener-class>
</listener>
配置好以後,就可以重啟tomcat 然後調方法查看了
這樣就成功了,但是有一點不好的是:如果檔案裡的資訊多的話,需要配置的也多。
請大家根據自己的喜好,選擇運用哪種方式
相關推薦
如何配置並獲取多個properties檔案源資訊
在搭配框架的時候,大多數時候都是需要配置多個properties檔案, 那麼這個時候,如何配置並獲取檔案裡的內容呢? 第一種方法:寫一個類,繼承PropertyPlaceholderConfigurer ,然後啟動的時候就載入:程式碼如下 package com.cmos
Spring中配置和讀取多個Properties檔案--轉
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> &
spring配置加載多個properties文件
lac 存在 cnblogs org bsp 讀取 ace val cati (一)首先,我們要先在spring配置文件中。定義一個專門讀取properties文件的類.例: 1 <bean id="propertyConfigurer" class="org.sp
android——CMakeList配置之編譯多個.cpp檔案
上次提到AndroidStudio2.2進行NDK開發超方便的配置方式,不用進行Android.mk 配置,也不用進行Application.mk配置,只要配置CMakeList即可。那麼問題來了,通過該方式生成的配置檔案預設是隻native-lib.cpp一個cpp檔案的,那麼怎麼配置編譯多個.c
linux cp查詢並複製多個指定檔案到某個目錄
cat ~/RamDisk/filelist.txt | xargs -t -n1 -I{} cp {} ~/workspace/testdir/ srcfilelist.txt中儲存檔名列表(可以是\t或\n或空格等空白字元分隔),將這些檔案cp到~/workspac
CMakeList配置之編譯多個.cpp檔案
上次提到AndroidStudio2.2進行NDK開發超方便的配置方式,不用進行Android.mk 配置,也不用進行Application.mk配置,只要配置CMakeList即可。那麼問題來了,通過該方式生成的配置檔案預設是隻native-lib.cpp一個cpp檔案的
spring中載入多個.properties檔案的問題
spring中 context:property-placeholder 匯入多個獨立的 .properties配置檔案? Spring容器採用反射掃描的發現機制,在探測到Spring容器中有一個 org.springframework.beans.factory.co
jquery multiselect如何實現下拉框多選並獲取多個選項的值
今天做專案遇到了一個需要用多選框實現多選功能、並將多選框的值傳到後臺實現插入一張表的問題,最開始一直在想用複選框實現多選功能,後來發現做起來頁面不好看,最後在網上查資料,想找到一種方便使用的外掛,最後選擇了multiselect這個外掛。 首先簡單說下我要實
讀取多個Properties檔案
package net.hxtek.util; import java.io.IOException; /** * 讀取Properties檔案列舉類 * 2014-3-13 下午2:12:18 * */ public enum PropUtil { SMS("
spring引入多個properties檔案
在開發中常常把配置資訊放在properties檔案中,然後spring的xml中引入。如果在多個spring的xml檔案中引入properties <context:property-placeholder ignore-unresolvable="tru
KindEditor獲取多個textarea文本框的值並判斷非空
div 編輯器 fill star fontsize 取值 pop 獲取 sta kindeditor官網:http://kindeditor.net/demo.php 如何獲取多個KindEditor中textarea文本框的值,方式很多種(帶有HTML標簽)。
jmeter 正則獲取多個返回token至本地文件,並跨線程組調用
mage 表達 processor csv文件 參數 res 例如 通過 mark 1、打開jmeter,創建setup Thread Group對於setup Thread Group和tearDown Thread Group來說,從字面意思上來看就是安裝線程組和卸載線
JQuery 同時獲取多個標籤的指定內容並儲存為陣列
文章來自:原始碼線上https://www.shengli.me/jquery/271.html 此時的list1的陣列中 每個元素已經不是'li'物件,如此執行控制檯會報錯: &nbs
log4j.xml 中配置多個輸出檔案
現在的專案中,對於日誌的配置,我們有時候需要配置對應不同的輸出日誌檔案,例如按照模組劃分,按照功能劃分,分別輸出到不同的日誌檔案中,下面介紹一下,怎麼配置不同的輸出日誌檔案。 下面是一整塊的log4j.xml配置。如果對怎麼配置spring 和 log4j不瞭解的話,可以參
classpath:和classpath*:的區別以及web.xml中配置多個xml檔案
首先我們都知道要使用spring,則需要在web.xml中增加如下程式碼: Xml程式碼 <listener> <listener-class>org.springframework.web.context.ContextLoaderList
spring裡配置多個屬性檔案與@Value
1,專案在spring裡配置多個屬性檔案: <bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceho
shell指令碼-從ftp伺服器上下載多個zip檔案並解壓
zip格式檔案用unzip filename解壓 get 下載單個檔案 mget 下載多個檔案 #!/bin/sh FTP_IP=192.168.25.100 #FTP伺服器地址 F
MapReduce案例9——多個數字檔案的資料排序並新增序號(新增可並行方法)
題目:數字排序並加序號源資料: 2 32 654 32 15 756 65223 5956 22 650 92 26 54 6 最張結果: 1 2 2 6 3 15 4 22 5 26 6 32 7 32 8 54 9 92 10 650 11 654
spring boot 程式碼、註解配置獲取yml、properties檔案中的map即鍵值對
一、yml獲取自定義鍵值對 yml中的鍵值對 test: map: key1: value1 key2: value2 key3: value3 pom中的依賴配置 <dependency> <groupId>org.sprin
C# Directory.GetFiles()獲取多個型別格式的檔案
第一種方式 System.IO.Directory.GetFiles()獲取多個型別格式的檔案 System.IO.Directory.GetFiles("c:\","(*.exe|*.txt)"); 第二種方式 var files = Directory.GetFi