欢迎大家关注我的公众号【
老周聊架构
】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。
1、首先要先写定时任务,之前有一篇写过定时任务的文章,没有看的可以点击下面的链接看一下:
SpringBoot项目中集成Quartz实现定时调度任务
定时任务编写好了,剩下的就简单了。
2、编写删除时间大于30天的文件及文件夹的方法
public class DeleteExpiredFile {
private static final String ROOT_DIR_HISTORY_PATH = "/data";
public void deleteExpiredFileTask() {
File file = new File(ROOT_DIR_HISTORY_PATH);
deleteExpiredFile(file);
private void deleteExpiredFile(File file) {
if (!file.exists()) return;
if (!file.isDirectory()) {
determineExpiredFile(file);
} else {
for (File f : file.listFiles()) {
deleteExpiredFile(f);
private void determineExpiredFile(File file) {
long lastModifiedTime = file.lastModified();
long currentTime = new Date().getTime();
long timeInterval = 30 * 24 * 60 * 60 * 1000;
if (currentTime - lastModifiedTime > timeInterval) {
file.delete();
3、定时任务的启动类调用 deleteExpiredFileTask() 这个方法就可以了
1、首先要先写定时任务,之前有一篇写过定时任务的文章,没有看的可以点击下面的链接看一下:SpringBoot项目中集成Quartz实现定时调度任务定时任务编写好了,剩下的就简单了。2、编写删除时间大于30天的文件及文件夹的方法public class DeleteExpiredFile { private static final String ROOT_DIR_HISTORY_PATH = "/data"; public void deleteExpiredFileTask(
1 @SpringBootApplication
2 @EnableScheduling //开启调度任务
3 public class SpringbootSchedulingTasksApplication {
4 ...
springboot定期清理文件
springboot定期清理文件
搬砖需求 今天在使用springboot清理文件 实现使用ThreadPoolTaskScheduler定时触发动态执行需要清理根据文件创建时间来清理指定多少天之前的文件仅供大家参考直接上代码
配置个ThreadPoolTaskScheduler bean
@Bean(“taskScheduler”)
public TaskSch...
之前线上只有一个日志文件,达到了几个G的大小。不好找到某天的日志,也不好排查问题。
因此需求如下:
1.每天生成一个日志文件,当日志文件大于500M的时候自动生成service.2019-0730.0.log, service.2019-0730.1.log …的文件
当前日志在service.log中。
2.将异常的错误日志单独写入到error.log文件中。方便排查错误。切片原理同上。...
SpringBoot MongoDB批量删除指定日期前的文件
Query query = new Query();
LocalDateTime localDateTime = LocalDateTime.of(2021,6,2,0,0,0);
query.addCriteria(Criteria.where("uploadDate").lt(localDateTime)); // 小于指定日期
GridFSFindIterable gridFSFiles = gridFsTemplate.find(que
今天在做定时任务时,发现通过new Date()生成的时间无法与mybatis返回的Date()做like模糊查询,最后发现mybatis返回的Date()类型数据可以直接与String类型做模糊查询,以下为代码。
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Auto...
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// 定时任务执行的代码
3. 创建定时任务
创建一个定时任务的方法,使用`Scheduler`类来创建定时任务:
```java
public void scheduleJob(Date startTime, Date endTime) throws SchedulerException {
// 创建一个Scheduler对象
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// 创建一个JobDetail对象
JobDetail job = JobBuilder.newJob(MyJob.class)
.withIdentity("myJob", "group1")
.build();
// 创建一个Trigger对象
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("myTrigger", "group1")
.startAt(startTime)
.endAt(endTime)
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(60)
.repeatForever())
.build();
// 将Job和Trigger注册到Scheduler中
scheduler.scheduleJob(job, trigger);
// 启动Scheduler
scheduler.start();
上面的代码中,`startTime`和`endTime`参数表示定时任务的开始时间和结束时间。`withSchedule`方法可以设置定时任务的执行策略,这里使用了`SimpleScheduleBuilder`,每隔60秒执行一次,重复执行。
4. 修改定时任务时间
可以通过`Scheduler`类的`rescheduleJob`方法来修改定时任务的时间:
```java
public void rescheduleJob(Date startTime, Date endTime) throws SchedulerException {
// 创建一个Trigger对象
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("myTrigger", "group1")
.startAt(startTime)
.endAt(endTime)
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(60)
.repeatForever())
.build();
// 获取Scheduler对象
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// 修改Trigger
scheduler.rescheduleJob(TriggerKey.triggerKey("myTrigger", "group1"), trigger);
上面的代码中,`startTime`和`endTime`参数表示修改后的定时任务的开始时间和结束时间。`rescheduleJob`方法的第一个参数是原来的Trigger的Key,第二个参数是修改后的Trigger。