我的编程空间,编程开发者的网络收藏夹
学习永远不晚

springboot创建的web项目如何整合Quartz框架

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

springboot创建的web项目如何整合Quartz框架

这篇“springboot创建的web项目如何整合Quartz框架”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springboot创建的web项目如何整合Quartz框架”文章吧。

介绍

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

quartz可以在某一个有规律的时间点干某件事,是一个任务调度框架,可以被集成到java的各种应用中使用,quartz框架可以支持分布式任务处理

基于springboot创建的web项目整合Quartz框架

整体代码结构

springboot创建的web项目如何整合Quartz框架

导入依赖

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

创建quartz_demo数据库,执行tables_mysql_innodb.sql文件创建对应表,下面是文件内容

## In your Quartz properties file, you'll need to set# org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate### By: Ron Cordell - roncordell#  I didn't see this anywhere, so I thought I'd post it here. This is the script from Quartz to create the tables in a MySQL database, modified to use INNODB instead of MYISAM.DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;DROP TABLE IF EXISTS QRTZ_LOCKS;DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;DROP TABLE IF EXISTS QRTZ_TRIGGERS;DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;DROP TABLE IF EXISTS QRTZ_CALENDARS;CREATE TABLE QRTZ_JOB_DETAILS(SCHED_NAME VARCHAR(120) NOT NULL,JOB_NAME VARCHAR(190) NOT NULL,JOB_GROUP VARCHAR(190) NOT NULL,DESCRIPTION VARCHAR(250) NULL,JOB_CLASS_NAME VARCHAR(250) NOT NULL,IS_DURABLE VARCHAR(1) NOT NULL,IS_NONCONCURRENT VARCHAR(1) NOT NULL,IS_UPDATE_DATA VARCHAR(1) NOT NULL,REQUESTS_RECOVERY VARCHAR(1) NOT NULL,JOB_DATA BLOB NULL,PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP))ENGINE=InnoDB;CREATE TABLE QRTZ_TRIGGERS (SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(190) NOT NULL,TRIGGER_GROUP VARCHAR(190) NOT NULL,JOB_NAME VARCHAR(190) NOT NULL,JOB_GROUP VARCHAR(190) NOT NULL,DESCRIPTION VARCHAR(250) NULL,NEXT_FIRE_TIME BIGINT(13) NULL,PREV_FIRE_TIME BIGINT(13) NULL,PRIORITY INTEGER NULL,TRIGGER_STATE VARCHAR(16) NOT NULL,TRIGGER_TYPE VARCHAR(8) NOT NULL,START_TIME BIGINT(13) NOT NULL,END_TIME BIGINT(13) NULL,CALENDAR_NAME VARCHAR(190) NULL,MISFIRE_INSTR SMALLINT(2) NULL,JOB_DATA BLOB NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP))ENGINE=InnoDB;CREATE TABLE QRTZ_SIMPLE_TRIGGERS (SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(190) NOT NULL,TRIGGER_GROUP VARCHAR(190) NOT NULL,REPEAT_COUNT BIGINT(7) NOT NULL,REPEAT_INTERVAL BIGINT(12) NOT NULL,TIMES_TRIGGERED BIGINT(10) NOT NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))ENGINE=InnoDB;CREATE TABLE QRTZ_CRON_TRIGGERS (SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(190) NOT NULL,TRIGGER_GROUP VARCHAR(190) NOT NULL,CRON_EXPRESSION VARCHAR(120) NOT NULL,TIME_ZONE_ID VARCHAR(80),PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))ENGINE=InnoDB;CREATE TABLE QRTZ_SIMPROP_TRIGGERS  (    SCHED_NAME VARCHAR(120) NOT NULL,    TRIGGER_NAME VARCHAR(190) NOT NULL,    TRIGGER_GROUP VARCHAR(190) NOT NULL,    STR_PROP_1 VARCHAR(512) NULL,    STR_PROP_2 VARCHAR(512) NULL,    STR_PROP_3 VARCHAR(512) NULL,    INT_PROP_1 INT NULL,    INT_PROP_2 INT NULL,    LONG_PROP_1 BIGINT NULL,    LONG_PROP_2 BIGINT NULL,    DEC_PROP_1 NUMERIC(13,4) NULL,    DEC_PROP_2 NUMERIC(13,4) NULL,    BOOL_PROP_1 VARCHAR(1) NULL,    BOOL_PROP_2 VARCHAR(1) NULL,    PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),    FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)    REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))ENGINE=InnoDB;CREATE TABLE QRTZ_BLOB_TRIGGERS (SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(190) NOT NULL,TRIGGER_GROUP VARCHAR(190) NOT NULL,BLOB_DATA BLOB NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))ENGINE=InnoDB;CREATE TABLE QRTZ_CALENDARS (SCHED_NAME VARCHAR(120) NOT NULL,CALENDAR_NAME VARCHAR(190) NOT NULL,CALENDAR BLOB NOT NULL,PRIMARY KEY (SCHED_NAME,CALENDAR_NAME))ENGINE=InnoDB;CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_GROUP VARCHAR(190) NOT NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP))ENGINE=InnoDB;CREATE TABLE QRTZ_FIRED_TRIGGERS (SCHED_NAME VARCHAR(120) NOT NULL,ENTRY_ID VARCHAR(95) NOT NULL,TRIGGER_NAME VARCHAR(190) NOT NULL,TRIGGER_GROUP VARCHAR(190) NOT NULL,INSTANCE_NAME VARCHAR(190) NOT NULL,FIRED_TIME BIGINT(13) NOT NULL,SCHED_TIME BIGINT(13) NOT NULL,PRIORITY INTEGER NOT NULL,STATE VARCHAR(16) NOT NULL,JOB_NAME VARCHAR(190) NULL,JOB_GROUP VARCHAR(190) NULL,IS_NONCONCURRENT VARCHAR(1) NULL,REQUESTS_RECOVERY VARCHAR(1) NULL,PRIMARY KEY (SCHED_NAME,ENTRY_ID))ENGINE=InnoDB;CREATE TABLE QRTZ_SCHEDULER_STATE (SCHED_NAME VARCHAR(120) NOT NULL,INSTANCE_NAME VARCHAR(190) NOT NULL,LAST_CHECKIN_TIME BIGINT(13) NOT NULL,CHECKIN_INTERVAL BIGINT(13) NOT NULL,PRIMARY KEY (SCHED_NAME,INSTANCE_NAME))ENGINE=InnoDB;CREATE TABLE QRTZ_LOCKS (SCHED_NAME VARCHAR(120) NOT NULL,LOCK_NAME VARCHAR(40) NOT NULL,PRIMARY KEY (SCHED_NAME,LOCK_NAME))ENGINE=InnoDB;CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON QRTZ_JOB_DETAILS(SCHED_NAME,REQUESTS_RECOVERY);CREATE INDEX IDX_QRTZ_J_GRP ON QRTZ_JOB_DETAILS(SCHED_NAME,JOB_GROUP);CREATE INDEX IDX_QRTZ_T_J ON QRTZ_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);CREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP);CREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME);CREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);CREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE);CREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);CREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE);CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS(SCHED_NAME,NEXT_FIRE_TIME);CREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE);CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME);CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);CREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);CREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP);CREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);CREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);commit;

配置quartz

server:  port: ${PORT:12011}  servlet:    session:      timeout: 86400s # session有效期(xxx秒)      cookie:        http-only: false # 如果为true, 浏览器脚本将无法访问cookie        secure: false # 如果为true, 则仅通过https连接发送cookie, http无法携带cookie    context-path:  # 程序上下文路径配置spring:  application:    name: quartz-demo  aop:    proxy-target-class: true    auto: true  datasource:    url: jdbc:mysql://localhost:3306/quartz_demo    username: root    password: 123456    driver-class-name: com.mysql.jdbc.Driver  # 配置日期格式化  jackson:    date-format: yyyy-MM-dd HH:mm:ss  #时间戳统一转换为指定格式    time-zone: GMT+8  # 时区修改为东8区  quartz:    # 将任务等保存化到数据库    job-store-type: jdbc    # 程序结束时会等待quartz相关的内容结束    wait-for-jobs-to-complete-on-shutdown: true    # QuartzScheduler启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录    overwrite-existing-jobs: true    properties:      org:        quartz:          # scheduler相关          scheduler:            # scheduler的实例名            instanceName: scheduler            instanceId: AUTO          # 持久化相关          jobStore:            class: org.quartz.impl.jdbcjobstore.JobStoreTX            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate            # 表示数据库中相关表是QRTZ_开头的            tablePrefix: QRTZ_            useProperties: false            # 配置集群            # 是否加入集群            isClustered: true            # 容许的最大作业延长时间            clusterCheckinInterval: 20000          # 线程池相关          threadPool:            class: org.quartz.simpl.SimpleThreadPool            # 线程数            threadCount: 10            # 线程优先级            threadPriority: 5            threadsInheritContextClassLoaderOfInitializingThread: truemybatis-plus:  global-config:    db-config:      logic-delete-field: is_deleted      logic-delete-value: 1      logic-not-delete-value: 0  configuration:    log-impl: org.apache.ibatis.logging.stdout.StdOutImpllogging:  level:    com.my.quartz: debug

添加sys_job表

CREATE TABLE `sys_job` (  `id` bigint(11) NOT NULL AUTO_INCREMENT,  `job_id` varchar(100) DEFAULT NULL,  `job_name` varchar(255) DEFAULT NULL,  `job_group_name` varchar(255) DEFAULT NULL,  `invoke_target` varchar(255) NOT NULL,  `cron_expression` varchar(50) DEFAULT NULL,  `misfire_policy` varchar(255) DEFAULT NULL COMMENT 'cron计划策略0=默认,1=立即触发执行,2=触发一次执行,3=不触发立即执行',  `status` varchar(10) DEFAULT NULL COMMENT '任务状态(0正常 1暂停)',  `concurrent` varchar(10) DEFAULT NULL COMMENT '是否并发执行(0允许 1禁止)',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

写两条数据

springboot创建的web项目如何整合Quartz框架

依次实现mvc三层

mapper层的xml文件

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.my.quartz.boot.mapper.SysJobMapper">    <resultMap id="BaseResultMap" type="com.my.quartz.boot.SysJob">        <id column="id" jdbcType="BIGINT" property="id" />        <result column="job_id" jdbcType="VARCHAR" property="jobId" />        <result column="job_name" jdbcType="VARCHAR" property="jobName" />        <result column="job_group_name" jdbcType="VARCHAR" property="jobGroupName" />        <result column="invoke_target" jdbcType="VARCHAR" property="invokeTarget" />        <result column="cron_expression" jdbcType="VARCHAR" property="cronExpression" />        <result column="misfire_policy" jdbcType="VARCHAR" property="misfirePolicy" />        <result column="status" jdbcType="VARCHAR" property="status" />        <result column="concurrent" jdbcType="VARCHAR" property="concurrent" />    </resultMap>    <sql id="Base_Column_List">        t.id, t.job_id jobId, t.job_name jobName, t.job_group_name jobGroupName, t.invoke_target invokeTarget, t.cron_expression cronExpression, t.misfire_policy misfirePolicy, t.status, t.concurrent    </sql></mapper>

mapper接口

public interface SysJobMapper extends BaseMapper<SysJob> {}

service接口

public interface SysJobService extends IService<SysJob> {}

service接口实现

@Servicepublic class SysJobServiceImpl extends ServiceImpl<SysJobMapper, SysJob> implements SysJobService {    @Autowired    private Scheduler scheduler;    @Autowired    private ScheduleUtils scheduleUtils;        @PostConstruct    public void init() throws SchedulerException, TaskException {        scheduler.clear();        List<SysJob> jobList = baseMapper.selectList(null);        for (SysJob job : jobList) {            scheduleUtils.createScheduleJob(scheduler, job);        }    }}

controller代码

@RestController@RequestMapping("/job")public class SysJobController {    @Resource    private SysJobService sysJobService;    @Resource    private ScheduleUtils scheduleUtils;    @Resource    private Scheduler scheduler;    @PostMapping("/add")    public Object add(@RequestBody SysJob entity) throws SchedulerException, TaskException {        sysJobService.save(entity);        scheduleUtils.createScheduleJob(scheduler, entity);        return "ok";    }}

ScheduleUtils 定时任务工具类

@Componentpublic class ScheduleUtils {    @Autowired    private Scheduler scheduler;        public TriggerKey getTriggerKey(String jobName, String jobGroup) {        return TriggerKey.triggerKey(jobName, jobGroup);    }        public JobKey getJobKey(String jobName, String jobGroup) {        return JobKey.jobKey(jobName, jobGroup);    }        public void createScheduleJob(Scheduler scheduler, SysJob job) throws SchedulerException, TaskException {        // 构建job信息        String jobName = job.getJobId() + "_" + job.getJobName();        String jobGroupName = job.getJobGroupName();        //TODO 反射动态获取Job实现类        //构建job实例        JobDetail jobDetail = JobBuilder.newJob(QuartzJobImpl.class)                .withIdentity(getJobKey(jobName, jobGroupName))                .build();        jobDetail.getJobDataMap().put("QuartzJobExecutionData", job);        // 表达式调度构建器        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());        cronScheduleBuilder = handleCronScheduleMisfirePolicy(job, cronScheduleBuilder);        // 按新的cronExpression表达式构建一个新的trigger        CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(jobName, jobGroupName))                .withSchedule(cronScheduleBuilder).build();        // 放入参数,运行时的方法可以获取        jobDetail.getJobDataMap().put("QuartzJobExecutionData", job);        // 判断是否存在        if (scheduler.checkExists(getJobKey(jobName, jobGroupName))) {            // 防止创建时存在数据问题 先移除,然后在执行创建操作            scheduler.deleteJob(getJobKey(jobName, jobGroupName));        }        //创建定时任务调度        scheduler.scheduleJob(jobDetail, trigger);        // 暂停任务 规定 0启动 1暂停        if (job.getStatus().equals("1")) {            scheduler.pauseJob(getJobKey(jobName, jobGroupName));        }    }        public void deleteScheduleJob(SysJob sysJob) throws SchedulerException {        scheduler.deleteJob(getJobKey(sysJob.getJobId() + "_" + sysJob.getJobName(), sysJob.getJobGroupName()));    }        public CronScheduleBuilder handleCronScheduleMisfirePolicy(SysJob sysJob, CronScheduleBuilder cronScheduleBuilder) throws TaskException {        switch (sysJob.getMisfirePolicy()) {            case "0":                return cronScheduleBuilder;            case "1":                return cronScheduleBuilder.withMisfireHandlingInstructionIgnoreMisfires();            case "2":                return cronScheduleBuilder.withMisfireHandlingInstructionFireAndProceed();            case "3":                return cronScheduleBuilder.withMisfireHandlingInstructionDoNothing();            default:                throw new TaskException("任务失败策略 '" + sysJob.getMisfirePolicy()                        + "' 不能在cron计划任务中使用", TaskException.Code.CONFIG_ERROR);        }    }}

创建一个Job实现类,只是一个简单实现类,没有对方法添加参数

@Slf4j@Componentpublic class QuartzJobImpl implements Job {    @Autowired    private ApplicationContext context;    @SneakyThrows    @Override    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {        SysJob sysJob = new SysJob();        BeanUtils.copyProperties(jobExecutionContext.getMergedJobDataMap().get("QuartzJobExecutionData"), sysJob);        log.info("正在执行任务");        String invokeTarget = sysJob.getInvokeTarget();        String beanName = invokeTarget.split("\\.")[0];        String methodName = invokeTarget.split("\\.")[1];        Object bean = context.getBean(beanName);        Class<?> clazz = bean.getClass();        Method method = clazz.getMethod(methodName);        method.invoke(bean);        log.info("已结束任务");        System.out.println();    }}

创建最终任务执行类,执行函数级别的定时任务,数据库中的invoke_target是和这里放入spring中的名称相同的,quartz_target.hello最终执行的函数就是hello函数

@Slf4j@Component("quartz_target")public class QuartzJobExe {    @Resource    private Scheduler scheduler;    public void hello() throws Exception {        System.out.println("[job]实例执行...hello..." + System.currentTimeMillis());    }    public void action() throws Exception {        System.out.println("[job]实例执行...action..." + System.currentTimeMillis());    }}

最终代码结构

springboot创建的web项目如何整合Quartz框架

启动spring boot之后的任务状态

springboot创建的web项目如何整合Quartz框架

使用postman工具类添加一个任务

springboot创建的web项目如何整合Quartz框架

然后在代码中添加一个对应的方法

springboot创建的web项目如何整合Quartz框架

重新启动springboot的运行结果

springboot创建的web项目如何整合Quartz框架

以上就是关于“springboot创建的web项目如何整合Quartz框架”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

springboot创建的web项目如何整合Quartz框架

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

springboot创建的web项目如何整合Quartz框架

这篇“springboot创建的web项目如何整合Quartz框架”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“spring
2023-07-02

如何手工搭建ABP框架Web项目

本篇文章为大家展示了如何手工搭建ABP框架Web项目,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。ABP是 ASP.NET Boilerplate Project 的简称。ABP是基于DDD(领域驱
2023-06-04

如何搭建合适的Web框架

如何搭建合适的Web框架,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。之前在Web开发框架推导一文中我们一步步的搭建了一个开发框架。在当时的情况下,还算满足需求。但是随着项
2023-06-16

IDEA创建SpringBoot项目整合mybatis时mysql-connector-java报错如何解决

本文小编为大家详细介绍“IDEA创建SpringBoot项目整合mybatis时mysql-connector-java报错如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“IDEA创建SpringBoot项目整合mybatis时my
2023-07-05

Springboot整合Dubbo教程之项目创建和环境搭建的示例分析

这篇文章主要介绍Springboot整合Dubbo教程之项目创建和环境搭建的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:1. 使用IDEA新建一个Maven项目新建项目选择Maven后,点击nex
2023-05-30

如何进行VS2008 Web创建项目的分析

这期内容当中小编将会给大家带来有关如何进行VS2008 Web创建项目的分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。下面主要讲述VS 2008 Web,怎样创建VS 2008 Web的相关内容。这些
2023-06-17

如何挑选最适合项目的PHP框架?

根据您的项目需求和偏好,选择适合的 php 框架。laravel 适合小型到中型项目,因为它易于使用且功能丰富。symfony 适合大型、复杂的项目,因为它提供了灵活性、可扩展性和企业级功能。具体选择还取决于项目类型、性能、开发体验、社区支
如何挑选最适合项目的PHP框架?
2024-05-23

IDEA创建SpringBoot项目整合mybatis时mysql-connector-java报错异常的详细分析

最近工作中发现了个错误,分享给同样遇到这个问题的朋友,这篇文章主要给大家介绍了关于IDEA创建SpringBoot项目整合mybatis时mysql-connector-j报错异常的详细分析,需要的朋友可以参考下
2023-02-28

如何根据项目规模选择合适的PHP框架?

根据项目规模选择 php 框架时,可考虑:小规模项目:轻量级框架(如 slim、microweber、aura.router)中型项目:全栈框架(如 symfony、laravel、zend framework)大型项目:高性能框架(如 p
如何根据项目规模选择合适的PHP框架?
2024-05-23

如何在Golang项目中选择适合的前端框架?

在Golang项目中选择适合的前端框架一直是开发者们关注的话题。随着前端技术的不断发展,前端框架也层出不穷,如何根据项目需求来选择适合的前端框架是至关重要的。本文将介绍在Golang项目中选择前端框架的一些常见考虑因素,并提供具体的代码示例
如何在Golang项目中选择适合的前端框架?
2024-03-05

如何衡量Brainstorm框架对项目或创意的影响力

衡量Brainstorm框架对项目或创意的影响力可以通过以下几种方式:创意产出:衡量Brainstorm框架对项目或创意的影响力可以观察到通过Brainstorm框架产生的创意数量和质量。比如,可以统计Brainstorm会议中提出的创意数
如何衡量Brainstorm框架对项目或创意的影响力
2024-03-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录