欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

適應(yīng)各種開發(fā),測試,線上,線下環(huán)境的Spring配置方式-創(chuàng)新互聯(lián)

背景

昆明網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)公司從2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司

假設(shè)開發(fā)了一個中間件,比如是一個緩存系統(tǒng),這個中間件要配置一個IP地址,還要配置一個Factory,從這個Factory里得到一個client,如:

<bean name="cacheFactory" class="com.test.cache.Factory">

? <property name="address" value="192.168.1.100"/>

</bean>

<bean name="cacheClient" factory-bean="cacheFactory" factory-method="getClient" />

然后這個中間件有三個集群(clusterA, clusterB, clusterC),分別給不同的業(yè)務(wù)使用,那就這時會有很多的配置的麻煩。

從使用者的角度出發(fā),應(yīng)用不喜歡引入一堆的配置,它們只希望import一個配置文件,然后在代碼里用@AutoWried注入一個Bean,就可以使用了。

Spring Bean被覆蓋的風(fēng)險。

如果兩個不同的業(yè)務(wù)都使用了這個cache,然后它們的jar包又再被第三個業(yè)務(wù)引用,那么它們都import了一個cache service的配置,那么就有可能出現(xiàn)后面的Bean定義被前面的覆蓋了。而Spring默認(rèn)不處理這種Bean重復(fù)定義的問題。

@AutoWried 注入的問題。和上一個問題類似,@AutoWried注入時如果沒有配置@Qualifier,那么如果某個類有多個Bean實例,那么就有可能出現(xiàn)Bean注入混亂的情況。

線上環(huán)境臨時切換。必須要支持線上臨時修改配置。

開發(fā)者無需配置。要提供默認(rèn)值的配置,開發(fā)者不用做配置就可以直接在本地和測試環(huán)境運行代碼。

靜默發(fā)布新版配置。比如當(dāng)集群遷移了,IP地址變換了,應(yīng)用不用修改代碼和配置,只需要用Maven重新打包即可。

可以利用的技術(shù)

spring profile,,@AutoWried,@Qualifier, PropertyPlaceholderConfigurer,PropertyOverrideConfigurer。

profile,PropertyPlaceholderConfigurer等的相關(guān),不一一介紹了。如果有不明白的,可以到spring的文檔里參考下。

簡要列舉下是如何解決上面的問題的。

1.在緩存中間件的jar包里放上三個集群的默認(rèn)配置:

2.看下spring-cacheClusterA.xm里的內(nèi)容:

<beans profile="dev">

<bean id="cacheClusterAFactory" class="com.test.cache.CacheFactory">

<property name="address" value="${cache.address.clusterA:127.0.0.1}"/>

</bean>

<bean name="cacheClusterAClient" factory-bean="cacheClusterAFactory" factory-method="getClient" />

</beans>

<beans profile="test">

<bean id="cacheClusterAFactory" class="com.test.cache.CacheFactory">

<property name="address" value="${cache.address.clusterA:192.168.1.101}"/>

</bean>

<bean name="cacheClusterAClient" factory-bean="cacheClusterAFactory" factory-method="getClient" />

</beans>

<beans profile="product">

<bean id="cacheClusterAFactory" class="com.test.cache.CacheFactory">

<property name="address" value="${cache.address.clusterA:10.10.1.10}"/>

</bean>

<bean name="cacheClusterAClient" factory-bean="cacheClusterAFactory" factory-method="getClient" />

</beans>

里面定義了三個profile:dev,test,product。這三個profile分別對應(yīng)開發(fā),測試,線上三種環(huán)境。

而在具體bean的配置上,用了一些"${}"這樣的占位符,另外還為它們配置了默認(rèn)值。

PropertyPlaceholderConfigurer,PropertyOverrideConfigurer可以配置默認(rèn)值,估計這功能比較少人知道 。

這樣就解決了不同環(huán)境,還要有默認(rèn)配置的問題。

3.使用者的使用方法

假定使用者要用到clusterA和clusterB這兩個集群,那么可以這樣配置:

<context:property-placeholder location="classpath:env.properties" />

<import resource="cacheConfigDefault/spring-cacheClusterA.xml" />

<import resource="cacheConfigDefault/spring-cacheClusterB.xml" />

import了緩存中間件的默認(rèn)配置,然后還用placeholder加載了一個env.properties的環(huán)境變量文件。

那么對于spring-cacheClusterA.xml和spring-cacheClusterB.xml里的address這個屬性,如果沒有在env.properties里有配置,則會使用默認(rèn)配置。

如果想要修改,如修改cacheClusterA的配置,則可以在env.properties里加下:

#if comment this, will use the default value

cache.address.clusterA=testClusterAAddress

那么clusterA使用的就是用戶的配置,而不是所依賴的jar包的默認(rèn)配置了。

其它

調(diào)試spring placeholder時,或者線上查看placeholder到底有沒有工作時,可以把spring的log級別調(diào)為TRACE,這樣就可以看到很多有用的信息了。

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。

網(wǎng)頁名稱:適應(yīng)各種開發(fā),測試,線上,線下環(huán)境的Spring配置方式-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://www.chinadenli.net/article6/deegog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站網(wǎng)站導(dǎo)航企業(yè)網(wǎng)站制作商城網(wǎng)站全網(wǎng)營銷推廣營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)