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

如何集合SpringBoot+Quartz+数据库存储

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

如何集合SpringBoot+Quartz+数据库存储

这篇文章主要介绍如何集合SpringBoot+Quartz+数据库存储,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

官网:http://www.quartz-scheduler.org/

我们所需数据库

如何集合SpringBoot+Quartz+数据库存储

pom依赖

   <artifactId>spring-boot-starter-jdbc</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-quartz</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-thymeleaf</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>            <version>2.1.1</version>        </dependency>        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>${mysql.version}</version>            <scope>runtime</scope>        </dependency>        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <optional>true</optional>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>            <exclusions>                <exclusion>                    <groupId>org.junit.vintage</groupId>                    <artifactId>junit-vintage-engine</artifactId>                </exclusion>            </exclusions>        </dependency>        <dependency>            <groupId>org.quartz-scheduler</groupId>            <artifactId>quartz-jobs</artifactId>            <version>2.2.1</version>        </dependency>        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid-spring-boot-starter</artifactId>            <version>1.1.10</version>        </dependency>    </dependencies>    <build>        <resources>            <resource>                <directory>class="lazy" data-src/main/resources</directory>            </resource>            <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->            <resource>                <directory>class="lazy" data-src/main/java</directory>                <includes>                    <include>**@Component@Slf4jpublic class MyJobFactory extends AdaptableJobFactory {    //这个对象Spring会帮我们自动注入进来    @Autowired    private AutowireCapableBeanFactory autowireCapableBeanFactory;    //重写创建Job任务的实例方法    @Override    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {        Object jobInstance = super.createJobInstance(bundle);        //通过以下方式,解决Job任务无法使用Spring中的Bean问题        autowireCapableBeanFactory.autowireBean(jobInstance);        return super.createJobInstance(bundle);    }}

DruidConnectionProvider

package com.wsy.quartz02.utils;import com.alibaba.druid.pool.DruidDataSource;import org.quartz.SchedulerException;import org.quartz.utils.ConnectionProvider;import java.sql.Connection;import java.sql.SQLException;public class DruidConnectionProvider implements ConnectionProvider {        //JDBC驱动    public String driver;    //JDBC连接串    public String URL;    //数据库用户名    public String user;    //数据库用户密码    public String password;    //数据库最大连接数    public int maxConnection;    //数据库SQL查询每次连接返回执行到连接池,以确保它仍然是有效的。    public String validationQuery;    private boolean validateOnCheckout;    private int idleConnectionValidationSeconds;    public String maxCachedStatementsPerConnection;    private String discardIdleConnectionsSeconds;    public static final int DEFAULT_DB_MAX_CONNECTIONS = 10;    public static final int DEFAULT_DB_MAX_CACHED_STATEMENTS_PER_CONNECTION = 120;    //Druid连接池    private DruidDataSource datasource;        public Connection getConnection() throws SQLException {        return datasource.getConnection();    }    public void shutdown() throws SQLException {        datasource.close();    }    public void initialize() throws SQLException{        if (this.URL == null) {            throw new SQLException("DBPool could not be created: DB URL cannot be null");        }        if (this.driver == null) {            throw new SQLException("DBPool driver could not be created: DB driver class name cannot be null!");        }        if (this.maxConnection < 0) {            throw new SQLException("DBPool maxConnectins could not be created: Max connections must be greater than zero!");        }        datasource = new DruidDataSource();        try{            datasource.setDriverClassName(this.driver);        } catch (Exception e) {            try {                throw new SchedulerException("Problem setting driver class name on datasource: " + e.getMessage(), e);            } catch (SchedulerException e1) {            }        }        datasource.setUrl(this.URL);        datasource.setUsername(this.user);        datasource.setPassword(this.password);        datasource.setMaxActive(this.maxConnection);        datasource.setMinIdle(1);        datasource.setMaxWait(0);        datasource.setMaxPoolPreparedStatementPerConnectionSize(this.DEFAULT_DB_MAX_CACHED_STATEMENTS_PER_CONNECTION);        if (this.validationQuery != null) {            datasource.setValidationQuery(this.validationQuery);            if(!this.validateOnCheckout)                datasource.setTestOnReturn(true);            else                datasource.setTestOnBorrow(true);            datasource.setValidationQueryTimeout(this.idleConnectionValidationSeconds);        }    }        public String getDriver() {        return driver;    }    public void setDriver(String driver) {        this.driver = driver;    }    public String getURL() {        return URL;    }    public void setURL(String URL) {        this.URL = URL;    }    public String getUser() {        return user;    }    public void setUser(String user) {        this.user = user;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public int getMaxConnection() {        return maxConnection;    }    public void setMaxConnection(int maxConnection) {        this.maxConnection = maxConnection;    }    public String getValidationQuery() {        return validationQuery;    }    public void setValidationQuery(String validationQuery) {        this.validationQuery = validationQuery;    }    public boolean isValidateOnCheckout() {        return validateOnCheckout;    }    public void setValidateOnCheckout(boolean validateOnCheckout) {        this.validateOnCheckout = validateOnCheckout;    }    public int getIdleConnectionValidationSeconds() {        return idleConnectionValidationSeconds;    }    public void setIdleConnectionValidationSeconds(int idleConnectionValidationSeconds) {        this.idleConnectionValidationSeconds = idleConnectionValidationSeconds;    }    public DruidDataSource getDatasource() {        return datasource;    }    public void setDatasource(DruidDataSource datasource) {        this.datasource = datasource;    }}

application.yml

server:  servlet:    context-path: /  port: 80spring:  datasource:    #1.JDBC    type: com.alibaba.druid.pool.DruidDataSource    driver-class-name: com.mysql.jdbc.Driver    url: jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf8    username: root    password: 123    druid:      #2.连接池配置      #初始化连接池的连接数量 大小,最小,最大      initial-size: 5      min-idle: 5      max-active: 20      #配置获取连接等待超时的时间      max-wait: 60000      #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒      time-between-eviction-runs-millis: 60000      # 配置一个连接在池中最小生存的时间,单位是毫秒      min-evictable-idle-time-millis: 30000      validation-query: SELECT 1 FROM DUAL      test-while-idle: true      test-on-borrow: true      test-on-return: false      # 是否缓存preparedStatement,也就是PSCache  官方建议MySQL下建议关闭   个人建议如果想用SQL防火墙 建议打开      pool-prepared-statements: true      max-pool-prepared-statement-per-connection-size: 20      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙      filter:        stat:          merge-sql: true          slow-sql-millis: 5000      #3.基础监控配置      web-stat-filter:        enabled: true        url-pattern:     List<ScheduleTrigger> queryScheduleTriggerLst();}

ScheduleTriggerParamMapper

package com.wsy.quartz02.mapper;import com.wsy.quartz02.model.ScheduleTriggerParam;import org.springframework.stereotype.Repository;import java.util.List;@Repositorypublic interface ScheduleTriggerParamMapper {    int deleteByPrimaryKey(Integer param_id);    int insert(ScheduleTriggerParam record);    int insertSelective(ScheduleTriggerParam record);    ScheduleTriggerParam selectByPrimaryKey(Integer param_id);    int updateByPrimaryKeySelective(ScheduleTriggerParam record);    int updateByPrimaryKey(ScheduleTriggerParam record);        List<ScheduleTriggerParam> queryScheduleParamLst(Integer triggerId);}

ScheduleTriggerParam

<select id="queryScheduleParamLst" resultType="com.wsy.quartz02.model.ScheduleTriggerParam">    select <include refid="Base_Column_List"/>    from t_schedule_trigger_param where schedule_trigger_id=#{triggerId}  </select>

ScheduleTrigger

<select id="queryScheduleTriggerLst" resultType="com.wsy.quartz02.model.ScheduleTrigger">    select <include refid="Base_Column_List"/>    from t_schedule_trigger  </select>

QuartzConfiguration

package com.wsy.config;import com.wsy.quartz02.utils.MyJobFactory;import org.quartz.Scheduler;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.config.PropertiesFactoryBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.io.ClassPathResource;import org.springframework.scheduling.quartz.SchedulerFactoryBean;import java.io.IOException;import java.util.Properties;@Configurationpublic class QuartzConfiguration {    @Autowired    private MyJobFactory myJobFactory;    //创建调度器工厂    @Bean        public SchedulerFactoryBean schedulerFactoryBean(){            //1.创建SchedulerFactoryBean            //2.加载自定义的quartz.properties配置文件            //3.设置MyJobFactory            SchedulerFactoryBean factoryBean=new SchedulerFactoryBean();            try {                factoryBean.setQuartzProperties(quartzProperties());                factoryBean.setJobFactory(myJobFactory);                return factoryBean;            } catch (IOException e) {                throw new RuntimeException(e);            }    }    public Properties quartzProperties() throws IOException {        PropertiesFactoryBean propertiesFactoryBean=new PropertiesFactoryBean();        propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties"));        propertiesFactoryBean.afterPropertiesSet();        return propertiesFactoryBean.getObject();    @Bean(name="scheduler")    public Scheduler scheduler(){        return schedulerFactoryBean().getScheduler();}

MyJob

package com.wsy.quartz02.job;import lombok.extern.slf4j.Slf4j;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.springframework.stereotype.Component;import java.util.Date;@Component@Slf4jpublic class MyJob implements Job {    @Override    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {        System.err.println("MyJob是一个空的任务计划,时间:"+new Date().toLocaleString());    }}

如何集合SpringBoot+Quartz+数据库存储

MyJob1

package com.wsy.quartz02.job;import lombok.extern.slf4j.Slf4j;import org.quartz.*;import org.springframework.stereotype.Component;import java.util.Date;@Component@Slf4jpublic class MyJob1 implements Job {    @Override    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {        JobDetail jobDetail =                jobExecutionContext.getJobDetail();        JobDataMap jobDataMap = jobDetail.getJobDataMap();        System.out.println(new Date().toLocaleString()+"-->携带参数个数:"+jobDataMap.size());    }}

如何集合SpringBoot+Quartz+数据库存储

MyJob2

package com.wsy.quartz02.job;import lombok.extern.slf4j.Slf4j;import org.quartz.*;import org.springframework.stereotype.Component;import java.util.Date;@Component@Slf4jpublic class MyJob2 implements Job {    @Override    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {        JobDetail jobDetail =                jobExecutionContext.getJobDetail();        JobDataMap jobDataMap = jobDetail.getJobDataMap();        System.out.println(new Date().toLocaleString()+"-->MyJob2参数传递name="+jobDataMap.get("name")+",score="+                jobDataMap.get("score"));    }}

如何集合SpringBoot+Quartz+数据库存储

Quartz02Controller

package com.wsy.quartz02.controler;import com.wsy.quartz02.model.ScheduleTrigger;import com.wsy.quartz02.service.ScheduleTriggerService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;import java.util.List;@Controller@RequestMapping("/quartz")public class Quartz02Controller {    @Autowired    private ScheduleTriggerService scheduleTriggerService;    @RequestMapping("/list")    public ModelAndView getAll(){        ModelAndView mv = new ModelAndView();        List<ScheduleTrigger> list = scheduleTriggerService.queryScheduleTriggerLst();        mv.addObject("quartzList",list);        mv.setViewName("index");        return mv;    }    @RequestMapping("/edit")    public String editStatus(ScheduleTrigger scheduleTrigger){        int n = scheduleTriggerService.updateByPrimaryKeySelective(scheduleTrigger);        return "redirect:/quartz/list";    }    @RequestMapping("/proSave/{id}")    public ModelAndView proSave(@PathVariable(value = "id") Integer id){        ModelAndView mv=new ModelAndView();        ScheduleTrigger scheduleTrigger = scheduleTriggerService.selectByPrimaryKey(id);        mv.addObject("schedule",scheduleTrigger);        mv.setViewName("edit");        return mv;    }}

ScheduleTriggerService

package com.wsy.quartz02.service;import com.wsy.quartz02.model.ScheduleTrigger;import java.util.List; public interface ScheduleTriggerService {        int deleteByPrimaryKey(Integer id);        int insert(ScheduleTrigger record);        int insertSelective(ScheduleTrigger record);        ScheduleTrigger selectByPrimaryKey(Integer id);        int updateByPrimaryKeySelective(ScheduleTrigger record);        int updateByPrimaryKey(ScheduleTrigger record);                List<ScheduleTrigger> queryScheduleTriggerLst();}

Quartz02Application

package com.wsy.quartz02;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.scheduling.annotation.EnableScheduling;import org.springframework.transaction.annotation.EnableTransactionManagement;@MapperScan("com.wsy.quartz02.mapper")@EnableTransactionManagement@EnableScheduling@SpringBootApplicationpublic class Quartz02Application {    public static void main(String[] args) {        SpringApplication.run(Quartz02Application.class, args);    }}

界面

<!DOCTYPE html><html xmlns:th="http://www.thymeleaf.org"><head>    <meta charset="UTF-8">    <title>quartz定时任务管理</title></head><body><h2 >定时任务</h2><table  align="center" border="1px" width="50%">    <tr>        <td>id</td>        <td>表达式</td>        <td>状态</td>        <td>工作类</td>        <td>分组</td>        <td>操作</td>    </tr>    <tr th:each="q : ${quartzList}">        <td th:text="${q.id}"></td>        <td th:text="${q.cron}"></td>        <td th:text="${q.status}"></td>        <td th:text="${q.job_name}"></td>        <td th:text="${q.job_group}"></td>        <td th:switch ="${q.status} == 0">            <a th:case="true" th:href="@{/quartz/edit(id=${q.id},status=1)}" rel="external nofollow" >启动</a>            <a th:case="false" th:href="@{/quartz/edit(id=${q.id},status=0)}" rel="external nofollow" >停止</a>            <a th:href="@{'/quartz/proSave/'+${q.id}}" rel="external nofollow" >编辑</a>            <a th:href="@{'/add/'}" rel="external nofollow" >增加</a>        </td>    </tr></table></body></html>

edit.html

<!DOCTYPE html><html xmlns:th="http://www.thymeleaf.org"><head>    <meta charset="UTF-8">    <title>修改定时任务</title></head><body><h2>修改定时任务</h2><form th:action="@{/quartz/edit}" method="post">    <input type="hidden" name="id" th:value="${schedule.id}" />    表达式: <input width="300px" type="text" name="cron" th:value="${schedule.cron}" /></br>    工作类: <input width="300px" type="text" name="job_name" th:value="${schedule.job_name}" /></br>    分组:<input width="300px" type="text" name="job_group" th:value="${schedule.job_group}" /></br>    <input type="submit" value="提交"/></form></body></html>

如何集合SpringBoot+Quartz+数据库存储

如何集合SpringBoot+Quartz+数据库存储

如何集合SpringBoot+Quartz+数据库存储

以上是“如何集合SpringBoot+Quartz+数据库存储”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

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

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

如何集合SpringBoot+Quartz+数据库存储

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

下载Word文档

猜你喜欢

如何集合SpringBoot+Quartz+数据库存储

这篇文章主要介绍如何集合SpringBoot+Quartz+数据库存储,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!官网:http://www.quartz-scheduler.org/我们所需数据库pom依赖
2023-06-29

VB.NET如何实现集合存储

这篇文章将为大家详细讲解有关VB.NET如何实现集合存储,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。大多数程序处理对象集合而不是单个的对象。对于集合数据,首先创建一个数组(或者是其他类型的集合,比如Ar
2023-06-17

Java ushort 如何在数据库中进行存储?(java ushort如何在数据库存储 )

在Java编程中,ushort是一种无符号短整型数据类型,它通常用于表示范围在0到65535之间的整数值。当涉及到将ushort数据存储到数据库中时,需要考虑数据库的类型和存储机制。以下是一些常见的方法和注意事项:
Java ushort 如何在数据库中进行存储?(java ushort如何在数据库存储  )
Java2024-12-18

SpringBoot分布式文件存储数据库mongod

MongoDB是一个基于分布式文件存储的NoSQL数据库,由C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中功能最丰富最像关系数据库的
2023-02-02

SpringBoot与本地数据库存储和检索人脸数据

本文详细讲解了如何使用SpringBoot与本地数据库(如MySQL)实现人脸数据的存储和检索。通过SpringBoot项目的搭建、数据库配置、人脸数据的存储和检索API实现,结合数据安全和隐私保护策略,为大家提供了一整套完整的解决方案。希

Java网页数据采集器如何进行数据存储

Java网页数据采集器如何进行数据存储,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。简介:作为全球运用最广泛的语言,Java 凭借它的高效性,可移植性(跨平台),代码的健壮
2023-06-17

一文详解Mongodb数据库,适合大数据存储

在网络交互的过程中,不仅会有数据的传递,也会有新数据的产生。比如我们目前的网站登录注册项目,在用户注册后,我们只是把数据添加到了服务器的内存中,但是程序一旦关闭或者重启,内存中的数据就消失了,服务器会恢复到最初的样子,那注册的用户数据也就没

编程热搜

  • 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动态编译

目录