• Quartz定时任务


    Quartz定时任务

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。

    原理图

    springboot整合Quartz

    1. 依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-quartz</artifactId>
    </dependency>
    

    2.配置

    @Configuration
    public class OrderQuartzConfig {
    	
    	//定义任务详情
    	@Bean
    	public JobDetail orderjobDetail() {
    		//指定job的名称和持久化保存任务
    		return JobBuilder
    				.newJob(OrderQuartz.class) // 引入下面的类
    				.withIdentity("orderQuartz")
    				.storeDurably()
    				.build();
    	}
    	//定义触发器
    	@Bean
    	public Trigger orderTrigger() {
    		/*SimpleScheduleBuilder builder = SimpleScheduleBuilder.simpleSchedule()
    				.withIntervalInMinutes(1)	//定义时间周期
    				.repeatForever();*/
    		CronScheduleBuilder scheduleBuilder 
    			= CronScheduleBuilder.cronSchedule("0 0/1 * * * ?");
    		return TriggerBuilder
    				.newTrigger()
    				.forJob(orderjobDetail())
    				.withIdentity("orderQuartz")
    				.withSchedule(scheduleBuilder).build();
    	}
    }
    

    3.任务执行类

    @Component
    public class OrderQuartz extends QuartzJobBean{
    
    	@Autowired
    	private OrderMapper orderMapper;
    
    	/**当用户订单提交30分钟后,如果还没有支付.则交易关闭
    	 * 现在时间 - 订单创建时间 > 30分钟  则超时
    	 * new date - 30 分钟 > 订单创建时间
    	 */
    	@Override
    	@Transactional
    	protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
    		//设定30分钟超时
    		Calendar calendar = Calendar.getInstance();
    		calendar.add(Calendar.MINUTE, -30);
    		Date date = calendar.getTime();
    		Order order = new Order();
    		order.setStatus(6);
    		order.setUpdated(new Date());
    		UpdateWrapper<Order> updateWrapper = new UpdateWrapper<>();
    		updateWrapper.eq("status", "1").lt("created",date);
    		orderMapper.update(order, updateWrapper);
    		System.out.println("定时任务执行");
    	}
    }
    
  • 相关阅读:
    我们的回忆

    出差
    恍惚
    七夕
    K8S命令(一)——Node相关
    K8S命令(二)——查询相关
    [转载]为什么你应该(从现在开始就)写博客
    替代JDK日期的开源项目:jodatime
    使用getElementById获取xml中的指定元素
  • 原文地址:https://www.cnblogs.com/zpKang/p/13563054.html
Copyright © 2020-2023  润新知