当前位置: 首页 > news >正文

js 曲线 网站广州白云做网站的公司

js 曲线 网站,广州白云做网站的公司,wordpress去除分类,永久免费微商城小程序文章目录 1、关于定时任务2、Java原生实现3、相关名词4、SpringBoot整合Quartz5、Quartz的通用配置6、关于QuartzJobBean7、关于调度器Scheduler的绑定8、Quartz持久化 1、关于定时任务 定时任务在实际开发中使用场景很多#xff0c;比如#xff1a; 年度报告各种统计报告某… 文章目录 1、关于定时任务2、Java原生实现3、相关名词4、SpringBoot整合Quartz5、Quartz的通用配置6、关于QuartzJobBean7、关于调度器Scheduler的绑定8、Quartz持久化 1、关于定时任务 定时任务在实际开发中使用场景很多比如 年度报告各种统计报告某个同步任务 而定时任务的实现技术业界流行的有 QuartzSpring Task 2、Java原生实现 demo代码如下TimerTask是一个抽象类new它的对象要实现方法而它里面的run方法应该能想到的是多线程也有个run而定时任务也确实是这个run到时间了以后就去开一个异步线程来执行任务。(TimerTask实现了Runnable接口 import java.util.Timer; import java.util.TimerTask;public class TaskTest{public static void main(String[] args){Timer timer new Timer();TimerTask task new TimerTask(){Overridepublic void run(){System.out.println(task...);}}timer.schedule(task,0,2000); //传入要执行的任务0即从现在开始2000即每隔两秒执行一次} }简单执行下效果为每两秒输出以下task… 以上为原生Java的实现在此基础上市面上出现了更加完善和规范的落地技术Quartz于是Spring整合了Quartz后来Spring又推出了自己的Spring Task 3、相关名词 工作Job用于定义具体执行的工作工作明细JobDetail用于描述定时工作相关的信息触发器Trigger用于描述触发工作的规则通常使用cron表达式定义调度规则调度器Scheduler描述了工作明细与触发器的对应关系 其中Job被JobDetail绑定JobDetail又被Trigger绑定。 4、SpringBoot整合Quartz 导入Quartz起步依赖坐标 dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-quartz/artifactId /dependency继承QuartzJobBean定义具体要执行的任务 public class QuartzTaskBean extends QuartzJobBean {Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { //...这里写定时任务的逻辑代码System.out.println(quartz job run... ); } } 定义工作明细与触发器并绑定对应关系 Configuration public class QuartzConfig { Bean public JobDetail printJobDetail(){ return JobBuilder.newJob(QuartzTaskBean.class) //传入上面的Job类实现绑定到JobDetail.storeDurably() //持久化storeDurably()方法是用来持久化的即Job创建完以后若当时没有使用是否要持久化一下先存起来.build();} Bean public Trigger printJobTrigger() { CronScheduleBuilder cronScheduleBuilder CronScheduleBuilder.cronSchedule(0/3 * * * * ?); return TriggerBuilder.newTrigger().forJob(printJobDetail()) //绑定JobDetail.withSchedule(cronScheduleBuilder).build(); } } 整合完成重启服务看下效果 5、Quartz的通用配置 以上整合中不用加任何配置采用默认配置就完成了定时任务。但还可以在服务的yml配置文件中对Quartz进行更详细的配置。可选 spring:# Quartz 的配置对应 QuartzProperties 配置类quartz:job-store-type: memory # Job 存储器类型。默认为 memory 表示内存可选 jdbc 使用数据库。auto-startup: true # Quartz 是否自动启动startup-delay: 0 # 延迟 N 秒启动wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时是否等待定时任务执行完成。默认为 false 建议设置为 trueoverwrite-existing-jobs: false # 是否覆盖已有 Job 的配置properties: # 添加 Quartz Scheduler 附加属性org:quartz:threadPool:threadCount: 25 # 线程池大小。默认为 10 。threadPriority: 5 # 线程优先级class: org.quartz.simpl.SimpleThreadPool # 线程池类型 # jdbc: # 这里暂时不说明使用 JDBC 的 JobStore 的时候才需要配置 这些yaml配置自然有对应的实体类去读取和接收这个实体类就是QuartzProperties搭配ConfigurationProperties注解 6、关于QuartzJobBean QuartzJobBean类的源码它实现了Job并且定义了公用的execute方法 public abstract class QuartzJobBean implements Job {/*** This implementation applies the passed-in job data map as bean property* values, and delegates to {code executeInternal} afterwards.* see #executeInternal*/Overridepublic final void execute(JobExecutionContext context) throws JobExecutionException {try {// 将当前对象包装为BeanWrapperBeanWrapper bw PropertyAccessorFactory.forBeanPropertyAccess(this);// 设置属性MutablePropertyValues pvs new MutablePropertyValues();pvs.addPropertyValues(context.getScheduler().getContext());pvs.addPropertyValues(context.getMergedJobDataMap());bw.setPropertyValues(pvs, true);}catch (SchedulerException ex) {throw new JobExecutionException(ex);}// 子类实现该方法executeInternal(context);}/*** Execute the actual job. The job data map will already have been* applied as bean property values by execute. The contract is* exactly the same as for the standard Quartz execute method.* see #execute*/protected abstract void executeInternal(JobExecutionContext context) throws JobExecutionException;} 因此创建Job的时候可以继承QuartzJobBean类也可直接实现Job接口但继承QuartzJobBean并实现executeInternal方法当然效率最高 7、关于调度器Scheduler的绑定 Scheduler绑定有两种方式一种是使用bena的自动配置一种是Scheduler手动配置。上面整合时采用的是自动配置的方式即定义两个Bean以及它们之间的关系然后交给Spring容器管理。这里再补充一下手动配置的方式实现Spring的ApplicationRuunner接口注入Quartz的Scheduler对象调用scheduleJob方法完成手动绑定。 Component public class QuartzJob implements ApplicationRunner {Resourceprivate Scheduler scheduler;Overridepublic void run(ApplicationArguments args) throws Exception {//创建JobDetail对象JobDetail jobDetail JobBuilder.newJob(QuartzTaskBean.class).storeDurably().build();// 简单的调度计划的构造器SimpleScheduleBuilder scheduleBuilder SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5) // 频率.repeatForever(); // 次数// 创建任务触发器Trigger trigger TriggerBuilder.newTrigger().forJob(jobDetail).withSchedule(scheduleBuilder).startNow() //立即执行一次任務.build();// 手动将触发器与任务绑定到调度器内scheduler.scheduleJob(jobDetail, trigger);} } 注意这个类要注册成一个Bean记得放在被Spring容器能扫描到的目录下。此外上面没有用Cron表达式的调度器用的简单的调度计划调这个类提供的方法来描述你的执行规则就行。 8、Quartz持久化 Quartz持久化配置提供了两种存储器RAMJobStore和JDBCJobStore就是内存和硬盘默认是内存形式维护任务信息意味着服务重启了任务就从头再来之前的执行数据等就全没了 存储方式优点缺点RAMJobStore不要外部数据库配置容易运行速度快因为调度程序信息是存储在被分配给 JVM 的内存里面所以当应用程序停止运行时所有调度信息将被丢失。另外因为存储到JVM内存里面所以可以存储多少个 Job 和 Trigger 将会受到限制JDBCJobStore支持集群因为所有的任务信息都会保存到数据库中可以控制事物还有就是如果应用服务器关闭或者重启任务信息都不会丢失并且可以恢复因服务器关闭或者重启而导致执行失败的任务运行速度的快慢取决与连接数据库的快慢 下面实现持久化到MySQL首先创建Quartz数据库脚本在 org\quartz-scheduler\quartz\2.3.2\quartz-2.3.2.jar!\org\quartz\impl\jdbcjobstore\tables_mysql_innodb.sql这里有各种数据库类型的SQL脚本执行完MySQL后查看表 mysql use quartz; Database changed mysql show tables; -------------------------- | Tables_in_quartz | -------------------------- | qrtz_blob_triggers |## blog类型存储triggers | qrtz_calendars |## 以blog类型存储Calendar信息 | qrtz_cron_triggers |## 存储cron trigger信息 | qrtz_fired_triggers |## 存储已触发的trigger相关信息 | qrtz_job_details |## 存储每一个已配置的job details | qrtz_locks |## 存储悲观锁的信息 | qrtz_paused_trigger_grps |## 存储已暂停的trigger组信息 | qrtz_scheduler_state |## 存储Scheduler状态信息 | qrtz_simple_triggers |## 存储simple trigger信息 | qrtz_simprop_triggers |## 存储其他几种trigger信息 | qrtz_triggers |## 存储已配置的trigger信息 -------------------------- 加MySQL驱动以及JDBC的依赖坐标看技术选型采用MySQL驱动MyBatis的不用加MyBatis起步依赖下面包含Jdbc Starter dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId /dependency!--看当前项目的已有依赖很多封装JDBC的框架starter包含jdbc-starter-- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-jdbc/artifactId /dependency!--数据源自己选吧我用的druid一般接手的项目这些肯定都有了--修改application.yml # 旧的数据源配置用的druid spring:datasource:druid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/test_quartz?serverTimezoneGMT%2B8username: rootpassword: root123# quartz持久化的关键配置quartz:job-store-type: jdbc # 使用数据库存储scheduler-name: testScheduler # 相同 Scheduler 名字的节点形成一个 Quartz 集群wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时是否等待定时任务执行完成。默认为 false 建议设置为 truejdbc:initialize-schema: never # 是否自动使用 SQL 初始化 Quartz 表结构。这里设置成 never 我们手动创建表结构。可以选择alwaysneverembedded第一次也可偷懒让框架去创建表重启服务可以看到持久化成功 除了以上关键配置外集群、线程池等Quartz Scheduler 附加属性相关配置可参考以下这个COPY的比较全的配置文件 spring:datasource:druid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/test_quartz?serverTimezoneGMT%2B8username: rootpassword: root123quartz:job-store-type: jdbc # 使用数据库存储scheduler-name: hyhScheduler # 相同 Scheduler 名字的节点形成一个 Quartz 集群wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时是否等待定时任务执行完成。默认为 false 建议设置为 truejdbc:initialize-schema: never # 是否自动使用 SQL 初始化 Quartz 表结构。这里设置成 never 我们手动创建表结构。可以选择alwaysneverembedded第一次也可偷懒让框架去创建表properties:org:quartz:# JobStore 相关配置jobStore:dataSource: quartzDataSource # 使用的数据源class: org.quartz.impl.jdbcjobstore.JobStoreTX # JobStore 实现类driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegatetablePrefix: QRTZ_ # Quartz 表前缀isClustered: true # 是集群模式clusterCheckinInterval: 1000useProperties: false# 线程池相关配置threadPool:threadCount: 25 # 线程池大小。默认为 10 。threadPriority: 5 # 线程优先级class: org.quartz.simpl.SimpleThreadPool # 线程池类型 配置中有一个scheduler-name字段看上面Quartz的库里的表所有的表中都含有一个SCHED_NAME字段对应配置的这个scheduler-name相同 Scheduler-name的节点形成一个 Quartz 集群。
http://www.pierceye.com/news/379359/

相关文章:

  • 泉州市服务好的网站设计塘沽网吧开门了吗
  • 商城网站建设哪家公司好wordpress输出到模板
  • 建站报价网站建设培训学校
  • 杭州高端网站定制手机网站开发应注意
  • 深圳网站建设选云聚达做二手元器件那个网站查价格
  • 网站建设公司企业模板微网站开发制作
  • 北京网站制作计划合理的网站结构
  • 网站建设如何搭建框架兰州seo排名
  • 网站作为医院形象建设cms搭建网站
  • 如何做个购物网站网站开发好不好
  • wordpress国内打开速度慢东莞搜索seo关键词
  • 鹿泉建设网站广安市建设局官方网站
  • 用花生棒自己做网站如何看网站的浏览量
  • 大连网站排名电商线上培训
  • 做金融网站做简历的网站
  • 求网站建设合伙人wordpress子页面怎么修改密码
  • 怎样登录建设互联网站厦门海绵城市建设官方网站
  • 网站怎么做权重互联网平台推广怎么做
  • 网站建设如果登录失败男生和男生做污的视频网站
  • 备案ip 查询网站查询系统制作一个网站的成本
  • 微网站排版p9制作公司
  • 国产在线免费观看高甜电影推荐爱站网seo工具包
  • 建设银行官方网站首页入口建立网站如何推广
  • 网站登录界面图片用什么软件做wordpress qiniu
  • 设计素材网站好融资吗关键词排名怎么做好
  • 亚洲购物网站排名网站开发看掉一些功能
  • 网站开发 需求dnf盗号网站怎么做
  • 淘宝客免费网站建设宝塔搭建wordpress主机地址
  • 可以看网站的浏览器wordpress+博客+简书
  • 游戏源码网站免费网站模板有哪些内容