做開發(fā)或者系統(tǒng)維護(hù)時(shí),經(jīng)常會(huì)遇到各種ref="/tag/272/" style="color:#643D3D;font-weight:bold;">配置文件,其中 .properties 文件是最常見的類型之一。它簡(jiǎn)單、直觀,常用于 Java 項(xiàng)目、腳本工具或本地服務(wù)的參數(shù)設(shè)置。比如你寫了個(gè)小工具,想讓同事也能用,但每個(gè)人用的端口不一樣,總不能每次都改代碼重新打包吧?這時(shí)候 properties 文件就派上用場(chǎng)了。
什么是 properties 文件
properties 是一種鍵值對(duì)格式的文本文件,每行代表一個(gè)配置項(xiàng),格式是 key=value。注釋用 # 開頭。比如:
server.port=8080
db.url=jdbc:mysql://localhost:3306/myapp
db.username=root
# 日志級(jí)別,可選 DEBUG、INFO、WARN
log.level=INFO
這種結(jié)構(gòu)清晰,人看得明白,程序也容易讀取。Java 里可以直接用 Properties 類加載,其他語言像 Python、Go 也有對(duì)應(yīng)的解析方式。
怎么管理多個(gè)環(huán)境的配置
開發(fā)、測(cè)試、生產(chǎn)環(huán)境的數(shù)據(jù)庫地址通常不一樣。如果只靠手動(dòng)改文件,容易出錯(cuò)。一個(gè)實(shí)用的做法是按環(huán)境拆分配置文件,比如:
- application-dev.properties
- application-test.properties
- application-prod.properties
啟動(dòng)程序時(shí)通過參數(shù)指定加載哪個(gè)文件,比如加個(gè)命令行選項(xiàng):--env=prod,程序自動(dòng)讀取對(duì)應(yīng)配置。這樣切換環(huán)境就像換衣服一樣簡(jiǎn)單。
避免敏感信息硬編碼
密碼、密鑰這類信息別直接寫在 properties 文件里,尤其是要提交到 Git 的時(shí)候。一個(gè)辦法是把敏感字段留空或用占位符,運(yùn)行時(shí)從環(huán)境變量讀?。?/p>
db.password=${DB_PASSWORD:default_pass}
這里的 ${DB_PASSWORD:default_pass} 意思是優(yōu)先取環(huán)境變量 DB_PASSWORD,沒有的話用 default_pass。部署時(shí)在服務(wù)器設(shè)好環(huán)境變量,既安全又靈活。
用工具提升效率
手敲配置沒問題,但項(xiàng)目大了容易漏。可以借助 IDE 插件(比如 IntelliJ 的 Properties 支持)做語法高亮和鍵名提示。還有些輕量工具能校驗(yàn)配置是否完整,比如檢查生產(chǎn)環(huán)境文件有沒有少關(guān)鍵項(xiàng)。
另外,別小看命名規(guī)范。統(tǒng)一前綴能減少?zèng)_突,比如日志相關(guān)的都用 log. 開頭,緩存相關(guān)的用 cache.,一看就知道歸屬。
小技巧:支持中文注釋
默認(rèn)情況下,Java 的 Properties 文件要求是 ISO-8859-1 編碼,直接寫中文會(huì)亂碼。解決方法有兩個(gè):一是用 Unicode 轉(zhuǎn)義,比如 \u4f60\u597d 代替“你好”;二是改用 XML 格式的 properties 文件(.xml 結(jié)尾),它原生支持 UTF-8,寫中文毫無壓力。
配置管理看起來不起眼,但處理得好,能省下不少半夜救火的時(shí)間。把 properties 文件用順手,工作節(jié)奏自然就穩(wěn)了。