Quartz笔记

第一个quartz例子

依赖包


        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.3</version>
        </dependency>
package com.example.demo.quartz;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class HelloScheduler {

    public static void main(String[] args) throws SchedulerException {

        // 创建一个JobDetail实例,将该实例与HelloJob Class绑定,然后给他创建唯一标识,属于
        // 哪个组,再调用build方法将其创建出来
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myJob","group1").build();


        //jobDetail里的属性打印

        System.out.println("jobDetail's name "+jobDetail.getKey().getName());
        System.out.println("jobDetail's group "+jobDetail.getKey().getGroup());
        System.out.println("jobDetail's jobClass "+jobDetail.getJobClass().getName());


        //创建trigger实例
        Trigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("myTrigger", "group1")//创建唯一标识,组虽然和jobDetail里的名字相同,但他们不是一回事
                .startNow()//立马开始执行
                .withSchedule(

                        SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()

                        )//每两秒执行一次,一直执行
                .build();


       // 创建Scheduler实例
        SchedulerFactory sfact = new StdSchedulerFactory();
        Scheduler scheduler = sfact.getScheduler();
        scheduler.start();

        //打印当前的时间
        Date date = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sf.format(date));



        scheduler.scheduleJob(jobDetail, trigger);





    }

}
package com.example.demo.quartz;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class HelloJob implements Job {

    @Override
    public void execute(JobExecutionContext arg0) throws JobExecutionException {

        //Calendar calendar = Calendar.getInstance();

        Date date = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sf.format(date));



        // 编写具体业务
        System.out.println("hello world!");



    }

}

2 浅谈job和jobDetail

job定义:实现业务逻辑的任务接口

这里写图片描述

这里写图片描述

这里写图片描述

    由于不同的情景job要传的参数不同,无法通过定义构造函数初始化job,
    所以会新建个job实例然后通过反射机制传参,使用   
    jobExecutionContext 上下文实现

这里写图片描述

这里写图片描述

自定义用户参数并获取

这里写图片描述

package com.example.demo.quartz;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class HelloScheduler {

    public static void main(String[] args) throws SchedulerException {

        // 创建一个JobDetail实例,将该实例与HelloJob Class绑定,然后给他创建唯一标识,属于
        // 哪个组,再调用build方法将其创建出来
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myJob","group1")        
                .usingJobData("message","hello myJob" ) //传入用户自定义的参数
                .usingJobData("FloatJobValue", 3.14F)    //传入用户自定义的参数
                .build();




            //创建trigger实例
        Trigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("myTrigger", "group1")//创建唯一标识,组虽然和jobDetail里的名字相同,但他们不是一回事
                .usingJobData("message","hello myTrigger" ) //传入用户自定义的参数
                .usingJobData("DoubleJobValue", 2.0D)    //传入用户自定义的参数
                .startNow()//立马开始执行
                .withSchedule(

                        SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()

                        )//每两秒执行一次,一直执行
                .build();


       // 创建Scheduler实例
        SchedulerFactory sfact = new StdSchedulerFactory();
        Scheduler scheduler = sfact.getScheduler();
        scheduler.start();

        //打印当前的时间
        Date date = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sf.format(date));



        scheduler.scheduleJob(jobDetail, trigger);





    }

}
package com.example.demo.quartz;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.TriggerKey;

public class HelloJob implements Job {

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {

        //Calendar calendar = Calendar.getInstance();

        Date date = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sf.format(date));



        // 编写具体业务

        //获取jobdetail里的名字和组信息
        JobKey key = context.getJobDetail().getKey();
        System.out.println("my job name and group are :"+key.getName()+key.getGroup());

        //获取Trigger里的名字和组信息
        TriggerKey tkkey = context.getTrigger().getKey();
        System.out.println("my Trigger name and group are :"+tkkey.getName()+tkkey.getGroup());


        //获取jobdetail里自定义的属性值
        JobDataMap dataMap = context.getJobDetail().getJobDataMap();
        String jobMsg = dataMap.getString("message");
        Float FloatJobValue = dataMap.getFloat("FloatJobValue");
        System.out.println("自定义jobd的属性值分别是:"+jobMsg+" ------  "+FloatJobValue);



        //获取Trigger里自定义的属性值
        JobDataMap tdataMap = context.getTrigger().getJobDataMap();
        String TriMsg = tdataMap.getString("message");
        Double DoubleJobValue= tdataMap.getDouble("DoubleJobValue");
        System.out.println("自定义trigger的属性值分别是:"+TriMsg+" ------  "+DoubleJobValue);



        //合并获取jobDetail和Trigger里的参数
        JobDataMap MergeDataMap = context.getMergedJobDataMap();

        //如果job和Trigger里有相同名字的参数,优先显示Trigger里的
        String mes = MergeDataMap.getString("message");
        Double DoubleMes= MergeDataMap.getDouble("DoubleJobValue");
        Float FloatMes = MergeDataMap.getFloat("FloatJobValue");
        System.out.println("自定义trigger和job中的属性值分别是:"+mes+" ------  "+DoubleMes+"-------"+FloatMes);







    }

}

这里写图片描述

通过get和set方法获取用户自定义的参

package com.example.demo.quartz;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.TriggerKey;

public class HelloJob implements Job {

    private String message;
    private Float FloatJobValue;
    private Double DoubleJobValue;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Float getFloatJobValue() {
        return FloatJobValue;
    }

    public void setFloatJobValue(Float floatJobValue) {
        FloatJobValue = floatJobValue;
    }

    public Double getDoubleJobValue() {
        return DoubleJobValue;
    }

    public void setDoubleJobValue(Double doubleJobValue) {
        DoubleJobValue = doubleJobValue;
    }

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {

        // Calendar calendar = Calendar.getInstance();

        Date date = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sf.format(date));

        // 编写具体业务

        // 获取jobdetail里的名字和组信息
        JobKey key = context.getJobDetail().getKey();
        System.out.println("my job name and group are :" + key.getName() + key.getGroup());

        // 获取Trigger里的名字和组信息
        TriggerKey tkkey = context.getTrigger().getKey();
        System.out.println("my Trigger name and group are :" + tkkey.getName() + tkkey.getGroup());



        //通过get和set方法来获取用户自定义的参数
        System.out.println("参数是:"+message+"---------"+FloatJobValue+"-----------"+DoubleJobValue);





        /*
         * //获取jobdetail里自定义的属性值 JobDataMap dataMap =
         * context.getJobDetail().getJobDataMap(); String jobMsg =
         * dataMap.getString("message"); Float FloatJobValue =
         * dataMap.getFloat("FloatJobValue");
         * System.out.println("自定义jobd的属性值分别是:"+jobMsg+" ------  "+FloatJobValue);
         * 
         * 
         * 
         * //获取Trigger里自定义的属性值 JobDataMap tdataMap =
         * context.getTrigger().getJobDataMap(); String TriMsg =
         * tdataMap.getString("message"); Double DoubleJobValue=
         * tdataMap.getDouble("DoubleJobValue");
         * System.out.println("自定义trigger的属性值分别是:"+TriMsg+" ------  "+DoubleJobValue);
         * 
         * 
         * //合并获取jobDetail和Trigger里的参数 JobDataMap MergeDataMap =
         * context.getMergedJobDataMap();
         * 
         * //如果job和Trigger里有相同名字的参数,优先显示Trigger里的 String mes =
         * MergeDataMap.getString("message"); Double DoubleMes=
         * MergeDataMap.getDouble("DoubleJobValue"); Float FloatMes =
         * MergeDataMap.getFloat("FloatJobValue");
         * System.out.println("自定义trigger和job中的属性值分别是:"+mes+" ------  "+DoubleMes+
         * "-------"+FloatMes);
         */

    }

}

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

开始结束时间trigger属性设置

package com.example.demo.quartz;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class HelloScheduler {

    public static void main(String[] args) throws SchedulerException {


        //打印当前的时间
                Date date = new Date();
                SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                System.out.println(sf.format(date));


        //获取距离当前时间3秒后的时间
        date.setTime(date.getTime()+3000);  

        //获取距离当前时间6秒后的时间
        Date endDate = new Date();

        endDate.setTime(endDate.getTime()+6000);    




        // 创建一个JobDetail实例,将该实例与HelloJob Class绑定,然后给他创建唯一标识,属于
        // 哪个组,再调用build方法将其创建出来
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myJob","group1")        
                .build();





            //创建trigger实例
        Trigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("myTrigger", "group1")//创建唯一标识,组虽然和jobDetail里的名字相同,但他们不是一回事
                .startAt(date)//在date指定的那个时间内开始执行
                .endAt(endDate)//在endDATE指定的时间内停止执行
                .withSchedule(

                        SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()

                        )//每两秒执行一次,一直执行
                .build();


       // 创建Scheduler实例
        SchedulerFactory sfact = new StdSchedulerFactory();
        Scheduler scheduler = sfact.getScheduler();
        scheduler.start();
        scheduler.scheduleJob(jobDetail, trigger);





    }

}
package com.example.demo.quartz;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.Trigger;
import org.quartz.TriggerKey;

public class HelloJob implements Job {



    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {

        // Calendar calendar = Calendar.getInstance();

        Date date = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sf.format(date));

        // 编写具体业务

        System.out.println("hello xueer");
        Trigger trigger = context.getTrigger();

        System.out.println("开始时间:"+sf.format(trigger.getStartTime()));
        System.out.println("结束时间:"+sf.format(trigger.getEndTime()));


    }

}

这里写图片描述

package com.example.demo.quartz;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class HelloScheduler {

    public static void main(String[] args) throws SchedulerException {


        //打印当前的时间
                Date date = new Date();
                SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                System.out.println(sf.format(date));






        // 创建一个JobDetail实例,将该实例与HelloJob Class绑定,然后给他创建唯一标识,属于
        // 哪个组,再调用build方法将其创建出来
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myJob","group1")        
                .build();



        //获取距离当前时间4秒后的时间
                date.setTime(date.getTime()+4000L); 

                //4秒后开始执行,且每隔两秒执行一次,第一次执行之后,再重复执行3次
                SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder
                            .newTrigger()
                            .withIdentity("myTrigger", "group1")//创建唯一标识,组虽然和jobDetail里的名字相同,但他们不是一回事
                            .startAt(date)
                            .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).withRepeatCount(3))
                            .build();




        /*
            //4秒钟之后执行,且仅仅执行一次任务
            SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder
                .newTrigger()
                .withIdentity("myTrigger", "group1")//创建唯一标识,组虽然和jobDetail里的名字相同,但他们不是一回事
                .startAt(date)
                .build();
                */


       // 创建Scheduler实例
        SchedulerFactory sfact = new StdSchedulerFactory();
        Scheduler scheduler = sfact.getScheduler();
        scheduler.start();
        scheduler.scheduleJob(jobDetail, trigger);





    }

}

这里写图片描述

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值