了解过spring框架的小伙伴们应该对spring中的定时任务不陌生吧,那么不管你是否还记得,有兴趣的朋友跟小编一起来复习一遍吧,看看spring定时任务是什么?怎么去实现呢?
其实这个spring定时任务,从名字就能看出来其作用,就是在spring框架中如果实现了一个定时任务,那么框架就会定时调用并实现该任务,这其实没什么好深入探究的,下面主要还是来看看如何在spring中如何实现一个定时任务吧。以定时删除项目upload目录下的所有不需要的文件以及目录为例:
分析步骤:
1. 获取到项目绝对路径
2. 删除不需要的文件
3. 实现方式spring的定时任务
具体实现:
1.1 实现一个spring的task需要遵循以下步骤:
1. FileCleatTask类需要使用@Component注解;
2. 定时任务方法需要注解@Scheduled并且方法不能有返回值和参数;
1.2 配置spring-task.xml文件;
<beans< p="">
....
这里引人springtask的task和task.xsd
....
>
1.3 FileClearTask.java
import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class FileClearTask { //每天凌晨4:40执行删除图片操作 //@Scheduled(cron="0 40 4 * * ?") @Scheduled(cron = "*/30 * * * * ?") //每5秒执行一次 public void deletePic() { System.out.println("time=" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") .format(System.currentTimeMillis())); //列出图片目录的图片 String path = getWebrootPath(); File uploadFile = new File(path, "upload"); if (uploadFile.exists()) { String uploadPath = uploadFile.getAbsolutePath(); if (uploadPath != null) { deleteFile(uploadPath, uploadPath); } } } /** * 获取根目录 * @return */ private final static String getWebrootPath() { String root = FileClearTask.class.getResource("/") .getFile(); try { root = new File(root) .getParentFile() .getParentFile() .getCanonicalPath(); root += File.separator; } catch (IOException e) { throw new RuntimeException(e); } return root; } private void deleteFile(String rootPath, String path) { File pathFile = new File(path); if (pathFile.exists()) { if (pathFile.isDirectory()) { File[] fileArr = pathFile.listFiles(); for (int i = 0; i < fileArr.length; i++) { File childFile = fileArr[i]; if (childFile.exists()) { if (childFile.isDirectory()) { //是目录递归删除 deleteFile(rootPath, childFile.getAbsolutePath()); } //是文件并且不是根目录并且数据库website中不存在记录删除 if (!childFile.getAbsolutePath() .equals(rootPath) && !exsitsWebsite(childFile.getName())) { childFile.delete(); } } } } //是文件并且不是根目录并且数据库website中不存在记录删除 if (!pathFile.getAbsolutePath() .equals(rootPath) && !exsitsWebsite(pathFile.getName())) { pathFile.delete(); } } } /** * 数据库website表中中是否存在 * @param name * @return */ private boolean exsitsWebsite(String name) { //查询数据库实现数据库是否存在判断... return false; } }
那么以上就是spring定时任务的所有内容了,还想了解更多java架构师的相关内容记得来关注本站消息哦。