定时任务同步文件修改(热部署功能尝试)

手写的嵌入式服务器想增加热部署功能,主要是一些静态文件。所以做了这个尝试。
原理是用定时任务每隔一段时间查看文件修改日期,和上一次进行比较,如果不相同,则同步文件到目标地址。
MonitorTask.java

package com.shy.code;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.TimerTask;

/**
 * 定时任务类
 */
public class MonitorTask extends TimerTask {
    private File[] files;//要监听的文件列表
    private Map<File,Long> modifyTimeMap = new HashMap<>();
    private File destDir;//目标文件目录

    /**
     * @param srcDir 源文件目录
     * @param destDir 目标文件目录
     */
    public MonitorTask(File srcDir,File destDir) {
        this.destDir = destDir;
        files = srcDir.listFiles();
        assert files != null;
        for (File file : files) {
            modifyTimeMap.put(file,file.lastModified());
            Util.copyFile(file,destDir);
        }
    }

    /**
     * 执行定时任务
     */
    @Override
    public void run() {
        assert files != null;
        for (File file : files) {
            long lastModified = file.lastModified();
            if(lastModified != modifyTimeMap.get(file)) {//比较文件修改时间和map中的修改时间
                System.out.println(file.getName()+"修改了");
                Util.copyFile(file,destDir);//同步修改过的文件
                modifyTimeMap.put(file,lastModified);//更新map中的记录
            }
        }
    }
}

Util.java

package com.shy.code;

import java.io.*;

public class Util {

    /**
     * 复制文件
     * @param srcFile 源文件
     * @param destDir 目标文件路径
     */
    public static void copyFile(File srcFile, File destDir){
        try {
            File destFile = new File(destDir,srcFile.getName());
            BufferedInputStream bin = new BufferedInputStream(new FileInputStream(srcFile));
            BufferedOutputStream bot = new BufferedOutputStream(new FileOutputStream(destFile));
            int len;
            byte[] bt = new byte[1024];
            while((len = bin.read(bt)) != -1) {
                bot.write(bt,0,len);
            }
            bot.close();
            bin.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Demo.java

package com.shy.code;

import java.io.*;
import java.util.Timer;
import java.util.TimerTask;

public class Demo {
    public static void main(String[] args) throws UnsupportedEncodingException {
        File src = new File("C:\\src");
        File dest = new File("C:\\dest");
        Timer timer = new Timer(true);//true,设为守护线程
        TimerTask timerTask = new MonitorTask(src,dest);
        timer.schedule(timerTask, 0,1000);//每隔1s执行
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MD5校验码:f4f9ea3f7bcc3375192be61dc110cb58 1、本软件是定时自动备份软件。 2、备份任务自动拷贝文件文件大小或修改时间变化的文件 3、MyCopy.exe是配置界面,该文件生成配置文件mycopy.ini,并能显示系统运行状态。 4、MyCopyTask.exe是执行拷贝任务的程序,它根据mycopy.ini配置的信息定时进行拷贝,在休眠状态下每5秒钟检查一次是否到达任务指定的拷贝时间。拷贝过程中出现错误,记录log.ini文件,但不会终止拷贝进程。 5、MyCopy.exe配置界面里有“启动”按钮把运行状态改为“运行”,并启动MyCopyTask.exe程序;“终止”按钮把运行状态改为“终止”,MyCopyTask.exe检测到系统状态时为“终止”则自动退出。“退出”按钮退出配置界面,但不会终止MyCopyTask.exe程序。“暂停”也会推出MyCopyTask.exe程序,但下次启动时,从上次暂停的任务开始继续拷贝。 6、MyCopyTask.exe运行时托盘上会显示图标。 7、要实现拷贝任务的自动启动,可以把MyCopyTask.exe加入到windows系统的“启动”菜单中,但配置文件中的运行状态一定是“启动”,否则程序会自动退出。 8、程序拷贝文件时意外终止,可以坚持mycopy.ini文件中的[系统状态]是否有“半个文件”,如果有说明“运行信息”中包含的文件没有拷贝完整。 9、如果因为某种原因错过了任务执行时机的话,拷贝程序会在启动后补回错过的拷贝任务。 10、任务名和文件路径中不能出现","(半角逗号) 11、标准版只记录log.ini文件,健康提示版当任务执行完之后会弹出提示信息。
除了部署定时清理log文件的脚本之外,Tomcat还可以部署其他一些必要的定时任务,以提高系统的稳定性和性能。以下是一些常见的定时任务建议: 1. 缓存清理:定期清理Tomcat中的缓存,以释放内存和磁盘空间。可以使用定时任务定期删除过期的缓存文件或清理缓存目录。 2. 日志备份:定期备份Tomcat的日志文件,以便在需要时进行审计或故障排除。可以使用定时任务将日志文件复制到备份目录,或者压缩并存档旧的日志文件。 3. 定时重启:定期重启Tomcat服务器,以避免内存泄漏等问题导致的性能下降。可以使用定时任务调用Tomcat的管理接口来执行重启操作。 4. 资源监控:定期监控Tomcat服务器的资源使用情况,例如CPU利用率、内存占用等。可以使用定时任务调用系统命令或使用Java API来获取这些信息,并进行适当的处理或报警。 5. 定时备份:定期备份Tomcat服务器上的关键数据和配置文件。可以使用定时任务将这些文件复制到远程服务器或者备份存储设备上,以保证数据的安全性和可恢复性。 请注意,在部署定时任务时,确保任务的执行时间和频率不会对Tomcat服务器的性能产生过大的影响,避免任务过于频繁或耗时过长。另外,建议在生产环境中使用可靠的定时任务调度器,如Quartz等,以确保任务的准确执行和故障恢复能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值