在Spring中使用quartz

写了一个自动去moofeel网站签到领金币魔币的程序,想要每天早上九点自动运行,于是考虑在Spring中用quartz实现

用maven创建 web工程,可参考在ECLIPSE中使用maven插件创建webapp类型项目

引入spring 和 quartz包

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>  
		    <groupId>org.quartz-scheduler</groupId>  
		    <artifactId>quartz</artifactId>  
		    <!-- 2.1.6 not good in spring  -->
		    <version>${quartz.version}</version>  
		</dependency> 
其中spring版本3.x,quartz版本1.x,用2. x的时候,不太兼容,报错:“no setter found for property 'cronExpression' in class ......”,所以还是

		<spring.version>3.1.3.RELEASE</spring.version>
		<quartz.version>1.8.6</quartz.version>

在web.xml中配置spring监听

<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:applicationContext.xml
		</param-value>
	</context-param>
	<!-- 默认找/WEB-INF/applicationContext.xml, 如果配置contextConfigLocation则从contextConfigLocation来找配置 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

applicationContext.xml为spring的配置文件

在其中配置一个jobDetail,使用JobDetailBean,该类在context-support包里,引入spring-webmvc的时候已经包含了它

<bean name="jobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
	<property name="applicationContextJobDataKey" value="applicationContext"/>
	<property name="jobClass" value="job.MoofeelSignJob"/>
	<property name="jobDataAsMap">
		<map>
			<entry key="size" value="10"></entry>
		</map>
	</property>
	</bean>
jobDetail的jobClass是自己定义的任务类,实现StatefulJob,是有状态的,也可以实现无状态的用于并发,

内容如下:

public class MoofeelSignJob implements StatefulJob{
	@Override
	public void execute(JobExecutionContext jctx) throws JobExecutionException {
		// TODO Auto-generated method stub
		Map dataMap = jctx.getJobDetail().getJobDataMap();
		ApplicationContext ctx = (ApplicationContext) dataMap.get("applicationContext");
		MoofeelSign moofeel =  (MoofeelSign) ctx.getBean("moofeelSign");
		try {
			moofeel.sign();
//			moofeel.test();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
配置一个cronTrigger,里面配置每天8点58分触发,格式是秒、分、时、日、月、周。。。

属性jobDetail为刚才配置的jobDetail

	<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail" ref="jobDetail" />
		<!-- 8:48:45  moofeel sign everyday-->
		<property name="cronExpression"  value="45 58 8 * * ?" />
	</bean>
最后配置SchedulerFactoryBean,加入所有的triggers

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
	<property name="triggers">
		<list>
			<ref bean="cronTrigger" />
		</list>
	</property>
</bean>
OK了,启动即可,run on server,每天都会运行。

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。 Quartz的优势: 1、Quartz是一个任务调度框架(库),它几乎可以集成到任何应用系统。 2、Quartz是非常灵活的,它让您能够以最“自然”的方式来编写您的项目的代码,实现您所期望的行为 3、Quartz是非常轻量级的,只需要非常少的配置 —— 它实际上可以被跳出框架来使用,如果你的需求是一些相对基本的简单的需求的话。 4、Quartz具有容错机制,并且可以在重启服务的时候持久化(”记忆”)你的定时任务,你的任务也不会丢失。 5、可以通过Quartz,封装成自己的分布式任务调度,实现强大的功能,成为自己的产品。6、有很多的互联网公司也都在使用Quartz。比如美团 Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企业级应用更好的使用Quartz进行任务的调度。   课程说明:在我们的日常开发,各种大型系统的开发少不了任务调度,简单的单机任务调度已经满足不了我们的系统需求,复杂的任务会让程序猿头疼, 所以急需一套专门的框架帮助我们去管理定时任务,并且可以在多台机器去执行我们的任务,还要可以管理我们的分布式定时任务。本课程从Quartz框架讲起,由浅到深,从使用到结构分析,再到源码分析,深入解析QuartzSpring+Quartz,并且会讲解相关原理, 让大家充分的理解这个框架和框架的设计思想。由于互联网的复杂性,为了满足我们特定的需求,需要对Spring+Quartz进行二次开发,整个二次开发过程都会进行讲解。Spring被用在了越来越多的项目, Quartz也被公认为是比较好用的定时器设置工具,学完这个课程后,不仅仅可以熟练掌握分布式定时任务,还可以深入理解大型框架的设计思想。
Spring Boot 使用 Quartz 非常简单,只需要按照以下步骤: 1. 添加依赖 在 pom.xml 文件添加 Quartz 依赖: ```xml <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> </dependency> ``` 2. 配置 QuartzSpring Boot 应用程序,可以通过 `@Bean` 注解将 Quartz 配置为 Spring Bean。在配置文件,可以使用 `quartz.properties` 文件或者直接使用 Java 代码进行配置。 以下是使用 Java 代码配置 Quartz 的示例: ```java @Configuration public class QuartzConfig { @Bean public JobDetail jobDetail() { return JobBuilder.newJob().ofType(MyJob.class).storeDurably().withIdentity("MyJob").withDescription("My Job").build(); } @Bean public Trigger trigger(JobDetail job) { return TriggerBuilder.newTrigger().forJob(job).withIdentity("MyTrigger").withDescription("My Trigger").withSchedule(CronScheduleBuilder.cronSchedule("0 0/5 * * * ?")).build(); } @Bean public Scheduler scheduler(Trigger trigger, JobDetail job, DataSource dataSource) throws SchedulerException { StdSchedulerFactory factory = new StdSchedulerFactory(); factory.initialize(); Scheduler scheduler = factory.getScheduler(); scheduler.setJobFactory(springBeanJobFactory()); scheduler.getContext().put("dataSource", dataSource); scheduler.scheduleJob(job, trigger); scheduler.start(); return scheduler; } @Bean public SpringBeanJobFactory springBeanJobFactory() { return new SpringBeanJobFactory(); } } ``` 在上面的示例,定义了一个 `MyJob` 类,该类实现了 `org.quartz.Job` 接口。然后使用 `JobBuilder` 创建 `JobDetail` 对象,并将 `MyJob` 类型指定为 Job 类型。接下来,使用 `TriggerBuilder` 创建 `Trigger` 对象,并将其与 `JobDetail` 绑定。最后,创建一个 `Scheduler` 对象,并将 `JobDetail` 和 `Trigger` 对象传递给它,并启动调度器。 3. 创建 Job 类 在上面的示例,我们定义了一个 `MyJob` 类,用于执行需要定时执行的任务。以下是 `MyJob` 类的示例代码: ```java public class MyJob implements Job { private static final Logger logger = LoggerFactory.getLogger(MyJob.class); @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { logger.info("Executing My Job ..."); // 执行需要执行的任务 } } ``` 4. 测试 现在,我们已经完成了 Quartz 的配置和 Job 类的创建。我们可以启动应用程序并等待定时任务的执行。如果一切正常,应该会看到类似以下的输出: ``` INFO c.e.q.MyJob - Executing My Job ... ``` 这就是使用 QuartzSpring Boot 执行定时任务的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

day walker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值