2
我正在學習Flyway遷移工具,並且我沒有清除校驗和的概念。有人能解釋我是什麼嗎?它如何計算,或者如何改變?flyway - 校驗和概念的含義
我明白修復命令重新計算校驗和,我不明白它有什麼不同。
謝謝!
我正在學習Flyway遷移工具,並且我沒有清除校驗和的概念。有人能解釋我是什麼嗎?它如何計算,或者如何改變?flyway - 校驗和概念的含義
我明白修復命令重新計算校驗和,我不明白它有什麼不同。
謝謝!
Flyway中的Checksum字段構成驗證機制的一部分,確保遷移腳本自應用到數據庫後未發生更改。這將保證您的應用程序的所有實例都具有相同的數據庫結構(內容)。您可以關閉驗證,但我不會建議您這樣做。回答您的問題:
什麼是?
只是谷歌什麼是校驗和。 Wikipedia
它是如何計算的?
對於SQL遷移,Flyway使用CRC32類來計算校驗和。準確的代碼見下文。
如何更改?
一旦您遷移的二進制內容被修改,遷移的校驗和將被更改。如果要在計算新版遷移文件的校驗和時更改數據庫中的校驗和字段,然後更改數據庫中的值。不過,我不建議這樣做。你不應該這樣做,而你想改變它的事實可能表明你做錯了什麼。總之,對於校驗和計算代碼非常簡單(與遷飛源代碼提供):
/**
* Calculates the checksum of this string.
*
* @param str The string to calculate the checksum for.
* @return The crc-32 checksum of the bytes.
*/
/* private -> for testing */
static int calculateChecksum(Resource resource, String str) {
final CRC32 crc32 = new CRC32();
BufferedReader bufferedReader = new BufferedReader(new StringReader(str));
try {
String line;
while ((line = bufferedReader.readLine()) != null) {
crc32.update(line.getBytes("UTF-8"));
}
} catch (IOException e) {
String message = "Unable to calculate checksum";
if (resource != null) {
message += " for " + resource.getLocation() + " (" + resource.getLocationOnDisk() + ")";
}
throw new FlywayException(message, e);
}
return (int) crc32.getValue();
}
非常感謝您@Mikhail Chibel!很有用! – AleGallagher