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

旅游网站建设的背景开发公司物业移交物业协议

旅游网站建设的背景,开发公司物业移交物业协议,怎样模仿别人的网站,阿里云 wordpress主机名文章目录 前言一、quartz 的集群#xff1a;1.1 服务集群带来的定时任务问题#xff1a;1.2 服务集群定时任务解决思路#xff1a; 二、quartz 集群实现#xff1a;2.1 引入jar2.2 配置文件#xff1a;2.3 定义quartz 数据源#xff1a;2.4 集群测试#xff1a;2.4.1 定… 文章目录 前言一、quartz 的集群1.1 服务集群带来的定时任务问题1.2 服务集群定时任务解决思路 二、quartz 集群实现2.1 引入jar2.2 配置文件2.3 定义quartz 数据源2.4 集群测试2.4.1 定时任务2.4.2 初始化quartz 表2.4.3 服务启动2.4.3 启动多个服务2.4.3.1 initialize-schema 修改2.4.3.2 从数据库加载任务2.4.3.3 增加配置文件2.4.3.4 修改配置项2.4.3.5 故障转移 总结参考 前言 通常在生产环境中不会存在单体的应用如一个订单服务可能同时部署多个相同的服务到不同的服务上从而形成集群。此时定时任务就会面临重复执行的问题 一、quartz 的集群 1.1 服务集群带来的定时任务问题 业务系统是集群的 共用一个quartz 的数据库存在的问题 任务被分配到多个系统中而任务的数据是有状态的重复执行导致业务数据重复;任务状态是无状态多次执行对最终数据无影响 显然对于有状态的数据并不能重复执行比如扣款转账等等对于无状态的数据重复执行也没有意义只是增加了资源的开销而已 1.2 服务集群定时任务解决思路 只让集群中的一台服务器去跑定时任务(浪费其他机器的性能) zookeeper 对集群的相同服务选举出来一个master 节点进行任务的执行 集群中的每台服务器都会执行定时任务但是一个任务只会分配到集群中的一台机器上 quartz 支持将定时任务放在jdbc 中进行存储从而实现 故障转移和负载均衡 故障转移 一个任务在一台机器上跑但是 这台机器下线将任务分配到第二台机器执行可以自行配置 负载均衡 将任务尽可能分配到各个服务中但是每个任务只会被分配一次 二、quartz 集群实现 2.1 引入jar dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-quartz/artifactId/dependencydependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.1.1/version/dependency!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.21/version/dependencytip 本文springboot 版本如下 parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.7.16/versionrelativePath/ !-- lookup parent from repository --/parent对应自动引入的quartz 版本为 org.quartz-scheduler:quartz:2.3.2 2.2 配置文件 application.yml server:port: 8080 spring:datasource:type: com.zaxxer.hikari.HikariDataSource #数据源类型hikari:pool-name: KevinHikariPool #连接池名称默认HikariPool-1maximum-pool-size: 20 #最大连接数小于等于0会被重置为默认值10大于零小于1会被重置为minimum-idle的值connection-timeout: 60000 #连接超时时间:毫秒小于250毫秒否则被重置为默认值30秒minimum-idle: 10 #最小空闲连接默认值10小于0或大于maximum-pool-size都会重置为maximum-pool-sizeidle-timeout: 500000 # 只有空闲连接数大于最大连接数且空闲时间超过该值才会被释放max-lifetime: 600000 #连接最大存活时间.不等于0且小于30秒会被重置为默认值30分钟.设置应该比mysql设置的超时时间短connection-test-query: SELECT 1 #连接测试查询quartz:driver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://localhost:3406/quartz-oneself?useUnicodetruecharacterEncodingUTF-8allowMultiQueriestrueuseAffectedRowstrueuseSSLfalsezeroDateTimeBehaviorconvertToNullserverTimezoneGMT%2B8username: rootpassword: 123456quartz:# 配置使用jdbc 存储jobjob-store-type: jdbc# 随着容器启动启动定时任务(默认值ture)auto-startup: true# 是否可以覆盖定时任务true 是 (默认值false)overwrite-existing-jobs: false# 在容器关闭时任务执行后关闭容 (默认值false)wait-for-jobs-to-complete-on-shutdown: true# 定时任务延时启动的时间 (默认值0s)startup-delay: 10sproperties:# 配置定时任务执行的线程池个数(默认10个)org.quartz.threadPool.threadCount: 10# 配置集群的名称同一个集群内的多个服务需要保证名称一致org.quartz.scheduler.instanceName: OrderService# 集群中单个服务的实例id 同一个集群中 实例id 需要不相同org.quartz.scheduler.instanceId: Order_0# 标识以集群的方式启动org.quartz.jobStore.isClustered: true# 存储job 时使用的事务管理类,注意改参数 不同版本设置的值 有差异org.quartz.jobStore.class: org.springframework.scheduling.quartz.LocalDataSourceJobStore# 数据库驱动用来匹配不同数据的实现类org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate# quartz集群 定时任务集群表前缀org.quartz.jobStore.tablePrefix: QRTZ_# 容许的调度引擎设置触发器超时的临界值。任务的超时容忍度 默认为60秒这里单位为毫秒org.quartz.jobStore.misfireThreshold: 12000jdbc: # initialize-schema: alwaysinitialize-schema: never 注意 1org.quartz.jobStore.class 低版本、高版本取值不同: 低版本2.2.6.Release org.quartz.jobStore.classorg.quartz.impl.jdbcjobstore.JobStoreTX 高版本2.5.x- 2.7.18 org.quartz.jobStore.classorg.springframework.scheduling.quartz.LocalDataSourceJobStore 避免错误信息org.quartz.SchedulerConfigException: DataSource name not set. 2 org.quartz.jobStore.tablePrefix 定时任务集群表前缀需要遵从一定规范: qrtz_ 后的内容不能进行修改 2.3 定义quartz 数据源 QuartzDataSourceConfig.java: Configuration public class QuartzDataSourceConfig {Value(${spring.datasource.quartz.jdbc-url})private String url;Value(${spring.datasource.quartz.driver-class-name})private String driverClassName;Value(${spring.datasource.quartz.username})private String username;Value(${spring.datasource.quartz.password})private String password;Autowiredprivate HikariBaseConfig hikariBaseConfig;Bean// 标识quartz 数据源QuartzDataSourceQualifier(quartzDataSource)public DataSource quartzDataSource() {return hikariBaseConfig.getDataSource(driverClassName, url, username, password);} } 2.4 集群测试 2.4.1 定时任务 业务类 HelloService Service public class HelloService {public String hello(){return hello;} }业务类QuartzTest: import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.quartz.QuartzJobBean;import java.text.SimpleDateFormat; import java.util.Date; import java.util.StringJoiner;public class QuartzTest extends QuartzJobBean {Autowiredprivate HelloService helloService;Overrideprotected void executeInternal(JobExecutionContext context) throws JobExecutionException {SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); // System.out.println(\job 执行\ job 执行 sdf.format(new Date()));StringJoiner outStr new StringJoiner().add(QuartzTest 执行).add(sdf.format(new Date())).add(Thread.currentThread().getName()).add(context.getTrigger().getKey().getName()).add(helloService.toString()).add(helloService.hello());System.out.println(outStr);} }业务类 JobConfigure import org.quartz.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class JobConfigure {Beanpublic JobDetail jobDetail1() {return JobBuilder.newJob(QuartzTest.class).usingJobData(job, jobDetail).usingJobData(name, jobDetail).usingJobData(count, 0).storeDurably().withIdentity(jobConfigure, group1).build();}Beanpublic Trigger trigger1() {return TriggerBuilder.newTrigger().withIdentity(triggerConfigure, trigger1).forJob(jobConfigure,group1).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).repeatForever()).usingJobData(trigger, trigger).usingJobData(name, trigger).build();}Beanpublic JobDetail jobDetail2() {return JobBuilder.newJob(QuartzTest.class).usingJobData(job, jobDetail2).usingJobData(name, jobDetail2).usingJobData(count, 0).storeDurably().withIdentity(jobConfigure2, group1).build();}Beanpublic Trigger trigger2() {return TriggerBuilder.newTrigger().withIdentity(triggerConfigure2, trigger2).forJob(jobConfigure2,group1).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).usingJobData(trigger, trigger2).usingJobData(name, trigger2).build();} } 2.4.2 初始化quartz 表 修改 application.yml 中 initialize-schema 为always 让其可以帮忙在数据库中创建对应的表 initialize-schema: always2.4.3 服务启动 可以看到服务是以集群方式启动的并且对应的表已经完成了创建 定时任务已经开始执行 2.4.3 启动多个服务 2.4.3.1 initialize-schema 修改 修改 application.yml 中 initialize-schema 为never: initialize-schema: never2.4.3.2 从数据库加载任务 JobConfigure 去除Configuration 注解后续让项目从数据库中加载任务 2.4.3.3 增加配置文件 application-1.yml spring:quartz:properties:org.quartz.scheduler.instanceName: OrderServiceorg.quartz.scheduler.instanceId: Order_1org.quartz.jobStore.isClustered: trueorg.quartz.threadPool.threadCount: 3org.quartz.jobStore.class: org.springframework.scheduling.quartz.LocalDataSourceJobStoreorg.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegateorg.quartz.jobStore.tablePrefix: QRTZ_org.quartz.jobStore.misfireThreshold: 12000 server:port: 8081 application-2.yml spring:quartz:properties:org.quartz.scheduler.instanceName: OrderServiceorg.quartz.scheduler.instanceId: Order_2org.quartz.jobStore.isClustered: trueorg.quartz.threadPool.threadCount: 3org.quartz.jobStore.class: org.springframework.scheduling.quartz.LocalDataSourceJobStoreorg.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegateorg.quartz.jobStore.tablePrefix: QRTZ_org.quartz.jobStore.misfireThreshold: 12000 server:port: 8082 2.4.3.4 修改配置项 点击 Edit Contigurations 配置选项 选中需要启动多个实例的项目然后点击 进行复制 修改配置名称然后在 Active: profiles 配置要生效的 配置文件此处和 application-1.yml “-” 后面的内容保持一致如果是 application-dev.yml 那么此处填写的值为dev; 选中配置文件后启动项目 注意项目启动时 也会去加载 application.yml 配置如果配置相同 application-1.yml 会进行覆盖 2.4.3.5 故障转移 当正在执行任务的服务停掉后后将任务转移至另外一个正常服务中 总结 quartz 的集群需要同一个服务的不同实例都要连接到同一个 定时任务的数据源并且通过 org.quartz.jobStore.isClustered: true 开启 集群以实现定时任务的负载均衡和故障转移。 参考 1 Quartz 配置参数详解
http://www.zqtcl.cn/news/424054/

相关文章:

  • 鼎湖网站建设江门网站优化快速排名
  • 做交通事故的网站北京物联网app开发公司
  • 网站建设中 页面网络培训注册会计师
  • app网站如何做推广安装wordpress错误
  • 八零婚纱摄影工作室网站南昌微信营销公司
  • 海南网站开发公司百度网站建设费用怎么做账
  • 做网站的研究生专业微信公众号推广的方法
  • sql网站开发数据库连接失败wordpress改全屏
  • 做外贸怎么上国外网站网上注册公司流程图文
  • 网站开发 慕课厦门建设局网站技司学校
  • 中山自助建站系统多个网站能否统一做等保
  • 做网站怎么别人搜不出来电商购物网站开发需求分析
  • 教育网站设计用模板做的网站不好优化
  • php网站api接口写法中国做铁塔的公司网站
  • 做博客网站如何盈利wordpress百家号
  • 读经典做临床报名网站cnzz 网站跳出率查询
  • 青岛网站建设网站广东手机网站制作公司
  • 个人免费建站软件影视传媒网站源码
  • 网站软件下载app如何做国外网站
  • 网站建设小细节图片北京装修公司报价
  • 辽宁省住房和城乡建设厅网站换了淮安做网站公司
  • 天津商业网站建设搜狗排名优化工具
  • 阿里服务器可以做多少个网站在家怎么利用电脑赚钱
  • 免费建设一个网站google官方版下载
  • 心馨人生珠海网站建设外贸型企业网站建设
  • 好网站建设公司昆明乐清网站优化推广
  • 哪些网站用天平做logo站长工具app官方下载
  • 做餐厅logo用什么软件网站手机自适应网站源码
  • 股票网站模板辽宁工程建设信息网站
  • 毕业设计某网站开发的开题报告范文广西建设教育网站