Spring Framework将JVM相互连接

fir*_*umb 6 java spring cluster-computing quartz-scheduler

我有4台服务器,并且安装了JVM.我写了一个java服务,Quartz每隔10分钟调用一次这个服务.但是在4台服务器中,每10分钟完成4次呼叫.这种情绪会造成竞争状态.我只想要4个JVM上的一个服务.

我怎么能用Spring Framework做到这一点?

Chr*_*ail 3

实际上,使用 Quartz 进行设置非常容易。Spring 本身无法为您提供太多帮助,因为它不知道正在运行的其他 JVM。另一方面,Quartz 具有集群调度程序的概念。

基本上,您需要设置一个所有 4 个 JVM 可以共享的数据库。这将用作所有 4 个实例的调度程序。当一项作业被调度时,它仅由使用集群调度程序的一个实例运行。

取自 Quartz 集群网站 wiki ( http://www.opensymphony.com/quartz/wikidocs/ConfigJDBCJobStoreClustering.html ),这是有关如何设置集群调度程序的示例配置。如果您以这种方式配置调度程序,您还可以直接从 spring 设置这些属性。

#============================================================================
# Configure Main Scheduler Properties  
#============================================================================

org.quartz.scheduler.instanceName = MyClusteredScheduler
org.quartz.scheduler.instanceId = AUTO

#============================================================================
# Configure ThreadPool  
#============================================================================

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 25
org.quartz.threadPool.threadPriority = 5

#============================================================================
# Configure JobStore  
#============================================================================

org.quartz.jobStore.misfireThreshold = 60000

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.dataSource = myDS
org.quartz.jobStore.tablePrefix = QRTZ_

org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 20000

#============================================================================
# Configure Datasources  
#============================================================================

org.quartz.dataSource.myDS.driver = oracle.jdbc.driver.OracleDriver
org.quartz.dataSource.myDS.URL = jdbc:oracle:thin:@polarbear:1521:dev
org.quartz.dataSource.myDS.user = quartz
org.quartz.dataSource.myDS.password = quartz
org.quartz.dataSource.myDS.maxConnections = 5
org.quartz.dataSource.myDS.validationQuery=select 0 from dual
Run Code Online (Sandbox Code Playgroud)