web-dev-qa-db-ja.com

フライウェイ-チェックサムの概念の意味

Flyway移行ツールを学習していますが、チェックサムの概念が明確ではありません。誰かが私に何を説明してもらえますか?それはどのように計算されますか、またはどのように変更できますか?

修復コマンドがチェックサムを再計算することを理解していますが、その違いがわかりません。

ありがとう!

10
AleGallagher

検証メカニズムの一部を形成するFlywayのチェックサムフィールドは、移行スクリプトがデータベースに適用されてから変更されていないことを確認します。これにより、アプリケーションのすべてのインスタンスが同じデータベース構造(コンテンツ)を持つことが保証されます。確認をオフにすることはできますが、オフにすることはお勧めしません。あなたの質問に答える:

とは?

チェックサムとは何かをググってください。 ウィキペディア

それはどのように計算されますか?

SQL移行の場合、FlywayはCRC32クラスを使用してチェックサムを計算します。正確なコードについては、以下を参照してください。

どうすれば変更できますか?

移行のバイナリコンテンツが変更されると、移行のチェックサムが変更されます。移行ファイルの新しいバージョンのチェックサムを計算する必要があるときにDBのチェックサムフィールドを変更してから、DBの値を変更する場合。ただし、そうすることはお勧めしません。あなたはそれをする必要はないはずです、そしてあなたがそれを変えたいという事実はあなたが何か間違ったことをしていることを示しているかもしれません。とにかく、チェックサムの計算コードは非常に単純です(Flywayソースコードのおかげで):

    /**
     * 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();
    }
9
Mikhail Chibel