spring定时任务是指什么?如何实现?

2020-04-25 11:07:58 java常见问答 6897

了解过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架构师的相关内容记得来关注本站消息哦。