定时任务quartz

之前做了一个上传压缩文件到ftp服务的功能,为了防止有些文件没有按正常流程被删除,做一个定时任务每天定时扫描ftp服务器并删除压缩文件,防止积压。

引入依赖

        <dependency>
            <groupId>com.zenpower</groupId>
            <artifactId>zenos-quartz-spring-boot-starter</artifactId>
        </dependency>

在yml文件配置连接信息

由于服务配置文件在nacos上,我不便展示。可自行搜索一下如何配置。

在项目启动类加注解

//你的定时任务所在的包名
@QuartzTaskScan(basePackages = "com.company.test.quart")

编写定时任务代码

注意:获取ftp连接方法不是通用的,你们需要修改成自己的,以下只是案例。

/**
 * 定时删除ftp服务的zip文件、redis中存储的zip文件信息
 * 每天凌晨1点执行
 *
 */

@Slf4j
@DisallowConcurrentExecution
@PersistJobDataAfterExecution
@CronSchedule(cron = "0 0 1 * * ?")
//@CronSchedule(cron = "0/10 * * * * ?")
@QuartzTask(
        trigger = @QuartzTrigger(key = @Key(name = "DeleteZipQuartzTaskTrigger")),
        jobDetail = @QuartzJobDetail(key = @Key(name = "DeleteZipQuartzTaskJob"), jobClass = DeleteZipQuartz.class)
)
public class DeleteZipQuartz extends TenantQuartzJob {
    @Autowired
    private FtpInfoFeignApi ftpInfoFeignApi;

    @Autowired
    private RedisTemplate redisTemplate;

    @Override
    protected void executeTenantInternal(JobExecutionContext content) throws JobExecutionException {

        String tenant = TenantThreadLocal.getTenant();
        if (tenant == null) {
            throw new BusinessException("定时任务无法获取租户信息");
        }

        FtpInfoDto ftpInfo = ftpInfoFeignApi.getFtpInfoDto();

        if (ftpInfo == null) {
            throw new BusinessException("定时任务无法获取ftp连接信息");
        } else {

            String filePath = ftpInfo.getBasePath() + "/存储路径/";
            try (Ftp ftp = new Ftp(ftpInfo.getAddress(), Integer.parseInt(ftpInfo.getPort()), ftpInfo.getUsername(), ftpInfo.getPassword(), Charsets.UTF_8)) {
                ftp.setMode(FtpMode.Passive);
                // 获取指定路径下的所有文件名
                List<String> fileNames = ftp.ls(filePath);
                for (String fileName : fileNames) {
                    // 如果是zip文件,则删除
                    if (fileName.endsWith(".zip")) {
                        ftp.delFile(filePath + fileName);
                        String key = "zipFileID:"+fileName.substring(0, 36);
                        redisTemplate.delete(key);

                    }
                }

            } catch (Exception e) {
                log.error("定时任务删除ftp压缩文件失败: {}", e.getMessage(), e);
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值