从零开始的spring之在spring 中加入 Quartz

虽然公司的项目中一直在用,但一直没时间看,正好在家闲着没事,就看了下。

Spring 的基础配置 不再多说。

默认已经配置好spring 并且能够运行。

默认有一定的java基础 并且对spring框架有最基本的认识

默认项目构建用的是maven。

一、先试做个小demo:

JobTest

个人理解:让一个任务执行。需要三个东西:

1、 任务的定义。

2、 执行任务的时机,方式。

3、 负责执行任务的东西。

三个东西 分别 对应 任务 调度器,调度工厂。

代码:

public static void main(String[] args) throws SchedulerException, InterruptedException {
		Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
		scheduler.start();
		 JobDetail build = JobBuilder.newJob(HelloJob.class).withIdentity("job1","group1").build();
		 Trigger trigger = TriggerBuilder.newTrigger()
			      .withIdentity("trigger1", "group1")
			      .startNow()
			            .withSchedule(SimpleScheduleBuilder.simpleSchedule()
			              .withIntervalInSeconds(1)
			              .repeatForever())            
			      .build();
		scheduler.scheduleJob(build, trigger);
		Thread.sleep(60000);
		scheduler.shutdown();
		
	}




public class HelloJob implements Job{

	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		System.out.println("执行");
	}

}

1、 调度工厂:

Scheduler

 负责执行 通过调度器执行调度任务。

2、 JobDetail 任务

定义任务。定义任务名称 job1 组(先不研究) 以及目标类HelloJob

(目标类必须实现job接口,并且实现其默认的调度方法)

3、 调度器:Trigger

定义执行方式。

 

通过调度工厂来开启定时任务,关闭定时任务。执行定时任务。

       以上代码执行过后报错。

Failed to load classorg.slf4j.impl.StaticLoggerBinder

 

官方解释:

This warning message is reported when theorg.slf4j.impl.StaticLoggerBinder class could not be loaded into memory. Thishappens when no appropriate SLF4J binding could be found on the class path.Placing one (and only one) of slf4j-nop.jar slf4j-simple.jar,slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar on the class pathshould solve the problem.

 

所以我导入了slf4j-simple 。

 

在代码中加上了睡眠时间 让当前线程处于睡眠状态,让scheduler 过会再shutdown

此时 运行成功。每隔一秒输出一次。

 

一、Maven 增加三个dependency

<!--quartz 定时器 -->
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>2.2.3</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-simple</artifactId>
			<version>1.7.25</version>
		</dependency>

一、增加一个配置文件 applicationContext-job

1、配置一个任务:

	<bean id="jobtest1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
	       <!-- 配置目标类 -->
       		<property name="targetClass" value="per.hps.job.JobUtil"/>
       		<!-- 配置目标方法 -->
       		<property name="targetMethod" value="executeJob"></property>
       </bean>

注意class 。

配置好目标类 和方法。

注意: 目标类 不需要实现或者继承某类

              目标方法必须是static

       2、配置一个调度器

基于SimpleTrigge 的调度器  

<!-- 配置任务调度器  制定调度任务的 执行方式-->
       	<bean id = "trigger1" class = "org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
       		<property name="jobDetail" ref="jobtest1"></property>
       		<property name="startDelay" value="0" /><!-- 调度工厂实例化后,经过0秒开始执行调度 -->  
        <property name="repeatInterval" value="2000" /><!-- 每2秒调度一次 -->  
       	</bean>


指定执行计划。以及执行任务。

还有一种调度器CronTriggerBean 有比上面更具体的调度,写cron表达式 来设置执行计划。

格式: [] [] [小时] [] [] [] []
序号     说明       是否必填      允许填写的值       允许的通配符
 1           
秒               是                  0-59                   , - * /
 2           
分               是                  0-59                   , - * /
 3          
小时            是                  0-23                    , - * /
 4          
日               是                  1-31                     , - * ? / L W
 5          
月               是           1-12 or JAN-DEC        , - * /
 6          
周              是            1-7 or SUN-SAT          , - * ? / L #
 7          
年               否         empty 或 1970-2099      , - * /

 

Cron的格式。这边先记一下后续研究。

<bean id = "trigger2" class = "org.springframework.scheduling.quartz.CronTriggerFactoryBean">
       		<property name="jobDetail" ref="jobtest1"/>
       		<property name="cronExpression" value="0/30 * * * * ?"></property>
       	</bean>
3、配置一个调度工厂。
<!-- 配置调度工厂  负责注册所有的调度器-->
       <bean class = "org.springframework.scheduling.quartz.SchedulerFactoryBean">
       		<property name="triggers">
       			<list>
       				<ref bean="trigger2"/>
       			</list>
       		</property>
       </bean>


将所有的调度器 注入进去。

Triggers 是个 可变参数。

用list 注入。

 

 

 

至此结束,我试着用javaconfig 在java项目里配置了一下,就是把xml 全部转换成注解配置了一下。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值