利用flyway的checkSum判断文件是否被修改

CheckSum



import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.charset.Charset;
import java.util.zip.CRC32;


public class CheckSum {

    public static void main(String[] args) {
        try {
            new CheckSum().checksum();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public  void checksum() throws Exception {
        CRC32 crc32 = new CRC32();
        Charset encoding = Charset.forName("UTF-8");
        Reader reader = null;
        try {
            ClassLoader classLoader =    Thread.currentThread().getContextClassLoader();
            InputStream inputStream = classLoader.getResourceAsStream("xxxx.txt");
            reader = new BomStrippingReader(new InputStreamReader(inputStream, encoding));
            String line;
            while((line = readLine(reader)) != null) {
                crc32.update(trimLineBreak(line).getBytes("UTF-8"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }  finally {
            if (reader != null) {
                reader.close();
            }
        }

        System.out.println((int)crc32.getValue());;
    }

    public String readLine(Reader reader) {
        try {
            StringBuilder line = new StringBuilder();
            int c;
            while ((c = reader.read()) != -1) {
                char ch = (char) c;
                line.append(ch);
                if (ch == '\n') {
                    break;
                }
            }
            if (line.length() == 0) {
                return null;
            }
            return line.toString();
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    public String trimLineBreak(String str) {
        if (!hasLength(str)) {
            return str;
        }
        StringBuilder buf = new StringBuilder(str);
        while (buf.length() > 0 && isLineBreakCharacter(buf.charAt(buf.length() - 1))) {
            buf.deleteCharAt(buf.length() - 1);
        }
        return buf.toString();
    }

    public boolean hasLength(String str) {
        return str != null && str.length() > 0;
    }

    private boolean isLineBreakCharacter(char ch) {
        return '\n' == ch || '\r' == ch;
    }

}

BomStrippingReader



import java.io.FilterReader;
import java.io.IOException;
import java.io.PushbackReader;
import java.io.Reader;


public class BomStrippingReader extends FilterReader {
    private static final int EMPTY_STREAM = -1;
    private static final char BOM = '\ufeff';

    /**
     * Creates a new BOM-stripping reader.
     *
     * @param in a Reader object providing the underlying stream.
     * @throws NullPointerException if <code>in</code> is <code>null</code>
     */
    public BomStrippingReader(Reader in) throws IOException {
        super(new PushbackReader(in));
        PushbackReader pbr = (PushbackReader) this.in;
        int firstChar = pbr.read();
        if (firstChar != EMPTY_STREAM && firstChar != BOM) {
            pbr.unread(firstChar);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flyway是一个开源的数据库迁移工具,它可以帮助开发者在应用程序部署和数据库迭代的程中管理和升级数据库结构。 Fly执行SQL文件的规则如下: 1.文件的命名规则 Flyway要求使用特定的名规则来识别SQL脚本。SQL文件应该按照以下格式命名:V[版本号]__[描述].sql,其中: - [版本号]是一个数字,表示脚本的版本号,可以是任何长度。版本号应该按自然顺序递增,例如:1、2、3、4、5、...、100、101、102等。 - [描述]是一个可选的文本描述,用双下划线分隔。描述可以包含任何字符,但是不能包含双下划线。 例如,一个名为V1__create_user_table.sql的SQL文件表示一个版本为1的数据库脚本,用于创建一个用户表。 2. SQL文件的位置 Flyway默认会在classpath下的db/migration目录中查找SQL文件。也可以通过配置修改SQL文件的位置。 3. SQL文件的执行顺序 Flyway会按照版本号的顺序依次执行SQL脚本。如果某个版本的脚本尚未执行,那么它会被执行。 4. SQL文件的回滚 Flyway支持回滚SQL脚本。如果某个版本的脚本发生了错误,可以使用Flyway来回滚该版本的脚本。Flyway会自动检测SQL脚本中的回滚语句,并在需要时执行回滚操作。 5. SQL文件的编写 SQL脚本应该包含标准的SQL语句,例如CREATE TABLE、ALTER TABLE、INSERT INTO等。SQL脚本中可以包含变量,Flyway会在运行时将变量替换为实际的值。变量的格式为${变量名},例如:${username}、${password}等。 以上就是Flyway执行SQL文件的规则。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值