java - 当前运行计划尚未完成时启动计划 Cron4j
问题描述
我正在使用 Cron4j 为数据库创建备份计划。假设我们有 2 个时间表,第一个在 5.00 pm 开始,第二个在 5.30 pm 开始,两者都在同一天。我不知道如果第一个计划的备份时间大于 30 分钟会发生什么。我假设第二个计划仍然会开始并且可能会破坏数据库,因为第一个计划还没有完成并且数据库没有更新。在这种情况下我该怎么办?
解决方案
您可以使用自定义名称创建线程并将您的备份进程放入其中。下次你试着按名字找到他。如果他会被发现 - gackup 正在工作。
Set<Thread> threads = Thread.getAllStackTraces().keySet();
boolean isWorking = threads.stream().anyMatch(t -> t.getName().equals("My backup is working"));
if (!isWorking) {
Runnable task = () -> {
Thread.currentThread().setName("My backup is working");
//some code of run backup
System.out.println("start backup");
};
Thread thread = new Thread(task);
System.out.println("Done!");
thread.start();
}
推荐阅读
- mysql - Spark MySql 连接器 Jar
- sql - 如何以特定格式转置 SQL 中的表?
- excel - 比较excel中的两列,并复制第二列底部的差异
- .net - C# JSON:反序列化 Web API 中枚举中的字符串?
- python - glob.glob 在读取多个 csv 文件时返回一个空列表
- typescript - 实现 webview 和处理回调
- domain-driven-design - XML 生成器类的 DDD 组件
- laravel - 如何使用租赁 laravel 从存储文件夹中获取图像
- javascript - 这个 jQuery 的 JavaScript 等价物是什么?
- r - 根据data.table中一列的值更改多列的值