六)定时任务持久化

  • If you‘re using JDBC-Jobstore, you will need a DataSource for its use.
  • It is recommended that your DataSource max connection size be configured to be at least the number of worker threads in the thread pool plus three.
│  pom.xml
│
└─src
    └─main
        ├─java
        │  └─cn
        │      └─zno
        │          └─job
        │                  Breathe.java
        │                  Main.java
        │
        └─resources
                Beans-Quartz.xml
                db.properties
                quartz.properties
                tables_oracle.sql

项目地址:https://github.com/witaste/quartz.git

所需依赖:

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <!-- 定时任务 -->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz-jobs</artifactId>
            <version>2.2.2</version>
        </dependency>
        <!-- ojdbc6 -->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3.0</version>
        </dependency>

        <!-- dbcp2 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <version>2.1.1</version>
        </dependency>
    </dependencies>

Beans-Quartz.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:task="http://www.springframework.org/schema/task"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:util="http://www.springframework.org/schema/util"
   xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">

    <task:executor id="threadPoolTaskExecutor" pool-size="1" />
    <util:properties id="config" location="classpath:db.properties" />

    <bean id="dataSourceAlpha" class="org.apache.commons.dbcp2.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="#{config[‘jdbc.driverClassName‘]}" />
        <property name="url" value="#{config[‘jdbc.url‘]}" />
        <property name="username" value="#{config[‘jdbc.username‘]}" />
        <property name="password" value="#{config[‘jdbc.password‘]}" />
        <property name="defaultAutoCommit" value="true" />
    </bean>
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="jobFactory">
            <bean class="org.springframework.scheduling.quartz.SpringBeanJobFactory" />
        </property>
        <property name="dataSource" ref="dataSourceAlpha" />
        <property name="configLocation" value="classpath:quartz.properties" />
        <property name="applicationContextSchedulerContextKey" value="applicationContextKey" />
        <property name="startupDelay" value="0" />
        <property name="overwriteExistingJobs" value="true" />
        <property name="exposeSchedulerInRepository" value="true" />
        <property name="taskExecutor" ref="threadPoolTaskExecutor" />
        <property name="triggers">
            <list>
                <ref bean="cronTrigger_1" />
            </list>
        </property>
    </bean>

    <bean id="cronTrigger_1"
        class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="jobDetail_1" />
        <property name="cronExpression" value="* * * * * ?" />
    </bean>
    <bean id="jobDetail_1"
        class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
        <property name="jobClass" value="cn.zno.job.Breathe" />
    </bean>
    <bean id="breath" class="cn.zno.job.Breathe" />
</beans>

quartz.properties

#============================================================================
#                 Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName = QuartzScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.skipUpdateCheck=true

#============================================================================
#                 Configure JobStore
#============================================================================
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
org.quartz.jobStore.tablePrefix = QSMSE_

tables_oracle.sql

建好表

注意以下建议:

连接池的连接数 = threadPoolTaskExecutor + 3

时间: 2024-08-24 10:24:58

六)定时任务持久化的相关文章

【Quartz】将定时任务持久化到数据库

> 参考的优秀文章 Lesson 9: Job Stores > 用数据库存储定时任务信息 之前的文章所做的demo是将定时任务的信息保存在内存中的,见以下配置 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore 如果用内存记录定时任务信息,应用重新启动后,定时任务信息将会丢失.比如,用户A通过系统设置1小时后执行Z操作,设置好后的,因系统重新启动,新启动的系统将会丢失“1小时后执行Z操作”的定时任务. 如果,我们需要在系统意外(或

Kubernetes 系列(六):持久化存储 PV与PVC(一)

在使用容器之后,我们需要考虑的另外一个问题就是持久化存储,怎么保证容器内的数据存储到我们的服务器硬盘上.这样容器在重建后,依然可以使用之前的数据.但是显然存储资源和 CPU 资源以及内存资源有很大不同,为了屏蔽底层的技术实现细节,让用户更加方便的使用,Kubernetes便引入了 PV 和 PVC 两个重要的资源对象来实现对存储的管理. 一.概念 PV 的全称是:PersistentVolume(持久化卷),是对底层的共享存储的一种抽象,PV 由管理员进行创建和配置,它和具体的底层的共享存储技术

Redis 详解 (六) RDB 持久化

目录 1.RDB 简介 2.触发方式 ①.自动触发 ②.手动触发 3.恢复数据 4.停止 RDB 持久化 5.RDB 的优势和劣势 6.RDB 自动保存的原理  前面我们说过,Redis 相对于 Memcache 等其他的缓存产品,有一个比较明显的优势就是 Redis 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储.这几种丰富的数据类型我们花了两篇文章进行了详细的介绍,接下来我们要介绍 Redis 的另外一大优势——持久化. 由于 R

基于SpringBoot &amp; Quartz完成定时任务分布式单节点持久化

构建项目 我们使用idea开发工具创建一个SpringBoot项目,pom.xml依赖配置如下所示: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>

Redis介绍使用及进阶

目录: 一.介绍 二.缓存问题 三.Redis内存滥用 四.键命名规范 五.Redis使用场景 六.持久化操作 七..Net Core 使用redis 简单介绍 一.介绍 1. 高性能-- Redis能读的速度是110000次/s,写的速度是81000次/s .c语言实现距离系统更近.数据存储在内存中.采用了epoll,非阻塞I/O, 2. 原子性--  Redis的所有操作都是原子性的 3. 特性—可设置过期键.支持publish/subscribe发布与订阅.通知等 4. 数据类型—支持St

redis 基础

一 redis数据类型redis支持5种类型的数据类型,它描述如下的:1. 字符串 Redis字符串是字节序列.Redis字符串是二进制安全的,这意味着他们有一个已知的长度没有任何特殊字符终止,所以你可以存储任何东西,512兆为上限.2. 哈希 Redis的哈希是键值对的集合. Redis的哈希值是字符串字段和字符串值之间的映射,因此它们被用来表示对象.3. 列表 Redis的列表是简单的字符串列表,排序插入顺序.您可以添加元素到Redis的列表的头部或尾部. 列表的最大长度为 232 - 1

初学者必须掌握的redis 基础

这篇文章总结了常用的redis基础知识,希望初学者能够从中受益. 一 redis数据类型 redis支持5种类型的数据类型,它描述如下的: 1. 字符串 Redis字符串是字节序列.Redis字符串是二进制安全的,这意味着他们有一个已知的长度没有任何特殊字符终止,所以你可以存储任何东西,512兆为上限. 2. 哈希 Redis的哈希是键值对的集合. Redis的哈希值是字符串字段和字符串值之间的映射,因此它们被用来表示对象. 3. 列表 Redis的列表是简单的字符串列表,排序插入顺序.您可以添

第一行代码

今天看打了一篇推荐<第一行代码 Android>(郭霖),是郭大神的, Android:一 简介 框架 已发布的版本 应用特色 开发环境 程序结构 Logcat工具 二 Activity 什么是活动 活动用法 intent与其用法 生命周期:onCreate() onStart() onPause() onStop() onDestory() onRestart() 活动启动模式:standard singleTop singleTask singleInstance 活动集合三 UI控件 常

redis入门指南书中概要

一.简介 1.redis是一个开源的.高性能的.基于键值对的缓存和存储系统,通过提供多种键值数据类型适应不同场景下的缓存和存储需求,同时redis高级功能能胜任消息队列.任务队列等不同角色. 2.内存存储与持久化:redis中所有数据都存储在内存中.但有问题,程序退出的时候内存中的数据会丢失,不过redis提供对持久化的支持,即将内存中的数据异步写入到硬盘中,不影响提供服务. 3.redis可以为每个键设置生存时间,到期后会自动删除,这一功能让redis成为了出色的缓存系统.作为缓存系统,red