返回顶部
首页 > 资讯 > 精选 >如何集合SpringBoot+Quartz+数据库存储
  • 835
分享到

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

2023-06-29 05:06:20 835人浏览 安东尼
摘要

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

这篇文章主要介绍如何集合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>src/main/resources</directory>            </resource>            <!--解决mybatis-generator-Maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->            <resource>                <directory>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+数据库存储”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 如何集合SpringBoot+Quartz+数据库存储

本文链接: https://lsjlt.com/news/322945.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何集合SpringBoot+Quartz+数据库存储
    这篇文章主要介绍如何集合SpringBoot+Quartz+数据库存储,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!官网:http://www.quartz-scheduler.org/我们所需数据库pom依赖&nb...
    99+
    2023-06-29
  • SpringBoot+Quartz+数据库存储的完美集合
    官网:http://www.quartz-scheduler.org/ 我们所需数据库 pom依赖 <artifactId>spring-boot-starter...
    99+
    2024-04-02
  • SpringBoot结合Quartz实现数据库存储
    目录一、先创建一个SpringBoot项目二、导入依赖 三、 导入DruidConnectionProvider.java(Druid连接池的Quartz扩展类)...
    99+
    2024-04-02
  • VB.NET如何实现集合存储
    这篇文章将为大家详细讲解有关VB.NET如何实现集合存储,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。大多数程序处理对象集合而不是单个的对象。对于集合数据,首先创建一个数组(或者是其他类型的集合,比如Ar...
    99+
    2023-06-17
  • 数据库存储过程如何写
    小编给大家分享一下数据库存储过程如何写,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!存储过程简介SQL语句需要先编译然后执行,而...
    99+
    2024-04-02
  • 数据采集与存储
    1.2 数据采集技术的功能及特点 数据采集技术是指通过各种手段和工具,从各种数据源中采集、提取和处理数据的过程。数据采集技术的主要功能包括: 数据源的识别:通过各种手段找到需要采集数据的来源,包括网站...
    99+
    2023-09-15
    python mysql spark
  • SpringBoot分布式文件存储数据库mongod
    目录1、mongodb服务2、创建springboot项目3、添加mongodb依赖4、application.yml配置5、实体类6、通过MongoRepository实现增删改查...
    99+
    2023-02-02
    SpringBoot mongod SpringBoot分布式文件存储数据库
  • PHP与数据库存储管理的集成
    随着互联网的发展,现代企业的业务已经越来越依赖于计算机的支持与管理,而数据库的重要性也愈发凸显。在这种情况下,无论是企业还是程序员都不可避免地需要使用数据存储管理的技术手段。PHP语言作为互联网最广泛使用的脚本语言之一,其在数据库存储管理方...
    99+
    2023-05-17
    集成 PHP 数据库管理
  • Python 与 Apache 存储结合,如何实现高效数据存储?
    在现代科技领域,数据处理和存储是非常重要的问题。Python 作为一种高级编程语言,广泛应用于数据科学和数据处理领域。同时,Apache 是一个广泛使用的开源软件基金会,提供了许多数据存储和处理工具。本文将介绍 Python 和 Apac...
    99+
    2023-11-01
    接口 apache 存储
  • SpringBoot集成H2内存数据库的方法
    目录前言准备技术栈目录结构pom.xml实体类 UserAddressRepositoryapplication.yml连接配置数据初始化配置h2 web consloe配置代码下载...
    99+
    2024-04-02
  • SpringBoot集成内存数据库Sqlite的实践
    目录目标 为什么 操作步骤工程截图运行 效果完整源代码 目标 在SpringBoot中集成内存数据库Sqlite. 为什么 像H2、hsqldb、derby、sqlite这样的...
    99+
    2024-04-02
  • SpringBoot集成内存数据库hsqldb的实践
    目录目标为什么操作步骤工程截图运行效果总结目标 在SpringBoot中集成内存数据库hsqldb. 为什么 像H2、hsqldb、derby、sqlite这样的内存数据库,小...
    99+
    2024-04-02
  • SpringBoot集成内存数据库Derby的实践
    目录目标为什么操作步骤工程截图运行效果目标 在SpringBoot中集成内存数据库Derby. 为什么 像H2、hsqldb、derby、sqlite这样的内存数据库,小巧可爱...
    99+
    2024-04-02
  • SpringBoot集成内存数据库H2的实践
    目录目标为什么操作步骤工程截图运行效果完整源代码目标 在SpringBoot中集成内存数据库H2. 为什么 像H2、hsqldb、derby、sqlite这样的内存数据库,小巧...
    99+
    2024-04-02
  • Java网页数据采集器如何进行数据存储
    Java网页数据采集器如何进行数据存储,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。简介:作为全球运用最广泛的语言,Java 凭借它的高效性,可移植性(跨平台),代码的健壮...
    99+
    2023-06-17
  • SpringBoot集成Redis数据库,实现缓存管理
    目录一、Redis简介  二、Spring2.0集成Redis  1、核心依赖2、配置文件3、简单测试案例4、自定义序列化配置5、序列化测试三、源代码地址&nbs...
    99+
    2024-04-02
  • SpringBoot中如何处理MySQL中存储的JSON数据?
    目录 一、MySQL中如何保存JSON类型的数据 1.1 建表 1.2 保存一条带json的记录 1.3 查询 二、Springboot操作当前数据库表 2.1 方式一(推荐) 2.2 方式二 JSON(JavaScript Object...
    99+
    2023-09-03
    spring boot mysql json
  • MySQL 数据库如何实现存储时间
    目录1.切记不要用字符串存储日期2.Datetime 和 Timestamp 之间抉择2.1 DateTime 类型没有时区信息的2.2 DateTime 类型耗费空间更大3.再看 ...
    99+
    2024-04-02
  • 如何看sql数据库的存储位置
    要查看SQL数据库的存储位置,可以按照以下步骤进行操作:1. 打开SQL Server Management Studio(SSMS...
    99+
    2023-08-30
    sql数据库
  • 如何修改gitlab数据库存储位置
    GitLab是一个流行的开源代码托管平台,许多企业和开发者使用它来管理他们的代码。GitLab提供了可以自定义的存储位置,这意味着您可以将GitLab数据库的存储位置指定为您选择的任何位置。在本文中,我们将向您展示如何修改GitLab数据库...
    99+
    2023-10-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作