今天就跟大家聊聊有關(guān)基于Spring的應(yīng)用配置怎么遷移至阿里云應(yīng)用配置管理ACM ,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
公司主營業(yè)務(wù):成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出晉中免費(fèi)做網(wǎng)站回饋大家。
最近遇到一些開發(fā)者朋友,準(zhǔn)備將原有的Java Spring的應(yīng)用配置遷移到 阿里云應(yīng)用配置管理 ACM 中。遷移過程中,遇到不少有趣的問題。本文將通過一個(gè)簡單的樣例來還原遷移過程中遇到的問題和相關(guān)解決思路,以期達(dá)到和讀者交流的目的。
這是所有準(zhǔn)備遷移配置到配置中心的用戶遇到的第一個(gè)問題。我們將從時(shí)效性和安全這兩個(gè)維度進(jìn)行分析。
cdn.com/f174d13b6c9cc95a55d423df21d1349d69518790.png">
靜態(tài)配置是指程序版本一旦發(fā)布,基本上不會(huì)修改的配置內(nèi)容,例如:
軟件版本號(hào):顯然版本號(hào)一經(jīng)確定,產(chǎn)品基本上不需要改。
日志樣式:日志的layout,如時(shí)間戳,文件名,日志級(jí)別等排版,基本上也不需要大改。
三方軟件LicenseKey:基本上也是一經(jīng)發(fā)布,很少變化。不排除中途三方軟件License升級(jí),但是這種升級(jí)一般都可以根據(jù)軟件重新發(fā)版來解決配置變更。
PaaS平臺(tái)連接串:如數(shù)據(jù)庫連接串,中間包含數(shù)據(jù)庫,用戶名和密碼等。除非因?yàn)楹弦?guī)原因修改密碼,或者數(shù)據(jù)發(fā)生遷移等,否則也是很少變化。
動(dòng)態(tài)配置是指程序運(yùn)行時(shí)的一些配置變化,通常會(huì)影響到程序的一些運(yùn)行行為,例如:
限流降級(jí)參數(shù):限流降級(jí)參數(shù)一般都不太固定。系統(tǒng)一般在運(yùn)行時(shí)最好是需要根據(jù)實(shí)際workload pattern來動(dòng)態(tài)調(diào)節(jié)限流參數(shù)如閾值RT,峰值TPS,等。
監(jiān)控報(bào)警閾值:如交易環(huán)比下跌20%產(chǎn)生error報(bào)警,下跌50%產(chǎn)生critical報(bào)警。 對(duì)于監(jiān)控系統(tǒng)來講,線上業(yè)務(wù)特征由于變化比較頻繁,因此一般也不將報(bào)警的閾值寫死,
日志打印級(jí)別:線上一旦出現(xiàn)詭異的行為,希望吧日志打印級(jí)別從error比如調(diào)高到debug,一般都比較希望能動(dòng)態(tài)的去調(diào)整,而不需要重啟應(yīng)用。
容災(zāi)多活:一旦站點(diǎn)反生災(zāi)難,一定是希望切換是越快越好。因此配置必須動(dòng)態(tài)秒級(jí)生效,盡可能降低資損。
從時(shí)效性的維度來講,一般建議用戶把靜態(tài)配置存放到自己文件中,盡可能保持簡單,但是需要把動(dòng)態(tài)配置放到配置中心里,以加強(qiáng)靈活性和應(yīng)用動(dòng)態(tài)變更的實(shí)效性。
非敏感配置一般指偏向技術(shù)類,暴露后不會(huì)導(dǎo)致配置上的安全隱患,例如:
軟件版本號(hào):跟產(chǎn)品迭代相關(guān),無業(yè)務(wù)屬性,非敏感配置。
日志樣式:一般跟程序事后診斷相關(guān),非敏感配置。
日志打印級(jí)別:影響日志打印的多或少,非敏感配置。
限流降級(jí)參數(shù):限流降級(jí)主要為維持內(nèi)部應(yīng)用穩(wěn)定,非敏感配置。
監(jiān)控報(bào)警閾值:主要是影響業(yè)務(wù)的報(bào)警精度,非敏感配置。
容災(zāi)多活:一般和數(shù)據(jù)主備配置和業(yè)務(wù)分片相關(guān),非敏感配置。
敏感配置通常和業(yè)務(wù)數(shù)據(jù)相關(guān),一旦泄露將引起安全隱患,例如:
三方軟件LicenseKey:一旦泄露容易發(fā)生LicenseKey被盜用,為敏感配置。
PaaS平臺(tái)連接串:典型如數(shù)據(jù)庫連接串,一旦泄露,無論內(nèi)部或外部用戶,都可以很容易地登到業(yè)務(wù)數(shù)據(jù)庫接觸到業(yè)務(wù)敏感信息,為敏感配置。
從安全的維度來看,我們通常建議用戶把非敏感配置存放到自己的文件中,盡可能保持簡單,但是需要把敏感配置放到配置中心里,并加密且做好鑒權(quán),盡量不要讓無關(guān)人員接觸到。
時(shí)效性和安全分析總結(jié)
使用Spring框架的Java開發(fā)者一般經(jīng)常用到的一種配置注解姿勢(shì)是利用Spring的@value注解。
例如這個(gè)配置,包含兩個(gè)配置參數(shù),一個(gè)是軟件的版本號(hào),一個(gè)是數(shù)據(jù)庫連接串:
通過@PropertySource和@value的注解來自動(dòng)注入配置。
@Configuration @ComponentScan("com.alibaba") @PropertySource("classpath:myApp.properties") public class AppConfig { @Value(value="${url}") private String URL; @Value(value="${dbuser}") private String USER; @Value(value="${driver}") private String DRIVER; @Value(value="${dbpassword}") private String PASSWORD; @Value(value="${appVersion}") private String version; }
以上代碼省略了相關(guān)數(shù)據(jù)庫連接初始化等操作。
目前由于安全合規(guī)或配置時(shí)效等原因,要開始遷移配置到ACM上。經(jīng)過分析,我們發(fā)現(xiàn)部分?jǐn)?shù)據(jù)庫的配置最好遷移到ACM,以紅色字體標(biāo)注。紅色部分將全部被遷移到ACM中。
接下來主要三個(gè)改動(dòng),先歸納下。
在ACM控制臺(tái)種增加相關(guān)配置的記錄。
Java工程包中增加 ACM SDK 相關(guān)依賴。
少許修改代碼,增加在ACM中取配置的注解代碼。
第一步,直接到ACM中創(chuàng)建配置項(xiàng),名字為myapp.dbconfig.properties,并把配置內(nèi)容編輯在對(duì)應(yīng)編輯框中。
第二步,在maven的pom.xml中增加依賴,如下。
com.alibaba.nacos nacos-spring-context 0.2.1- RC1
第三步,在對(duì)應(yīng)AppConfig.java代碼中植入API注解,通過ACM去獲取動(dòng)態(tài)配置。代碼增加部分如紅色字體部分。
@Configuration @ComponentScan("com.journaldev") @PropertySource("classpath:myApp.properties") @EnableNacosConfig(globalProperties = @NacosProperties(endpoint = "acm.aliyun.com", namespace = "xxx", accessKey = "xxx", secretKey = "xxx")) @NacosPropertySource(dataId = "myApp.dbconfig.properties", autoRefreshed = true) public class AppConfig { @Value(value="${url}") private String URL; @Value(value="${dbuser}") private String USER; @Value(value="${driver}") private String DRIVER; @Value(value="${dbpassword}") private String PASSWORD; @Value(value="${appVersion}") private String version; public String getVersion() { return version; } }
至此,改動(dòng)結(jié)束。通過ACM SDK支持Spring的@value注解能力,代碼幾乎0改動(dòng)。
在以上代碼實(shí)例中,有幾樣事情需要注意:
代碼中使用的ACM SDK為Nacos SDK。Nacos (http://nacos.io) 為ACM的開源實(shí)現(xiàn),ACM無縫兼容所有Nacos的接口。
在代碼示例中,使用了明文注解來寫死ACM的endpoint, namespace, AK, SK, 等等。在實(shí)際操作種,相關(guān)變量其實(shí)不用寫死。
看完上述內(nèi)容,你們對(duì)基于Spring的應(yīng)用配置怎么遷移至阿里云應(yīng)用配置管理ACM 有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。