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