QuartZ--Spring中定时任务的实现

最近在做一个拍卖项目中需要用到定时任务,我们采用的框架是spring mvc的,所以我在考虑集成定时任务方式的时候就选择了我们常用的Quartz,主要是因为他的实现方式比较简单,而且我们在做配置的时候也是方便修改的。

7aec54e736d12f2e65433f194dc2d56285356801.jpg

下面我们简单来说下Quartz应用的场景,在我们的项目中,存在一个拍品的有效时常,在这个有效的时常之内任何买家都是可以参与竞价的,当达到拍卖结束时间的时候我们就要通过运算使得这件拍品被价高者得到,这个时候需要生产订单等一系列的操作,那我们在我们的应用中如何知道某个拍品是否达到结束时间并且生成订单等相关操作,这个时候我们就需要定时调度去做这件事情,以帮助我们减少人工开销,说白了就是指定某件事情在什么时候去做!

下面我们就说说如何在我们的Spring框架中集成和使用Quartz,以方便我们程序的使用:

①由于我们是使用maven做项目依赖包管理的,所以我们第一步需要做的是新增我们的Quartz依赖!

1
2
3
4
5
6
7
8
9
10
11
12
< dependency >
   < groupId >org.quartz-scheduler</ groupId >
   < artifactId >quartz</ artifactId >
   < version >1.8.0</ version >
   </ dependency >
< dependency >
< dependency >
     < groupId >commons-collections</ groupId >
     < artifactId >commons-collections</ artifactId >
     < version >20040616</ version >
</ dependency >
        

②前面也说道我们采用Quartz的目的是让他在指定的时间去帮助我们做指定的业务,所以我们需要写出我们的业务代码,我们的业务代码和其他的java类方法实现一样,属于同一层次下!

1
2
3
4
5
6
7
8
9
10
11
12
13
package  com.xiaocui.quartz;
 
public  class  QuartzJob {
     
     public  void  work() {  //这里就是具体的业务代码实现方法,可以建立多个实现不同的业务!
         try  {
             logger.error( "Hello, QuartZ 启动成功了!" );
         catch  (Exception e) {
             logger.error(e, e);
         }
     }
 
}

③前面的两步我们把我们业务要做的事情都准备好了,那最后一步就是让我们的业务嵌入到现有的框架代码中,让他能在指定的时间去执行业务,前面我们说到采用Quartz的原因之一是因为他方便配置,下面我们就采用xml配置文件的方式让他嵌入到我们的框架中!

首先我们在我们的【resources】文件夹创建一个我们的xml文件,这里我命名为【spring-quartz.xml】,里面具体的实现内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<? xml  version = "1.0"  encoding = "UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 
< beans >    
         <!-- 要调用的工作类 -->
         < bean  id = "quartzJob"  class = "com.xiaocui.quartz.QuartzJob" ></ bean >
         
         <!-- 定义调用对象和调用对象的方法 这里就是定义具体的业务代码实现方法-->
         < bean  id = "jobtask"  class = "org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
             <!-- 调用的类 -->
             < property  name = "targetObject" >
                 < ref  bean = "quartzJob" />
             </ property >
             <!-- 调用类中的方法 -->
             < property  name = "targetMethod" >
                 < value >work</ value >
             </ property >
             
         </ bean >
         <!-- 定义触发时间 -->
         < bean  id = "doTime"  class = "org.springframework.scheduling.quartz.CronTriggerBean" >
             < property  name = "jobDetail" >
                 < ref  bean = "jobtask" />
             </ property >
             <!-- cron表达式 -->
             < property  name = "cronExpression" >
                  < value >0 0/1 * * * ?</ value >    <!--这里采用的是QuartZ Cron表达式-->
             </ property >
         </ bean >
         
         
         
         <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序  -->
         < bean  id = "startQuertz"  lazy-init = "false"  autowire = "no"  class = "org.springframework.scheduling.quartz.SchedulerFactoryBean" >
             < property  name = "triggers" >
                 < list >
                     < ref  bean = "doTime" />
                 </ list >
             </ property >
         </ bean >
     
</ beans >

通过上上面的spring-quartz.xml的配置我们的业务代码已经和quartz有了结合,但是这个时候我们的quartz还没有和Spring结合到一起,想要将他们结合到一起只需要一句代码就可以,就是在我们的web.xml启动项中添加启动就可以了,大致代码如下:

1
2
3
4
5
6
< context-param >
     < param-name >contextConfigLocation</ param-name >
         < param-value >classpath:spring.xml,classpath:spring-mybatis.xml,classpath:spring-quartz.xml</ param-value >
         <!-- classpath:spring-quartz.xml 用于做任务调度 任务定时都可以 添加就执行-->
     </ context-param >
< context-param >

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VR(Virtual Reality)即虚拟现实,是一种可以创建和体验虚拟世界的计算机技术。它利用计算机生成一种模拟环境,是一种多源信息融合的、交互式的三维动态视景和实体行为的系统仿真,使用户沉浸到该环境。VR技术通过模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计算机生成的虚拟境界,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间。 VR技术具有以下主要特点: 沉浸感:用户感到作为主角存在于模拟环境的真实程度。理想的模拟环境应该使用户难以分辨真假,使用户全身心地投入到计算机创建的三维虚拟环境,该环境的一切看上去是真的,听上去是真的,动起来是真的,甚至闻起来、尝起来等一切感觉都是真的,如同在现实世界的感觉一样。 交互性:用户对模拟环境内物体的可操作程度和从环境得到反馈的自然程度(包括实时性)。例如,用户可以用手去直接抓取模拟环境虚拟的物体,这时手有握着东西的感觉,并可以感觉物体的重量,视野被抓的物体也能立刻随着手的移动而移动。 构想性:也称想象性,指用户沉浸在多维信息空间,依靠自己的感知和认知能力获取知识,发挥主观能动性,寻求解答,形成新的概念。此概念不仅是指观念上或语言上的创意,而且可以是指对某些客观存在事物的创造性设想和安排。 VR技术可以应用于各个领域,如游戏、娱乐、教育、医疗、军事、房地产、工业仿真等。随着VR技术的不断发展,它正在改变人们的生活和工作方式,为人们带来全新的体验。
VR(Virtual Reality)即虚拟现实,是一种可以创建和体验虚拟世界的计算机技术。它利用计算机生成一种模拟环境,是一种多源信息融合的、交互式的三维动态视景和实体行为的系统仿真,使用户沉浸到该环境。VR技术通过模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计算机生成的虚拟境界,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间。 VR技术具有以下主要特点: 沉浸感:用户感到作为主角存在于模拟环境的真实程度。理想的模拟环境应该使用户难以分辨真假,使用户全身心地投入到计算机创建的三维虚拟环境,该环境的一切看上去是真的,听上去是真的,动起来是真的,甚至闻起来、尝起来等一切感觉都是真的,如同在现实世界的感觉一样。 交互性:用户对模拟环境内物体的可操作程度和从环境得到反馈的自然程度(包括实时性)。例如,用户可以用手去直接抓取模拟环境虚拟的物体,这时手有握着东西的感觉,并可以感觉物体的重量,视野被抓的物体也能立刻随着手的移动而移动。 构想性:也称想象性,指用户沉浸在多维信息空间,依靠自己的感知和认知能力获取知识,发挥主观能动性,寻求解答,形成新的概念。此概念不仅是指观念上或语言上的创意,而且可以是指对某些客观存在事物的创造性设想和安排。 VR技术可以应用于各个领域,如游戏、娱乐、教育、医疗、军事、房地产、工业仿真等。随着VR技术的不断发展,它正在改变人们的生活和工作方式,为人们带来全新的体验。
Spring Boot整合Quartz实现cron定时任务的步骤如下: 1.在pom.xml添加依赖 ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> ``` 2.创建Job类 ``` public class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { // 这里编写具体的定时任务 } } ``` 3.创建JobDetail和Trigger ``` @Configuration public class QuartzConfig { @Bean public JobDetail myJobDetail() { return JobBuilder.newJob(MyJob.class).withIdentity("myJob").storeDurably().build(); } @Bean public Trigger myTrigger() { return TriggerBuilder.newTrigger().forJob(myJobDetail()) .withIdentity("myTrigger").withSchedule(CronScheduleBuilder.cronSchedule("0 0 0 * * ?")).build(); } } ``` 4.启动定时任务 ``` @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Autowired private Scheduler scheduler; @Autowired private Trigger myTrigger; @Autowired private JobDetail myJobDetail; @PostConstruct public void start() throws SchedulerException { scheduler.scheduleJob(myJobDetail, myTrigger); } } ``` 这里的注解`@PostConstruct`表示在Bean初始化之后执行该方法。 5.编写具体的定时任务逻辑 ``` public class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("定时任务执行了!"); } } ``` 完整的代码示例: ``` // MyJob.java public class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("定时任务执行了!"); } } // QuartzConfig.java @Configuration public class QuartzConfig { @Bean public JobDetail myJobDetail() { return JobBuilder.newJob(MyJob.class).withIdentity("myJob").storeDurably().build(); } @Bean public Trigger myTrigger() { return TriggerBuilder.newTrigger().forJob(myJobDetail()) .withIdentity("myTrigger").withSchedule(CronScheduleBuilder.cronSchedule("0 0 0 * * ?")).build(); } } // Application.java @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Autowired private Scheduler scheduler; @Autowired private Trigger myTrigger; @Autowired private JobDetail myJobDetail; @PostConstruct public void start() throws SchedulerException { scheduler.scheduleJob(myJobDetail, myTrigger); } } ``` 这里的定时任务是每天凌晨0点执行一次,并打印一句话。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值