浅析Quartz的集群配置

Springboot整合quartz实现分布式定时任务 Quartz提供两种基本作业存储类型: RAMJobStore :RAM也就是内存,默认情况下Quartz会将任务调度存在内存中,这种方式性能是最好的,因为内存的速度是最快的。不好的地方就是数据缺乏持久性,但程序崩溃或者重新发布的时候,所有运行信息都会丢失 JDBC作业存储:存到数据库之后,可以做单点也可以做集群,当任务多了之后,可以统一进行管理。关闭或者重启服务器,运行的信息都不会丢失。缺点就是运行速度快慢取决于连接数据库的快慢。 使用JDBC作业存储的方式,第一次启动后定时任务会自动写入到数据库。再 阅读详情

1 基本信息

2 Quartz的集群配置

  Quartz是一个开源的作业调度框架,它完全由java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,EJB作业预构建,JavaMail及其它,支持cron-like表达式等等。其中集群配置一般比较复杂,那么在Quartz中如何配置它的集群特性呢?

2.1 实现集群的基本原理

  目前Quartz最新版本是1.6.0。Quartz是通过借助关系数据库和JDBC作业存储来实现集群管理的。


 
1. 原理

  集群通过故障切换和负载平衡的功能,能给调度器带来高可用性和伸缩性。目前集群只能工作在JDBC-Jobstore (JobStoreTX 或者JobStoreCMT)方式下,从本质上来说,是使集群上的每一个节点通过共享同一个数据库来工作的(Quartz通过启动两个维护线程来维护数据库状态实现集群管理,一个是检测节点状态线程,一个是恢复任务线程)。

  负载平衡是自动完成的,集群的每个节点会尽快触发任务。当一个触发器的触发时间到达时,第一个节点将会获得任务(通过锁定),成为执行任务的节点。

  故障切换的发生是在当一个节点正在执行一个或者多个任务失败的时候。当一个节点失败了,其他的节点会检测到并且标识在失败节点上正在进行的数据库中的任务。任何被标记为可恢复(任务详细信息的"requests recovery"属性)的任务都会被其他的节点重新执行。没有标记可恢复的任务只会被释放出来,将会在下次相关触发器触发时执行。

2. 集群管理用到的表

--任务详细信息表

  1. CREATE TABLE qrtz_job_details
  2. (
  3. JOB_NAME VARCHAR2(80) NOT NULL,
  4. JOB_GROUP VARCHAR2(80) NOT NULL,
  5. DESCRIPTION VARCHAR2(120) NULL,
  6. JOB_CLASS_NAME VARCHAR2(128) NOT NULL,
  7. IS_DURABLE VARCHAR2(1) NOT NULL,
  8. IS_VOLATILE VARCHAR2(1) NOT NULL,
  9. IS_STATEFUL VARCHAR2(1) NOT NULL,
  10. REQUESTS_RECOVERY VARCHAR2(1) NOT NULL, --可恢复标记
  11. JOB_DATA BLOB NULL,
  12. PRIMARY KEY (JOB_NAME,JOB_GROUP)
  13. );

--触发器与任务关联表

  1. CREATE TABLE qrtz_fired_triggers
  2. (
  3. ENTRY_ID VARCHAR2(95) NOT NULL,
  4. TRIGGER_NAME VARCHAR2(80) NOT NULL,
  5. TRIGGER_GROUP VARCHAR2(80) NOT NULL,
  6. IS_VOLATILE VARCHAR2(1) NOT NULL,
  7. INSTANCE_NAME VARCHAR2(80) NOT NULL,
  8. FIRED_TIME NUMBER(13) NOT NULL,
  9. STATE VARCHAR2(16) NOT NULL,
  10. JOB_NAME VARCHAR2(80) NULL,
  11. JOB_GROUP VARCHAR2(80) NULL,
  12. IS_STATEFUL VARCHAR2(1) NULL,
  13. REQUESTS_RECOVERY VARCHAR2(1) NULL, --可恢复标记
  14. PRIMARY KEY (ENTRY_ID)
  15. );

--调度器状态表

  1. TABLE qrtz_scheduler_state
  2. (
  3. INSTANCE_NAME VARCHAR2(80) NOT NULL, --调度器实例ID
  4. LAST_CHECKIN_TIME NUMBER(13) NOT NULL, --上次检查时间
  5. CHECKIN_INTERVAL NUMBER(13) NOT NULL, --检查时间间隔
  6. RECOVERER VARCHAR2(80) NULL, --恢复调度器
  7. PRIMARY KEY (INSTANCE_NAME)
  8. );

2.2 集群配置

  通过设置"org.quartz.jobStore.isClustered"属性为"true"来激活集群特性。在集群中的每一个实例都必须有一个唯一的"instance id" ("org.quartz.scheduler.instanceId" 属性), 但是应该有相同的"scheduler instance name" ("org.quartz.scheduler.instanceName"),也就是说集群中的每一个实例都必须使用相同的quartz.properties 配置文件。除了以下几种例外,配置文件的内容其他都必须相同:

 不同的线程池大小,
 不同的"org.quartz.scheduler.instanceId"属性值(这个可以很容易做到,设定为"AUTO"即可)。
 注意: 永远不要在不同的机器上运行集群,除非他们的时钟是使用某种形式的同步服务(守护)非常有规律的运行(时钟必须在一分一秒内)来达到同步。还有: 永远不要触发一个非集群的实例,如果其他的实例正在同一个数据库表上运行。你将使你的数据严重腐蚀,出现非预期行为。
 示例及详细配置说明,请参照附录Quartz配置文件说明。

3 附录

3.1 Quartz配置文件说明

3.1.1 Quartz配置文件基本说明

  文件名称:默认文件名称quartz.properties,可以通过更改系统属性“org.quartz.properties”来加载自定义的配置。
  格式:属性文件

3.1.2 Quartz配置文件详细说明

3.1.2.1 Scheduler主要属性的配置

 

  1. # Scheduler主要属性的一般定义模式如下:
  2. #
  3. # org.quartz.scheduler.instanceName = SCHED_NAME
  4. # org.quartz.scheduler.instanceId = INSTANCE_ID
  5. # org.quartz.scheduler.threadName = THREAD_NAME
  6. # org.quartz.scheduler.rmi.export = false
  7. # org.quartz.scheduler.rmi.proxy = false
  8. # org.quartz.scheduler.rmi.registryHost = localhost
  9. # org.quartz.scheduler.rmi.registryPort = 1099
  10. # org.quartz.scheduler.rmi.createRegistry = never
  11. # org.quartz.scheduler.userTransactionURL = USER_TX_LOCATION
  12. # org.quartz.scheduler.wrapJobExecutionInUserTransaction = JOBS_IN_USER_TX
  13. # org.quartz.scheduler.idleWaitTime = IDLE_WAIT_TIME
  14. # org.quartz.scheduler.dbFailureRetryInterval = DB_FAILURE_RETRY_INTERVAL
  15. # org.quartz.scheduler.classLoadHelper.class = CLASS_LOAD_HELPER_CLASS
  16. # org.quartz.context.key.SOME_KEY = SOME_VALUE

 

下面是具体说明:



3.1.2.2 线程池(ThreadPool)的配置

下面是具体说明: 

  1. # 定制一个线程池的一般模式如下:
  2. #
  3. # org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
  4. # org.quartz.threadPool.threadCount = THREAD_COUNT
  5. # org.quartz.threadPool.threadPriority = THREAD_PRIO
  6. #
  7. # 简单线程池(SimpleThreadPool)的选项参数:
  8. #
  9. # org.quartz.threadPool.makeThreadsDaemons = DAEMON_THREADS
  10. # org.quartz.threadPool.threadsInheritGroupOfInitializingThread = INHERIT_GRP
  11. # org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = INHERIT_LDR
  12. #
  13. # or
  14. #
  15. # org.quartz.threadPool.class = com.mycompany.goo.FooThreadPool
  16. # org.quartz.threadPool.somePropOfFooThreadPool = someValue
  17. #

3.1.2.3 任务存储(JobStore)的配置




  1. #
  2. # 定义一个任务存储的一般模式如下:
  3. #
  4. # org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
  5. # org.quartz.jobStore.misfireThreshold = MISFIRE_THRESHOLD
  6. #
  7. # or
  8. #
  9. # org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.<JobStoreClass>
  10. # JobStoreClass 是下面其中的一个:
  11. # - JobStoreTX 用于单机(standalone-Quartz)实现
  12. # - JobStoreCMT 用于基于应用服务器容器管理事务(appserver-based container-managed transaction )的Quartz 实现
  13. #
  14. # org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.<DriverDelegateClass>
  15. # DriverDelegateClass 是下面其中的一个:
  16. # - StdJDBCDelegate (用于许多 JDBC-compliant drivers)
  17. # - MSSQLDelegate (用于 Microsoft SQL Server drivers)
  18. # - PostgreSQLDelegate (用于 PostgreSQL drivers)
  19. # - WebLogicDelegate (用于 WebLogic drivers)
  20. # - oracle.OracleDelegate (用于 Oracle drivers)
  21. #
  22. # org.quartz.jobStore.useProperties = USE_PROPERTIES
  23. # org.quartz.jobStore.dataSource = DS_NAME
  24. # org.quartz.jobStore.tablePrefix = TABLE_PREFIX
  25. # org.quartz.jobStore.isClustered = IS_CLUSTERED
  26. # org.quartz.jobStore.selectWithLockSQL = LOCKING_SELECT_STATEMENT
  27. # org.quartz.jobStore.dontSetAutoCommitFalse = DONT_TURN_OFF_AUTO_COMMIT
  28. # org.quartz.jobStore.maxMisfiresToHandleAtATime = MAX_MISFIRE_HANDLE
  29. # org.quartz.jobStore.txIsolationLevelSerializable = SERIALIZABLE_ISOLATION
  30. #
  31. # 如果你使用JobStoreCMT,你还需要下面的参数:
  32. #
  33. # org.quartz.jobStore.nonManagedTXDataSource = NON_MANAGED_TX_DS_NAME
  34. #
  35. # 并且如果你使用JobStoreCMT,下面的参数是可选的:
  36. #
  37. # org.quartz.jobStore.dontSetNonManagedTXConnectionAutoCommitFalse = DONT_TURN_OFF_AUTO_COMMIT
  38. # org.quartz.jobStore.txIsolationLevelReadCommitted = READ_COMMITTED_ISOLATION
  39. #
  40. #
  41. # 或者,使用一个用户自定义JobStore实现:
  42. #
  43. # org.quartz.jobStore.class = com.mycompany.goo.FooJobStore
  44. # org.quartz.jobStore.somePropOfFooJobStore = someValue
  45. #
  46. #


下面是具体说明:

 

3.1.2.4 数据源的配置


  1. # (只有当使用JDBCJobStore时需要, 或者一个插件需要JDBC)
  2. # -- 如果你的Scheduler非常忙碌,比如在一定的线程池内执行相同数目的任务,那么你应让数据源的连接数等于线程数 + 1
  3. #
  4. # 数据源定义的一般模式如下:
  5. #
  6. # org.quartz.dataSource.NAME.driver = DRIVER_CLASS_NAME
  7. # org.quartz.dataSource.NAME.URL = DB_URL
  8. # org.quartz.dataSource.NAME.user = DB_USER
  9. # org.quartz.dataSource.NAME.password = DB_PASSWORD
  10. # org.quartz.dataSource.NAME.maxConnections = DB_POOL_SIZE
  11. # org.quartz.dataSource.NAME.validationQuery= VALIDATION_QUERY
  12. #
  13. # or
  14. #
  15. # org.quartz.dataSource.NAME.jndiURL = DB_JNDI_URL
  16. #
  17. # or
  18. # org.quartz.dataSource.NAME.jndiURL = DB_JNDI_URL
  19. # org.quartz.dataSource.NAME.jndiAlwaysLookup = DB_JNDI_ALWAYS_LOOKUP
  20. # org.quartz.dataSource.NAME.java.naming.factory.initial = JNDI_CTXT_FACTORY
  21. # org.quartz.dataSource.NAME.java.naming.provider.url = JNDI_PROVIDER_URL
  22. # org.quartz.dataSource.NAME.java.naming.security.principal = JNDI_PRINCIPAL
  23. # org.quartz.dataSource.NAME.java.naming.security.credentials = JNDI_CREDENTIALS
  24. #
  25. #


上面显示了两种数据源定义方式:一个数据源可以用给定的数据库连接信息创建,也可以是利用应用服务器管理生成的JNDI数据源的逻辑映射。
下面是具体说明:


3.1.2.5 Scheduler插件的配置


  1. # SchedulerPlugin定义的一般模式如下:
  2. #
  3. # org.quartz.plugin.NAME.class = PLUGIN_CLASS_NAME
  4. #
  5. # 如果这个插件类有一些属性值需要通过"setter"方法设定, 名称和值的属性定义如下:
  6. #
  7. # org.quartz.plugin.NAME.propName = propValue
  8. #
  9. # ..."propName" 在插件类中会有一个"setPropName"方法.但是只支持原始数据类型(包括 Strings)。
  10. #

配置插件的简单示例:

  1. org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingTriggerHistoryPlugin
  2. org.quartz.plugin.triggHistory.triggerFiredMessage = Trigger {1}.{0} fired job {6}.{5} at: {4, date, HH:mm:ss MM/dd/yyyy}
  3. org.quartz.plugin.triggHistory.triggerCompleteMessage = Trigger {1}.{0} completed firing job {6}.{5} at {4, date, HH:mm:ss MM/dd/yyyy} with resulting trigger instruction code: {9}
  4.  
  5. org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
  6. org.quartz.plugin.jobInitializer.fileName = data/my_job_data.xml
  7. org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
  8. org.quartz.plugin.jobInitializer.failOnFileNotFound = true
  9.  
  10. org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
  11. org.quartz.plugin.shutdownhook.cleanShutdown = true

3.1.3 示例

  1. #============================================================
  2. # Configure Main Scheduler Properties
  3. #===========================================================
  4.  
  5. org.quartz.scheduler.instanceName = MyClusteredScheduler
  6. org.quartz.scheduler.instanceId = AUTO
  7.  
  8. #===========================================================
  9. # Configure ThreadPool
  10. #===========================================================
  11.  
  12. org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
  13. org.quartz.threadPool.threadCount = 25
  14. org.quartz.threadPool.threadPriority = 5
  15.  
  16. #===========================================================
  17. # Configure JobStore
  18. #===========================================================
  19.  
  20. org.quartz.jobStore.misfireThreshold = 60000
  21.  
  22. org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
  23. org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
  24. org.quartz.jobStore.useProperties = false
  25. org.quartz.jobStore.dataSource = myDS
  26. org.quartz.jobStore.tablePrefix = QRTZ_
  27.  
  28. org.quartz.jobStore.isClustered = true
  29. org.quartz.jobStore.clusterCheckinInterval = 20000
  30.  
  31. #===========================================================
  32. # Configure Datasources
  33. #===========================================================
  34.  
  35. org.quartz.dataSource.myDS.driver = oracle.jdbc.driver.OracleDriver
  36. org.quartz.dataSource.myDS.URL = jdbc:oracle:thin:@cluster:1521:dev
  37. org.quartz.dataSource.myDS.user = quartz
  38. org.quartz.dataSource.myDS.password = quartz
  39. org.quartz.dataSource.myDS.maxConnections = 5
  40. org.quartz.dataSource.myDS.validationQuery=select 0 from dual

SpringBoot分布式任务调度框架对比:Quartz、XXL-Job与PowerJob选型指南 定时任务是现代软件系统中处理周期性业务逻辑的核心组件,其原理是通过预设的时间规则自动触发代码执行。在单机环境下,简单的定时器即可满足需求,但在微服务与分布式架构中,任务调度面临高可用、可观测与弹性伸缩等挑战,其技术价值日益凸显。分布式任务调度框架应运而生,它们通过中心化调度、任务分片、故障转移等机制,为数据处理、系统维护、报表生成等应用场景提供了企业级解决方案。本文聚焦于SpringBoot生态下主流的**XXL-Job**与**PowerJob**等框架,通过对比其架构设计与核心特性,帮助开发者应对微服务 阅读详情

相关推荐

因果推断--PSM的原理和应用(二)

上一篇介绍了DID,本文介绍和DID可一起搭配使用的一种因果推断方法PSM。在正式介绍PSM之前,先来简单回顾一下为什么需要因果推断以及如何做因果推断。我们都知道相关非因果,比起相关我们更希望知道两个事件之间的因果关系,有了确切的因果关系,才能知道对A如何操作才能引起B的变化。解决因果推断问题,目前主要有两种框架,Rubin虚拟事实模型和Pearl因果图模型。站在数据分析的角度上,Rubin虚拟事实模型更容易理解,其核心思想是寻找恰当的对照组。

baidu_26137595的博客 1万+

Quartz:高级(企业)功能-11

Clustering(集群) Clustering目前与JDBC-Jobstore(JobStoreTX或JobStoreCMT)和TerracottaJobStore一起使用。功能包括负载平衡和job故障转移(如果JobDetail的“请求恢复”标志设置为true)。 ####使用JobStoreTX或JobStoreCMT进行聚类通过将“org.quartz.jobStore.isClu...

小贺的博客 1062

【cocos2dx面试题干货】--2021年最新cocos2dx面试干货(引擎篇)

【cocos2dx面试题干货】--2020年度最新cocos2dx面试干货(引擎篇 ) 大家好,我是Lampard~~ 经过春招一番艰苦奋战之后,我终于是进入了心仪的公司。 今天给大家分享一下我在之前精心准备的一套面试知识。 由于我面试的岗位是cocos2dx的开发岗,今天就先给大家分享一下引擎方面的知识。 本人亲测80%的引擎相关题目都...

Lampard的博客 1万+

springBoot使用quartz框架

1.为了解决两个节点执行同一个任务的并发问题: 不重复执行;不漏执行 2.quarz用数据库行锁解决了问题 3.解决完问题的场景是 task同一时间只在一个节点上执行—不重复执行 触发器设置策略—不漏执行 项目结构: spring-quartz.properties #quartz集群配置 # =========================================================================== # Configure Main Scheduler Prop

weixin_43490996的博客 1097

手把手教你调试RTL8201F:从芯片手册解读到LWIP驱动移植

本文详细解析了RTL8201F PHY芯片的开发流程,从寄存器配置到LWIP驱动移植,重点介绍了RMII模式下的特殊配置要点和调试技巧。通过实战案例和高级调试方法,帮助工程师解决网络性能问题,实现与FreeRTOS+LWIP协议栈的稳定集成。

ik678901234的博客 972

STorM BGC V1.31硬件+SimpleBGC固件:从零搭建三轴云台开发环境(Keil+JLink避坑指南)

本文详细介绍了如何从零搭建STorM BGC V1.31硬件+SimpleBGC固件的三轴云台开发环境,涵盖硬件连接、Keil+JLink开发工具配置、固件编译与烧录等关键步骤,并提供了常见问题的解决方案和调试技巧,帮助开发者快速上手三轴云台开发。

weixin_28693683的博客 380

【调度任务----Quartz】Quartz常见错误

1.集群之后把其中一个Quartz服务停了,其他的也不接手工作 问题描述 集群之后,A节点执行了大多数任务,B节点大部分时间处于空闲,停掉A节点,B节点也不会接手工作。 解决方式 修改Quartz的配置,将每个节点的org.quartz.scheduler.instanceId设置为不同的值,或者都设置为AUTO。另外org.quartz.jobStore.isClustered属性必...

Sunny 1万+

MacBook Pro 合盖省电终极配置:pmset 5条命令实现一夜掉电<1%

本文详细介绍了如何通过5条pmset终端命令优化MacBook Pro的合盖休眠设置,实现一夜掉电<1%的极致省电效果。针对M系列芯片的特性,文章解析了MacOS的休眠机制,并提供电池模式与电源模式的差异化配置方案,帮助用户显著提升续航表现。

weixin_33824385的博客 476

浅析Quartz的集群配置(二)

基本信息 摘要:Quartz是一个开源的作业调度框架,它完全由java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,EJB作业预构建,JavaMail及其它,

3014

[Stanford CS217]CUDA中矩阵乘法GEMM优化的最关键点:向量内积和向量外积分别取行和取列

对于矩阵C中的每一个tile,矩阵A与矩阵B中的tile只需要读取一次,这样就可以达到 O(N) 的计算强度。理想情况下性能应当受限于算术吞吐量,确切来说对于一个大型方阵,即 M=N=K ,矩阵乘法的数学操作复杂度为 O(N3) ,而数据量为 O(N2) ,同时计算强度为 N (这里的计算强度可以被理解为同一个数据被重复利用的次数)。GEMM就是指计算 C=A∗B+C ,其中 A 、B和C都是矩阵,A是 M×K 的矩阵,B是 K×N 的矩阵, C是 M×N 的矩阵。这就是向量内积和向量外积的最大区别。

weixin_55035144的博客 1426

PCL 点云圆柱形邻域搜索【2026最新版】

圆柱形邻域搜索是KD-tree算法在点云数据处理中的扩展应用,在一些特定场景应用中具有无与伦比的优势。博客长期更新,本文最近一次更新时间为:2026年5月4日。

点云侠的博客 3450

浅析Quartz的集群配置(一)

Quartz是一个开源的作业调度框架,它完全由java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,EJB作业预构建,JavaMail及其它,支持cron-like表达式等等。其中集群配置一般比较复杂,那么在Quartz中如何配置它的集群特性呢?

1004

Yolo8行人车辆目标检测实战分享 完整项目代码可直接运行

Yolo8行人车辆目标检测实战分享 完整项目代码可直接运行

1294

quartz 分布式_【分享吧】浅析Quartz及其优势

Quartz 作为一个完全由 Java 编写的开源作业调度框架,即可像java Timer一样简单的配置就实现任务调度工作,同时相较于Timer又拥有处理复杂定时需求的能力,并且在分布式和集群方面也能简单部署即可应用,与spring结合使用也是非常容易,因此应用十分普遍。 说完这些有些非技术岗的同事可能还是不了解这个所谓的定时调度到底是个什么,举几个例子:☛ ①你期望...

weixin_39596975的博客 802

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

定时任务框架Quartz浅析

作者:中国移动云能力中心——孙波 概要:本文主要介绍了开源定时任务框架Quartz,以及在云安全定时推送任务中的使用。Java 系统中主要有三种方式来实现定时任务:1、Timer和TimerTask;2、ScheduledExecutorService;3、三方框架 Quartz。其中,Quartz 是一个功能完善的任务调度框架,支持集群环境下的任务调度,需要将任务调度状态序列化到数据库,是企业级定时任务调度框架中的不二选择。 一、Quartz介绍 quartz 基本概念 Job 表示一

ecloud_developer的博客 3730

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

quartz作业调度浅析2

  之前的《quartz作业调度浅析》中讲了简单的动态的quartz调度,现在来看看经过加载配置文件的quartz作业调度。   先了解下quartz.properties文件的一些相关属性的设置及其意义: #============================================================================# Configure Main ...

weixin_34294649的博客 144

quartz源码浅析

1.简介 Quartz是一个开源的作业调度框架,它完全由 Java写成,并设计用于 J2SE和 J2EE应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。 2.原理   参考http://ssuupv.blog.163.com/blog/static/146156722013829111028966/ 3.以内存运行信息方式分

烈冬冰夏的博客 1697

Pixelle-Video实战:5分钟搭建短视频批量生产线

视频生成模型正在改变内容生产的传统模式,它通过文本理解、分镜拆解、画面生成与音画合成等自动化流程,将原本依赖多人的剪辑工作压缩为一条可批量化运转的流水线。这种模型的价值不仅在于单帧画质,更在于降低了短视频制作的边际成本,让内容团队、电商运营和自媒体创作者能够以极低的门槛实现“文案进,视频出”。在实际应用中,合理进行文案预处理、控制镜头拆解粒度、设置分镜参数并配合人工抽检,即可稳定产出口播类、种草类和产品展示类视频。Pixelle-Video 正是这一类开源工具链的代表,它打通了从脚本到成片的关键环节,帮助个

weixin_34167819的博客 348
上一篇: 删除外键约束
下一篇: 如何让层盖住下拉列表框
潇湘紫琅
博客等级 码龄24年 6粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值