一種屬性加載方法及系統的製作方法
2023-11-07 06:51:47 1
一種屬性加載方法及系統的製作方法
【專利摘要】本發明提出了一種屬性加載方法及系統,該屬性加載方法包括如下步驟:抽象屬性值來源,如果是動態屬性來源,則執行第二步;如果是靜態屬性來源,則判斷本地是否已經存在該屬性值,如果不存在,則執行第三步;定時對屬性值對應的屬性文件進行狀態檢查,如果屬性文件與歷史記錄對比沒有修改,則返回第一步,如果屬性文件與歷史記錄對比有修改,則執行第三步;對屬性文件的數據類型按照強制化約定進行轉換;加載轉換後的屬性文件。本發明的屬性加載方法既能實現動態屬性的便利配置又不需要大量的代碼編寫,能夠在提高應用便捷性的同時降低複雜度和成本。本發明可在運行期動態更新屬性值,也可以加載靜態屬性,無須改動代碼就完成動態到靜態的替換。
【專利說明】一種屬性加載方法及系統
【技術領域】
[0001]本發明涉及JAVA應用開發【技術領域】,具體涉及一種能夠將外部系統對屬性文件的更新需要及時反映出來的屬性加載方法及系統。
【背景技術】
[0002]在利用JAVA技術開發的系統中,當應用系統的屬性設置為可配置時,該屬性的值被寫入屬性文件/配置文件中,在該屬性文件/配置文件中這些屬性的值可以進行更改,因此這些屬性稱為動態屬性。現實系統中,一個系統內部的屬性文件很可能是由外部系統維護的,因此外部系統對屬性文件的更新需要及時反映出來,這就是動態屬性的需求。
[0003]在現有常規的屬性文件開發中,一般有兩種模式,一是靜態模式,即使用Spring的PropertyPlaceholderConfigurer技術一次性加載文件,並在需要的類中以傳統的「$屬性Key」方式注入;另一種模式是動態模式,即開發者自己實現屬性文件管理器,以代碼的方式在需要調用的地方進行調用。對於前一種模式,優點是方便,不需要開發人員手工編碼,但無法達到動態改變屬性值的目的;而後一種模式由於是代碼級的隨用隨調,雖然能實現動態功能,但會帶來大量的代碼編寫,提高了複雜度和成本。
[0004]因此,尋找一種既能便利配置又不需要大量的代碼編寫的實現屬性文件及時更新的屬性加載方法是一個亟需解決的問題。
【發明內容】
[0005]為了克服上述現有技術中存在的缺陷,本發明的目的是提供一種動態屬性加載方法及系統,該方法既能實現動態屬性的便利配置又不需要大量的代碼編寫,降低了複雜度和成本。
[0006]為了實現本發明的上述目的,根據本發明的第一個方面,本發明提供了一種動態屬性加載方法,包括如下步驟:
[0007]S1:抽象屬性值來源,其中所述抽象屬性值來源是判斷所述屬性值是動態屬性來源還是靜態屬性來源,如果是動態屬性來源,則執行步驟S2 ;如果是靜態屬性來源,則判斷本地是否已經存在所述屬性值,如果不存在,則執行步驟S 3 ;
[0008]S2:定時對所述屬性值對應的屬性文件進行狀態檢查,如果屬性文件與歷史記錄對比沒有修改,則返回步驟SI,如果屬性文件與歷史記錄對比有修改,則執行步驟S3 ;
[0009]S3:對所述屬性文件的數據類型按照強制化約定進行轉換;
[0010]S4:加載所述轉換後的屬性文件。
[0011]本發明的動態屬性加載方法既能實現動態屬性和靜態屬性的便利配置又不需要大量的代碼編寫,能夠在提高應用便捷性的同時降低複雜度和成本。本發明無論在開發中需要動態屬性還是靜態屬性,都可以使用同樣的配置和代碼編寫方式進行,保持了項目組的開發規範的統一。
[0012]在本發明的一種優選實施例中,在步驟SI中,對所述屬性值來源進行定時檢查。[0013]在本發明的另一種優選實施例中,所述方法還包括通過任務執行器ScheduledExecutorFactoryBean設置心跳周期,如果所述心跳周期到了而所述屬性文件未修改則不再重新加載。本發明對屬性文件來源進行定時檢查並設置心跳周期,從而達到動態屬性的目標。
[0014]在本發明的一種優選實施例中,通過屬性文件的修改狀態檢查器PropertyFilesModificationStateChceker對所述屬性文件進行狀態檢查。
[0015]本發明的屬性文件如果和上次的歷史記錄對比沒有修改則不需要加載屬性文件,從而降低對資源的消耗。
[0016]在本發明的另一種優選實施例中,所述屬性文件的數據類型的強制化約定為:在JDK的7種數據類型中,除字符屬性數據類型StringPropertyDataType之外的數據類型都加上同步鎖,日期屬性數據類型DatePropertyDataType需要在配置文件中注入日期轉換格式Pattern;其中所述JDK的7種數據類型包括布爾屬性數據類型BooIeanPropertyDataType^日期屬性數據類型DataPropertyDataType、整型屬性數據類型IntPropertyDataType、浮點屬性數據類型FloatPropertyDataType、雙精度浮點屬性數據類型DoublePropertyDataType、長整型屬性數據類型LongPropertyDataType、字符屬性數據類型 StringPropertyDataType。
[0017]本發明同時對應於JDK的7種級別數據類型做出的屬性數據類型強制化約定能對屬性值進行強制類型檢查,可滿足任何的屬性需求場景,能夠提高後臺代碼運行的安全性。
[0018]在本發明的一種優選實施例中,通過默認動態屬性來源DefaultDynamicPropertySource 實現屬性文件加載。
[0019]在本發明的另一種優選實施例中,加載屬性文件的路徑是當前系統中的類地址classpath或者任意網絡可以連通道的物理地址。
[0020]在本發明的再一種優選實施例中,具體的屬性文件加載方法為:
[0021]情況1,動態屬性文件默認情況下的目錄是當前系統的類路徑classpath,由Spring的類路徑來源ClassPathResource進行屬性文件加載;
[0022]情況2,如果不是情況1,動態屬性文件需要另外指定目錄,則通過系統屬性文件夾設置系統屬性值,並設置系統屬性,則從系統屬性中獲取動態屬性文件的目錄,由Spring的文件系統資源類FileSystemResource進行屬性文件加載;
[0023]情況3,如果不是情況I也不是情況2,但系統已經設置了默認動態屬性來源,則從默認動態屬性來源中獲取動態屬性文件的目錄,由Spring的文件系統資源類FileSystemResource進行屬性文件加載;;
[0024]情況4,如果不是情況1、不是情況2也不是情況3,則認為動態屬性文件在當前類路徑classpath或者網絡路徑web path目錄下,貝U與情況I的屬性文件加載方法相同;
[0025]情況5,如果系統確認設置的屬性目錄是存在的,那麼將調用類加載器Classloader進行處理,加載屬性文件。
[0026]本發明當前要加載的屬性文件的路徑可以是當前系統中的類路徑classpath,也可以是任意網絡可以連通道的物理地址,這樣能夠提高兼容性。
[0027]在本發明的一種優選實施例中,在步驟SI之前可以具有以下步驟:設置動態屬性的默認值。[0028]本發明通過對屬性值設置默認值,使動態屬性具有高的容錯性。
[0029]為了實現本發明的上述目的,根據本發明的第一個方面,本發明提供了一種屬性加載系統,包括抽象屬性值來源模塊,用於抽象屬性值來源,其中所述抽象屬性值來源是判斷所述屬性值是動態屬性來源還是靜態屬性來源,如果是動態屬性來源,則執行屬性文件狀態檢查模塊;如果是靜態屬性來源,則判斷本地是否已經存在所述屬性值,如果不存在,則執行數據類型強制轉換模塊;屬性文件狀態檢查模塊,用於定時對所述屬性值對應的屬性文件進行狀態檢查,如果屬性文件與歷史記錄對比沒有修改,則返回所述抽象屬性值來源模塊,如果屬性文件與歷史記錄對比有修改,則執行所述數據類型強制轉換模塊;數據類型強制轉換模塊,用於對所述屬性文件的數據類型按照強制化約定進行轉換;以及屬性文件加載模塊,用於加載所述轉換後的屬性文件。
[0030]本發明的屬性加載系統既能實現動態屬性的配置也能實現靜態屬性的配置,能夠在提高應用便捷性的同時降低複雜度和成本。本發明的附加方面和優點將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發明的實踐了解到。
【專利附圖】
【附圖說明】
[0031]本發明的上述和/或附加的方面和優點從結合下面附圖對實施例的描述中將變得明顯和容易理解,其中:
[0032]圖1是本發明屬性加載方法的流程圖;
[0033]圖2是本發明一種優選實施例中的配置案例;
[0034]圖3是本發明屬性加載系統的結構示意圖。
【具體實施方式】
[0035]下面詳細描述本發明的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,僅用於解釋本發明,而不能理解為對本發明的限制。
[0036]本發明提供了一種屬性加載方法,如圖1所示,其包括如下步驟:
[0037]S1:抽象屬性值來源,其中該抽象屬性值來源是判斷屬性值是動態屬性來源還是靜態屬性來源,如果是動態屬性來源,則進入步驟S2,如果是靜態屬性來源,則判斷該屬性值是否已經存在,如果不存在,則進入步驟S3,如果存在,則退出;
[0038]S2:定時對所述屬性值對應的屬性文件進行狀態檢查,如果屬性文件與歷史記錄對比沒有修改,則返回步驟SI,如果屬性文件與歷史記錄對比有修改,則進入步驟S3 ;
[0039]S3:對屬性文件的數據類型按照強制化約定進行轉換;
[0040]S4:加載轉換後的屬性文件。
[0041]在本發明的一種優選實施方式中,該屬性加載方法具體包括如下方法:
[0042]第一步:抽象屬性值來源,本發明可支持任意的屬性值來源,優選支持動態屬性來源和靜態屬性來源,在本實施方式中,具體是判斷屬性值來源,即屬性值對應的屬性文件的來源是動態屬性來源還是靜態屬性來源,通過這樣的抽象處理,無論開發中是否需要動態還是靜態,都可以使用同樣的配置和代碼編寫方式進行,從而保持了項目開發的規範的統一,唯一不同的只是如果是動態需求就用動態的屬性來源實現,靜態的需求就用靜態的屬性來源實現。如果屬性值來源是動態屬性來源,則執行第二步,如果屬性值來源是靜態屬性來源,則判斷本地是否已經存在該屬性值,如果不存在,則執行第三步,如果存在,則退出,不做任何處理操作;
[0043]需要說明的是,屬性值是個抽象的稱呼,它的來源可以是常規的屬性文件,也可以是其它類型的文件,可以通過資料庫,甚至是調用外部的WebService或者JMS等獲得,因此,如有需要也可自定義屬性來源。
[0044]在本實施方式中,DynamicPerpertySource指動態屬性來源,StaticPropertySource 指靜態屬性來源,DefaultDynamicPropertySource 為默認動態屬性來源,本發明動態需求用動態的屬性來源實現,靜態的需求用靜態的屬性來源實現。平臺默認提供的屬性文件來源實現中,可支持默認情況下對classpath (類路徑)下指定文件名的屬性文件處理或者非當前應用環境下,即非classpath或者web path (網絡路徑)的某個目錄下該文件名的屬性文件處理。
[0045]由於有些屬性文件是在當前classpath下,有些可能不在,因此,屬性文件的加載需要分為兩種情況,一是通過當前類的Classloader (類加載器)加載,二是通過擴展的文件系統進行加載。本發明提供一個默認的可支持任意文件系統屬性文件加載的來源實現,動態屬性支持當前環境和外部環境,靜態屬性支持當前環境,並且所有基於IPropertySource(自定義屬性來源)的實現都是屬性數據類型的來源,需要在配置文件中注入。
[0046]在本實施方式中,需要定時對屬性值來源(即屬性文件的來源)進行檢查。
[0047]第二步:定時對屬性值對應的屬性文件進行狀態檢查,如果屬性文件與歷史記錄對比沒有修改,則返回第一步,如果屬性文件與歷史記錄對比有修改,則進入下一步。在本實施方式中,通過ScheduledExecutorFactoryBean (任務執行器)設置心跳周期,如果心跳周期到了而屬性文件未修改則不再重新加載。在本發明的一種更加優選的實施方式中,心跳周期為3秒,該心跳周期的長度長於對屬性文件來源進行定時檢查的周期和對屬性文件進行定時狀態檢查的周期。
[0048]同時,考慮到實際運行時的效率性能問題,需要對文件是否有過修改做個狀態檢查,如果和上次的歷史記錄對比沒有修改則不需要加載屬性文件,從而降低對資源的消耗。在本實施方式中,對屬性值的數據類型強制檢查失敗後將自動保留上次的數據信息。在本發明的一種優選實施方式中,只考慮屬性文件的修改狀態檢查,即通過PropertyFilesModificationStateChceker (屬性文件的修改狀態檢查器)對屬性文件進行狀態檢查。
[0049]第三步:對屬性文件的數據類型按照強制化約定進行轉換。
[0050]在本實施方式中,對屬性數據類型的強制化約定是指對應於JDK的7種級別數據類型,即對 BooleanPropertyDataType (布爾屬性數據類型)、DataPropertyDataType (日期屬性數據類型)、IntPropertyDataType (整型屬性數據類型)、FloatPropertyDataType(浮點屬性數據類型)、DoublePropertyDataType (雙精度浮點屬性數據類型)、LongPropertyDataType (長整型屬性數據類型)和StringPropertyDataType (字符屬性數據類型)做出的屬性數據類型強制化約定,可滿足任何的屬性需求場景。
[0051]所述屬性數據類型的強制化約定具體為,由於屬性值的取出都首先是字符型,然後才能轉換成對應的數據類型,因此,為了考慮並發的操作因素,所述JDK的7種級別數據類型中除了 StringPropertyDataType之外,其它的屬性數據類型都必須在返回簡單數據類型的操作上加上同步鎖。對於util.Date類型,它的轉換是需要樣式支持的,因此,DatePropertyDataType和其它屬性數據類型的區別之處還在於需要在配置文件中注入日期轉換格式Pattern。在對屬性數據類型進行強制化約定後,通過函數BasePropertyValue對屬性數據類型進行轉換,其中,用到的具體配置有getName,即獲得屬性文件中的key<^t);getPropertySource,即獲得屬性來源,getRawValue,即獲得屬性來源中的key對應的原始值。
[0052]第四步:加載屬性文件。本發明通過DefaultDynamicPropertySource (默認動態屬性來源)實現屬性文件加載。加載屬性文件的路徑是當前系統中的classpath或者任意網絡可以連通道的物理地址。如圖2所示,在本發明一種優選實施方式中使用時所需配置案例,圖中1-9行,通過Spring加載定義業務類SamplelServiceImpl,以及類中需要動態加載的屬性,定義屬性的數據類型,屬性的默認值,以及動態屬性加載源。在本實施方式中,屬性為floatNumber,定義屬性的數據類型為FloatPropertyType,默認值為111.8888,動態屬性加載源為propertySource。圖中11-17行定義了動態屬性加載源propertySource,在這裡配置propertySource的一些屬性,配置讀取文件為dynamic, properties,在本實施方式中,是定義了類DefaultDynamicPropertySource,本實施方式中設置的心跳間隔時間為3秒,第一次加載後多長時間進行心跳判斷,O為立即,配置文件所在的目錄systemPropertyOfFoIder,以及調度執行器executorService。圖中18-21行定義了任務執行器,配置了執行器的檢查目錄以及線程池的個數,調度執行器負責讀取文件內容。
[0053]從圖中的配置文件中可看出,實際上本發明通過使用spring提供的任務執行器ScheduledExecutorFactoryBean來執行獲取屬性文件內容的任務,同時通過DefaultDynamicPropertySource來設置加載文件的間隔時間等數據,從而達到動態的目標。同時,使用動態屬性功能後,由於同時還具有類型強制的特點,因此,配置文件中還使用了 SamplelServiceImplο
[0054]對於圖中11-17行所標示的代碼,作用是決定當前要加載的屬性文件的路徑,它可以是當前系統中的classpath,也可以是任意網絡可以連通道的物理地址。
[0055]在本實施方式中,具體的屬性文件加載方法為:
[0056]—,其中的dynamic, properties (動態屬性)文件默認情況下將是在當前系統的classpath下,因此將由Spring的ClassPathResource (類路徑來源)進行屬性文件加載;
[0057]二,如果不是情況第一種情況,動態屬性文件需要另外指定目錄,則通過系統屬性文件夾設置系統屬性值,並設置系統屬性,則從系統屬性中獲取動態屬性文件的目錄。即如果dynamic, properties文件需要另外指定目錄,則可通過系統屬性文件夾 設置系統屬性值為 cow.property, folder,然後設置系統屬性 System.setProperty (〃cow.property,folder", "bin/folder");則本類將嘗試從 bin/folder 中獲取 dynamic, properties 的目錄,並由Spring的類FileSystemResource進行屬性文件加載;三,如果不是第一種情況也不是第二種情況,但系統已經設置了默認動態屬性來源,則從默認動態屬性來源中獲取動態屬性文件的目錄,即如果在開發中雖然沒有設置系統屬性文件夾〈propertyname=//systemPropertyOf Folder〃value=〃cow.property.folder〃/>,但系統中已經設置了默認動態屬性來源 System.setProperty (DefaultDynamicPropertySource.DEFAULT_SYSTEM_PROPERTY_OF_PROPERTYFOLDER, 〃bin/folder〃);則本類也將嘗試從 bin/folder 中獲取dynamic, properties的目錄,並由Spring的類FileSystemResource進行屬性文件加載;
[0058]四,如果不是第一種情況、也不是第二章情況也不是第三種情況,則認為動態屬性文件在當前類路徑classpath或者網絡路徑web path目錄下,則與情況I的屬性文件加載方法相同,即如果沒有設置系統屬性文件夾,也沒有通過代碼設置默認動態屬性來源 System.setProperty(DefaultDynamicPropertySource.DEFAULT_SYSTEM_PR0PERTY_0F_PR0PERTYF0LDER, 〃bin/folder〃),則本類將認為 dynamic, properties 文件在當前classpath或者web path目錄下,等同第一種情況的效果,即由Spring的ClassPathResource 進行加載;
[0059]五,如果系統確認設置的屬性目錄是存在的,那麼就將調用合適的Classloader(類加載器)進行處理,加載屬性文件。
[0060]在本發明的一種優秀實施方式中,可設置屬性值動態更新的心跳周期,並且本發明支持修改判斷處理,如果心跳周期到了而屬性文件未修改則不再重新加載。還可在第一步之前設置屬性值的默認值,進一步增強容錯性。在本實施方式中,使用者可以在配置文件中對具體的默認值自行進行定義,例如設置屬性floatNumber的數據類型為float,設置此屬性的默認值為111.8888。
[0061]本發明通過使用spring的任務執行器ScheduledExecutorFactoryBean來執行獲取屬性文件內容的任務,同時通過DefaultDynamicPropertySource來設置加載文件的間隔時間等數據,從而達到動態的目標,即有配置的便利又不需要大量的代碼編寫,同時對應於JDK的7種級別數據類型做出的屬性數據類型強制化約定能對屬性值進行強制類型檢查,以避免類型轉換的隱患問題。
[0062]如圖3所示,本發明還提供了一種屬性加載系統,其包括抽象屬性值來源模塊30、屬性文件狀態檢查模塊31、數據類型強制轉換模塊32和屬性文件加載模塊33。其中,抽象屬性值來源模塊30的輸出端分別與屬性文件狀態檢查模塊31的輸入端和數據類型強制轉換模塊32的輸入端相連,屬性文件狀態檢查模塊31的輸出端與數據類型強制轉換模塊32的輸入端相連,數據類型強制轉換模塊32的輸出端與屬性文件加載模塊33的輸入端相連。
[0063]抽象屬性值來源模塊30,用於抽象屬性值來源,其中所述抽象屬性值來源是判斷屬性值是動態屬性來源還是靜態屬性來源;如果是動態屬性來源,則將該屬性值對應的屬性文件傳輸至屬性文件狀態檢查模塊31,執行屬性文件狀態檢查模塊31 ;如果是靜態屬性來源,則判斷該屬性文件是否已經存在,如果不存在,則將該屬性值對應的屬性文件傳輸至數據類型強制轉換模塊32,執行數據類型強制轉換模塊32,如果存在,則該抽象屬性值來源模塊30對該屬性文件不進行任何操作。
[0064]屬性文件狀態檢查模塊31,用於對抽象屬性值來源模塊30傳輸來的屬性文件定時進行狀態檢查,如果屬性文件與歷史記錄對比沒有修改,則對該屬性文件不進行任何操作,返回抽象屬性值來源模塊30 ;如果屬性文件與歷史記錄對比有修改,則將該屬性文件傳輸至數據類型強制轉換模塊32,執行數據類型強制轉換模塊32 ;
[0065]數據類型強制轉換模塊32,用於對抽象屬性值來源模塊30傳輸來的靜態屬性文件和屬性文件狀態檢查模塊31傳輸來的動態屬性文件的數據類型進行轉換,並將轉換後的屬性文件傳輸至屬性文件加載模塊33 ;該屬性文件加載模塊33,用於對轉換後的屬性文件進行加載。
[0066]本發明可在運行期動態更新屬性值,可以基於動態屬性特性的配置,也可以當成普通的靜態屬性使用,以統一屬性使用,當然,此時的屬性文件只在當前應用環境下獲取。本發明使用了動態屬性功能後,仍舊可以按照靜態的方式去獲取屬性,從而在一些情況下無須改動代碼就完成動態到靜態的替換。
[0067]在本說明書的描述中,參考術語「一個實施例」、「一些實施例」、「示例」、「具體示例」、或「一些示例」等的描述意指結合該實施例或示例描述的具體特徵、結構、材料或者特點包含於本發明的至少一個實施例或示例中。在本說明書中,對上述術語的示意性表述不一定指的是相同的實施例或示例。而且,描述的具體特徵、結構、材料或者特點可以在任何的一個或多個實施例或示例中以合適的方式結合。
[0068]儘管已經示出和描述了本發明的實施例,本領域的普通技術人員可以理解:在不脫離本發明的原理和宗旨的情況下可以對這些實施例進行多種變化、修改、替換和變型,本發明的範圍由權利要求及其等同物限定。
【權利要求】
1.一種屬性加載方法,其特徵在於,包括如下步驟: S1:抽象屬性值來源,其中所述抽象屬性值來源是判斷所述屬性值是動態屬性來源還是靜態屬性來源,如果是動態屬性來源,則執行步驟S2 ;如果是靜態屬性來源,則判斷本地是否已經存在所述屬性值,如果不存在,則執行步驟S 3 ; 52:定時對所述屬性值對應的屬性文件進行狀態檢查,如果屬性文件與歷史記錄對比沒有修改,則返回步驟SI,如果屬性文件與歷史記錄對比有修改,則執行步驟S3 ; 53:對所述屬性文件的數據類型按照強制化約定進行轉換; 54:加載所述轉換後的屬性文件。
2.如權利要求1所述的屬性加載方法,其特徵在於:在步驟SI中,對所述屬性值來源進行定時檢查。
3.如權利要求1所述的屬性加載方法,其特徵在於:所述方法還包括通過任務執行器ScheduledExecutorFactoryBean設置心跳周期,如果所述心跳周期到了而所述屬性文件未修改則不再重新加載。
4.如權利要求1所述的屬性加載方法,其特徵在於:通過屬性文件的修改狀態檢查器PropertyFi IesModificationStateChceker對所述屬性文件進行狀態檢查。
5.如權利要求1所述 的屬性加載方法,其特徵在於:所述屬性文件的數據類型的強制化約定為:在JDK的7種數據類型中,除字符屬性數據類型StringPropertyDataType之外的數據類型都加上同步鎖,日期屬性數據類型DatePropertyDataType需要在配置文件中注入日期轉換格式Pattern ;其中所述JDK的7種數據類型包括布爾屬性數據類型BooIeanPropertyDataType^日期屬性數據類型DataPropertyDataType、整型屬性數據類型IntPropertyDataType、浮點屬性數據類型FloatPropertyDataType、雙精度浮點屬性數據類型DoublePropertyDataType、長整型屬性數據類型LongPropertyDataType、字符屬性數據類型 StringPropertyDataType。
6.如權利要求1所述的屬性加載方法,其特徵在於:通過默認動態屬性來源DefaultDynamicPropertySource 實現屬性文件加載。
7.如權利要求1或6所述的屬性加載方法,其特徵在於:加載屬性文件的路徑是當前系統中的類地址classpath或者任意網絡可以連通道的物理地址。
8.如權利要求1、6、7之一所述的屬性加載方法,其特徵在於:具體的屬性文件加載方法為: 情況I,動態屬性文件默認情況下的目錄是當前系統的類路徑classpath,由Spring的類路徑來源ClassPathResource進行屬性文件加載; 情況2,如果不是情況1,動態屬性文件需要另外指定目錄,則通過系統屬性文件夾設置系統屬性值,並設置系統屬性,則從系統屬性中獲取動態屬性文件的目錄,由Spring的文件系統資源類FileSystemResource進行屬性文件加載; 情況3,如果不是情況I也不是情況2,但系統已經設置了默認動態屬性來源,則從默認動態屬性來源中獲取動態屬性文件的目錄,由Spring的文件系統資源類FileSystemResource進行屬性文件加載;; 情況4,如果不是情況1、不是情況2也不是情況3,則認為動態屬性文件在當前類路徑classpath或者網絡路徑web path目錄下,貝U與情況I的屬性文件加載方法相同;情況5,如果系統確認設置的屬性目錄是存在的,那麼將調用類加載器Classloader進行處理,加載屬性文件。
9.如權利要求1所述的屬性加載方法,其特徵在於:在步驟SI之前可以具有以下步驟:設置動態屬性的默認值。
10.一種屬性加載系統,其特徵在於,包括: 抽象屬性值來源模塊,用於抽象屬性值來源,其中所述抽象屬性值來源是判斷所述屬性值是動態屬性來源還是靜態屬性來源,如果是動態屬性來源,則執行屬性文件狀態檢查模塊;如果是靜態屬性來源,則判斷本地是否已經存在所述屬性值,如果不存在,則執行數據類型強制轉換模塊; 屬性文件狀態檢查模塊,用於定時對所述屬性值對應的屬性文件進行狀態檢查,如果屬性文件與歷史記錄對比沒有修改,則返回所述抽象屬性值來源模塊,如果屬性文件與歷史記錄對比有修改,則執行所述數據類型強制轉換模塊; 數據類型強制轉換模塊,用於對所述屬性文件的數據類型按照強制化約定進行轉換; 屬性文件加載模塊,用於加載所述轉換後的屬性文件。
【文檔編號】G06F9/44GK103838564SQ201210491384
【公開日】2014年6月4日 申請日期:2012年11月27日 優先權日:2012年11月27日
【發明者】於建軍 申請人:重慶新媒農信科技有限公司