2017-04-06 8 views
2

私はフライウェイ移行ツールを学んでいますが、チェックサムのコンセプトを明確にしていません。誰かが私に何か説明できますか?それはどのように計算されるのですか、それともどのように変更することができますか?フライウェイ - チェックサムの概念の意味

私は再計算したチェックサムの修復コマンドを理解し、私はそれがどのように異なるかを理解していません。

ありがとうございます!

答えて

4

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

何である:あなたの質問に答えますか?

ただ、チェックサムが何であるかをグーグル。 Wikipedia

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

SQL移行の場合、FlywayはCRC32クラスを使用してチェックサムを計算します。正確なコードは下記を参照してください。それは変更することができますどのように

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

/** 
    * 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(); 
    } 
+0

は非常に@Mikhail Chibelをありがとう!非常に便利! – AleGallagher