關於配置的那一點點事。

來源:互聯網
上載者:User

如果你一直在做架構。你設計的架構一定是可配置的,包括那些資料庫的配置,當然,還有其它。

一個靈活的程式肯定會有各種各樣的配置,具體使用方式也各不相同。本文講解的是純java設定檔的載入,沒有使用任何ssh之類的東東。畢竟架構這樣的東東學不長的,基礎打好,對人生日後的發展都有好處。

最常見的可能有SQL,XML,Property檔案以及Java常量類。

對於一些常用的變數,使用Java常量類可能是最好的選擇了。直接用,快速隨手可取。用於多處常用的地方是個不錯的選擇。

SQL用於驗證那些登入,MD5等需要驗證以及和某些功能模組相連的資料,放在一起讀取,是常用的手法之一。

最後XML,Property兩種檔案常用於配置一些資料庫連接,緩衝,國際化等,而Property就是我要講的重點。

至於XML由於讀取可能稍微複雜,具體可看我的另一篇檔案。專門講解如何使用Dom4j/JDom+Xpath讀取XML的博文。XML還有另一個用途,和JSON一樣。用來傳遞資料也是不錯的選擇。

現在我在這裡講解,如何使用Java靜態常量類+property讀取設定檔,並快速載入到程式中。對於我這種經常架構的人,這是最常用的手段。一般情況我想我都會配置這麼一個檔案。

好了。馬鈴薯不喜歡廢話,介紹完了,直接上代碼。

config.properties

#URLurl.sms=http\://localhost\:8080/sms/sendSmsurl.masIP="211.99.213.001"url.masApiPort=61616#Pooljdbc.sql.poolname="pool2"#sqljdbc.sql.driverClassName=net.sourceforge.jtds.jdbc.Driverjdbc.sql.url=jdbc:jtds:sqlserver://localhost:1433/smsjdbc.sql.username=sajdbc.sql.password=123
/** * 裝配設定檔 initProperties */private static void loadProperties() {rb = ResourceBundle.getBundle("config", Locale.getDefault());driver = rb.getString("jdbc.sql.driverClassName");url = rb.getString("jdbc.sql.url");name = rb.getString("jdbc.sql.username");password = rb.getString("jdbc.sql.password");poolname = rb.getString("jdbc.sql.poolname");}

上述方法即完成一次設定檔的簡單讀取。

下面我們寫成靜態公用的。在其它地方調用。

package com.sinoglobal.utils;import java.util.Locale;import java.util.ResourceBundle;public class ResourceUtils {private static ResourceBundle rb = null;public static String smsUrl = null;public static String masIP = null;public static int masApiPort = 0;static {rb = ResourceBundle.getBundle("config", Locale.getDefault());smsUrl = rb.getString("url.sms");masIP = rb.getString("url.masIP");masApiPort = Integer.parseInt(rb.getString("url.masApiPort"));}}

在這裡直接可以調用。一些簡單的配置用這種方法讀取是最好不過的了。而使用XML的方式你還得去解析。

//啟動SMSApiClientpublic boolean start() {try {int masApiPort = ResourceUtils.masApiPort;String masIP = ResourceUtils.masIP;// SmsApiClientHandlerImpl是由自己實現的SmsApiClientHandler smsHandler = new SmsApiClientHandlerImpl();System.out.println("初始化中。。。");smsApiClient = ApiClientFactory.createSmsApiClient(smsHandler,masIP, masApiPort, appID, appPwd);// 設定是否自動重連到伺服器(可以不需要設定)smsApiClient.setAutoConnect(true);// 設定自動重連伺服器相隔時間(單位:秒), 預設為30秒(可以不需要設定)smsApiClient.setReConnectInterval(60);// 設定與服務連線逾時時間長度,單位:millisecond(可以不需要設定)smsApiClient.setConnectTimeout(100000);// 設定發送逾時時間長度,單位:millisecond(可以不需要設定)smsApiClient.setSendTimeout(1000000);// 以上方法在調用start方法前設定。否則無效!smsApiClient.start();// 必須啟動!!!!完成初始化.System.out.println("服務啟動。。。");} catch (ApiException e) {return false;}return true;}

最後,還有一種配置方法,不過是寫死的方法。並不是靈活的。主要用在一些需要經常讀取的東東上面。

這樣的東東一般直接寫一個常量類。然後全部是靜態調用。節約資源。

比如這樣的一個:

package com.sinoglobal.cons;import com.sinoglobal.utils.DateUtils;/** * 常量類 *  * @author lz */public class Const {public static String SysStartTime=DateUtils.getNowDate("yyyy-MM-dd HH:mm:ss.SSS");//平台啟動時間public static long reqCount=0;//平台請求次數public static int sendtimes=3;//傳送簡訊失敗重發請求最大次數public static int receivetimes=3;//接收簡訊轉寄請求最大次數/**============================| *  * 傳送簡訊驗證 *  ============================|*///遠端連線驗證public static final String noFunctions="2;使用者沒有相應的許可權";public static final String noServer="2;沒有找到相應的簡訊服務器";public static final String sendfailed="2;簡訊發送失敗";public static final String onMaxNo="2;超過最大群發數量";public static final String noNet="2;網關未串連";public static final String onMaxWord="2;簡訊字數超過70";public static final String apiError="2;API簡訊用戶端調用失敗";public static final String loginError="使用者名稱或密碼錯誤";public static final String md5Error="md5校正未通過....";public static final String connError="遠端連線失敗";//資訊驗證public static final String infoError="2;資訊輸入不完整";public static final String onMobileMax="2;手機號碼長度大於500";public static final String mobileTypeError="2;手機號碼格式不正解";public static final String DateError="2;時間格式不正確";public static final String onXcodeMax="2;簡訊子號+擴充碼長度不能大於8位元";public static final String xcodeIsNotNo="2;擴充碼為非法數字";public static final String xcodeIsUp0="2;擴充碼必須大於0的整數";public static final String xcodeError="2;擴充碼[去除前兩位簡訊子號]只能是0-999999之間的數字";}

當然像log4j這樣的配置就更為靈活了。可以在web.xml配置初始值,然後映射到log4j.properties中去。

像上面的這個常量類的好處是,不用每次聲明變數來讀取,在任何其它的地方都可以調用,關鍵是它是靜態,可以節約資源,也不用去資料庫讀取,無疑提高了效率,是java開發的便捷之道。而且我們可以配置多個模組,這樣就層次分明了。對於一些要從資料庫定時查詢相關的東東我們可以放在這裡,直接調用。畢竟輪循資料庫是一件龐大而費力的工作。

當然,只有當你試過後你才會知道。

一個好的項目,一定有一個好的架構,一個靈活而簡單的配置。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.