springmvc的定时任务

简介: springmvc的定时任务


image.png

定时任务需求是springmvc提供的一个常见功能,但是配置特别繁琐,本文将介绍如何配置并且使用定时任务。

1.配置定时任务

需要在spring-mvc的配置文件中加入以下配置。

<task:executor id="executor" pool-size="10" queue-capacity="128" />
  <task:scheduler id="scheduler" pool-size="10" />
  <task:annotation-driven executor="executor"
    scheduler="scheduler" proxy-target-class="true" />

注意:需要在xml引用上加入以下头信息,否则会报异常。

<!-- 任务线程池 -->    
<!-- 任务执行器线程数量(一个任务需要并发执行的线程数) --> 
xmlns:task="http://www.springframework.org/schema/task
<!-- 任务调度器线程数量(根据定时器的个数设置) --> 
http://www.springframework.org/schema/task             
<!-- 启用annotation 识别@Scheduled注解-->       
http://www.springframework.org/schema/task/spring-task-3.0.xsd

在使用时,直接使用@Scheduled注解即可,可以按照下文编写。

@Component
public class SchedulingConfigN {
private static final Logger LOG = LoggerFactory.getLogger(SchedulingConfigN.class);
  @Scheduled(cron = "0/20 * * * * ?") /从第0秒开始,每隔20秒执行一次 从前往后分别是 秒 分 时 日 月 年
                                                              // 如果一个小时执行一次就是 0 0 */1 * * ?
                                                              // 每天的11点执行一次 0 0 11 * * ?
  public void scheduing() {
    System.out.println("定时任务启动1111");   
  }
}

2.从数据库获取定时任务执行频率

上文配置有一个问题,就是如果想更改执行的频率,需要更改代码,然后打包,才能生效。那么是否能在数据库中配置执行频率,通过修改数据库就能够更改呢。下文提供代码供大家参考。

@Configuration
@EnableScheduling
public class JobConfig implements SchedulingConfigurer {
    @Autowired
    @Qualifier("timingTasks")
    TimingTasks timingTasks;
    //获取定时任务的时间service
    @Bean(name={"timingTasks"})
    public TimingTasks timingTasks() {
        return new TimingTasks();
    }
    /**
     * 执行定时任务.
     */
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.addTriggerTask(
            // 1.添加任务内容(Runnable)
            () -> System.out.println("执行定时任务2: " + LocalDateTime.now().toLocalTime()),
            // 2.设置执行周期(Trigger)
            triggerContext -> {
                // 2.1 从数据库获取执行周期
                System.out.println("开始执行");
                List<SaleProductFileBO> resultBO = timingTasks.selectTimingTasks(Long.valueOf(2));
                //获取定时任务的时间
                String cron = resultBO.get(0).getFiles();
                // 2.3 返回执行周期(Date)
                return new CronTrigger(cron).nextExecutionTime(triggerContext);
            });
    }
}

如果大家生产环境有该需求,建议了解和使用xxl-job。开源且好评如潮。


相关文章
|
Java 调度 Spring
SpringMVC定时任务注解实现@Schedule【良心文章】
SpringMVC定时任务注解实现@Schedule【良心文章】
288 0
SpringMVC定时任务注解实现@Schedule【良心文章】
|
XML Java 调度
SpringMvc整合Quartz实现定时任务项目源码
         项目中一直使用Quartz做定时任务,但是一直没有去仔细阅读详细参数配置说明以及它源码,最近花了一点时间做了一个整理。系统的看了一下源码实现并顺手做了一个简单的Demo。 一、说明 spring版本4.0.5、Quartz版本2.2.2 注意定时任务的配置需要spring-context-support-4.0.5.RELEASE.jar进行配置,所以项目中要加入此
2398 0
|
XML Java 调度
springmvc中实现quartz定时任务(每分钟的第3秒执行任务调度方法)
1:实现触发器,最大的问题是jar包的处理(*.jar定时jar和sourcecodesource code): 此处,最关键的jar为第二个,名字最长。 maven依赖: &lt;dependency&gt; &lt;groupId&gt;org.apache.servicemix.bundles&lt;/groupId&gt; &lt;artifactId&g
4336 0
|
6月前
|
设计模式 前端开发 JavaScript
Spring MVC(一)【什么是Spring MVC】
Spring MVC(一)【什么是Spring MVC】
|
5月前
|
设计模式 前端开发 Java
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
79 1
|
5月前
|
前端开发 Java 应用服务中间件
Spring框架第六章(SpringMVC概括及基于JDK21与Tomcat10创建SpringMVC程序)
Spring框架第六章(SpringMVC概括及基于JDK21与Tomcat10创建SpringMVC程序)
|
6月前
|
前端开发 Java 关系型数据库
基于ssm框架旅游网旅游社交平台前后台管理系统(spring+springmvc+mybatis+maven+tomcat+html)
基于ssm框架旅游网旅游社交平台前后台管理系统(spring+springmvc+mybatis+maven+tomcat+html)
|
5月前
|
XML Java 数据格式
SpringMVC的XML配置解析-spring18
SpringMVC的XML配置解析-spring18
|
5月前
|
应用服务中间件
从代码角度戳一下springMVC的运行过程-spring16
从代码角度戳一下springMVC的运行过程-spring16