spring schedule定时任务(二):配置文件的方式

接着上一篇,这里使用spring配置文件的方式生成spring定时任务。

1、相应的web.xml没有什么变化,因此便不再罗列。同样的,相应的java代码业务逻辑改动也不大,只是在原来的基础上去掉@Component和@Scheduled(cron = "0/5 * * * * ?")参数,也就是把这个类和方法变成一个最简单的java类和方法就可以了。

2、既然是配置文件的方式,那么改动大的自然就是pring.xml配置,把原本用注解实现的定时功能放到配置中来,改动后的配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:task="http://www.springframework.org/schema/task"
    xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.1.xsd">

    <!-- 指定相应的包 -->
    <context:component-scan base-package="scheduleTest"/>
    <!-- 指定相应的类 -->
    <bean id="scheTest1" class="scheduleTest.ScheduleTest1"/>

     <!-- 指定要定时任务需要执行的业务逻辑的java类和方法 -->
    <bean id="scheTest11" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject"> <ref local="scheTest1" /> </property>
            <property name="targetMethod">
            <!--  要执行的方法名称  -->
            <value>schTest1</value>
        </property>
        <property name="concurrent" value="true" />
    </bean>

    <!--定义触发的时间 -->
    <bean id="scheTest1Cron" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="scheTest11" />
        </property>
        <property name="cronExpression">
            <value>0/5 * * * * ?</value>
        </property>
    </bean>

    <!--触发器 -->
    <bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
           <list> <ref local="scheTest1Cron" /> </list>
        </property>
    </bean>

</beans>

3、一开始我没有导入其他的jar包,然后启动报错classNotFound,如下:

org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean] for bean with name 'scheTest11' defined in class path resource [spring1.xml]; nested exception is java.lang.ClassNotFoundException: org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean

查了一下后发现这个包没有在spring-context.jar中,而是在spring-context-support.jar中,于是导入这个包。但之后启动继续报错:

java.lang.NoClassDefFoundError: org/quartz/JobDetail

这是说需要quartz这个包,但是没有导入,于是再次导入,启动依旧报错:

java.lang.NoClassDefFoundError: org/springframework/transaction/TransactionException

这个错误曾经见过,我知道是少了spring-tx.jar这个包,于是再次导入,启动之后终于见到想到的结果,五秒执行一次。

至此,使用spring配置文件的方式生成定时任务的功能实现,maven导包最终配置如下:

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.1.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.1.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.1.7.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>4.0.9.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>quartz</groupId>
        <artifactId>quartz</artifactId>
        <version>1.5.2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>4.1.7.RELEASE</version>
    </dependency>
  </dependencies>
时间: 2024-10-12 11:47:56

spring schedule定时任务(二):配置文件的方式的相关文章

spring实现定时任务的两种方式

? Java? 方式一:注解 1.在spring配置文件中加入task的命名空间 123 xmlns:task="http://www.springframework.org/schema/task" http:http://www.springframework.org/schema/task/spring-task-3.0.xsd 2.配置扫描注解 12 <task:annotation-driven /><context:component-scan base-

spring schedule定时任务(一):注解的方式

我所知道的java定时任务的几种常用方式: 1.spring schedule注解的方式: 2.spring schedule配置文件的方式: 3.java类继承TimerTask: 第一种方式的实现: 1.使用maven创建spring项目,schedule在spring-context.jar的包下边,因此需要导入与之相关的包:同时,我配的是spring web项目,也同时导入了spring-web和spring-webmvc的包,如下: <dependency> <groupId&

Spring 加载xml配置文件的方式 ApplicationContext

大家都知道Java读普通文件是通过Basic I/O 中的InputStream.OutStream.Reader.Writer 等实现的.在spring 框架中,它是怎样识别xml这个配置文件的呢? 这就要靠IoC容器的两个接口BeanFactory 和ApplicationContext: BeanFactory (接口) |--------XmlBeanFactory(实现类) ApplicationContext (接口) |-------- ClassPathXmlApplicatio

「spring」定时任务(纯注解方式)

[问题现象] 需要通过纯注解方式启动定时任务,网上搜索到的定时任务大部分都是配置+注解. [问题解决] /** * 定时任务:打印CPU使用率 */@Component@EnableSchedulingpublic class PrintCpuWorker {    @Scheduled(cron="0/10 * *  * * ? ") // 每10秒一次    public void print() {        System.out.println("PrintCpu

Spring加载xml配置文件的方式 ApplicationContext

大家都知道Java读普通文件是通过Basic I/O 中的InputStream.OutStream.Reader.Writer 等实现的.在spring 框架中,它是怎样识别xml这个配置文件的呢? 这就要靠IoC容器的两个接口BeanFactory 和ApplicationContext: BeanFactory (接口) |--------XmlBeanFactory(实现类) ApplicationContext (接口) |-------- ClassPathXmlApplicatio

spring schedule 定时任务

1.主方法的类或者需要执行定时任务的类加上@EnableScheduling注解 2.定时任务的方法加上@Scheduled注解,并加上时间设置 3.定时任务时间设置有两种,一种是用fixedRate,一种是con表达式 3.1fixedRate用法如: @Scheduled(fixedRate = 1000 * 60) fixedRate的value是long类型的毫秒数: 这种形式的定时任务不够灵活,不能根据年月日等设置. 3.2con表达式如: cron表达式详解 Cron表达式是一个字符

Spring Schedule定时任务多线程执行任务配置

@Configuration public class ScheduleConfig implements SchedulingConfigurer { @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { Method[] methods = BatchProperties.Job.class.getMethods(); int defaultPoolSize = 10; int corePoo

Spring框架笔记(二十三)——基于配置文件的方式来配置 AOP

配置实现IOC功能时,我们采用了配置文件xml和注解两类方式实现.实现AOP功能时我们也可以使用两种方式.前面我们介绍了AOP基于注解的实现方式,本文我将采用基于配置文件的方式完成从原始对象bean.切面bean.切点及通知配置的方法. 用基于 XML 的配置声明切面 除了使用 AspectJ 注解声明切面, Spring 也支持在 Bean 配置文件中声明切面. 这种声明是通过 aop schema 中的 XML 元素完成的. 正常情况下, 基于注解的声明要优先于基于 XML 的声明. 通过

SpringBoot之旅 -- 定时任务两种(Spring Schedule 与 Quartz 整合 )实现

相关文章 Spring Boot 相关文章目录 前言 最近在项目中使用到定时任务,之前一直都是使用Quartz 来实现,最近看Spring 基础发现其实Spring 提供 Spring Schedule 可以帮助我们实现简单的定时任务功能.下面说一下两种方式在Spring Boot 项目中的使用. Spring Schedule 实现定时任务 Spring Schedule 实现定时任务有两种方式 1. 使用XML配置定时任务, 2. 使用 @Scheduled 注解. 因为是Spring Bo