Java Web 開發(fā)中經(jīng)常要切換數(shù)據(jù)庫,還比較頻繁。每切換一次就要重新配置一次 jdbc.properites 實(shí)在是麻煩。當(dāng)然,maven支持多種配置,但是,速度太慢,切換一下得刷新一會(huì)兒。通過批處理的方式就快多了。
先看下 jdbc.properties 的內(nèi)容
#
#Copyright ? 2017 NPKW
#
jdbc.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url=jdbc:sqlserver://localhost;DatabaseName=Database
jdbc.username=sa
jdbc.password=password
前三行是注釋,真正有用的是后面的4行。以切換本地的數(shù)據(jù)庫與服務(wù)端的數(shù)據(jù)庫為例,jdbc.properties 中的區(qū)別只是最后的三行。很自然的想到,只要能把最后的三行替換掉就行了。順著這個(gè)思路,用批處理腳本,替換掉最后三行。實(shí)際操作的時(shí)候發(fā)現(xiàn),要控制讀取替換具體的某一行還是比較麻煩的操作。
考慮這個(gè)文件只有幾行,可以直接將其全部覆蓋。只需要將每次的配置用批處理輸出到配置文件就可以了。
@echo off
SETLOCAL
set Comment=#
set Copyright=Copyright ? 2017 NPKW
set Driver=jdbc.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
set LocalHost=jdbc.url=jdbc:sqlserver://localhost;DatabaseName=Database
set UserName=jdbc.username=sa
set Password=jdbc.password=password
(echo %Comment% & echo %Comment%%Copyright% & echo %Comment% & echo %Driver% & echo %LocalHost% & echo %UserName% & echo %Password%) > jdbc.properties
SETLOCAL 的意思是腳本中定義的變量,只在當(dāng)前會(huì)話中有效,腳本執(zhí)行完成之后,變量就會(huì)被釋放掉。為了不污染系統(tǒng)的環(huán)境變量,最好先使用 SETLOCAL。 然后,把將要組合的文本存儲(chǔ)在各個(gè)變量中。 最后拼接各個(gè)變量輸出到j(luò)dbc.properties。注意使用 > 符號是覆蓋, >> 是追加。兩個(gè)取出的字符不需要任何連接符,比如 %Comment%%Copyright%。
回過頭來看,批處理的變量的使用方式, 不需要聲明,又有點(diǎn)像 T-SQL 語法。而且通過 /A 參數(shù),可以用一個(gè)表達(dá)式初始化一個(gè)變量。例如: set /a sum=1+1 , sum 的值為2。 特別注意的地方,默認(rèn)初始化變量, = 兩邊不要有空格。 例如 set b = 1 ,用 echo %b% 輸出得到是 %b% 而不是 1。
一開始曾想用 Powershell 去做,Powershell 非常的強(qiáng)大,幾乎支持 .NET 的所有操作,但是 IDEA Intelij 不支持 Powershell 直接運(yùn)行, 而且 Powershell 有多個(gè)版本,新的機(jī)器支持,老的機(jī)器或許就不支持了。 批處理腳本則不一樣,雖然功能看起來弱了些,但是非常的穩(wěn)定,兼容性也非常好,現(xiàn)在市面上的 Windows 系統(tǒng)都能夠支持它。