Платформа Spring, Соединяющая JVM друг с другом

Мастерство Definitively Software

сопроводительный текст http://ecx.images-amazon.com/images/I/5186JKTDVWL._SL500_AA240_.jpg

Эта книга объясняет много вещей о разработке программного обеспечения, разработке системы. Также чрезвычайно полезно понять различие между другим видом разработки продукта: веб-термоусадочная пленка VS VS платформа IBM. Что имели в виду люди, когда они задумали водопадную модель? Считайте это и все, что мы станем ясными (надо надеяться)

6
задан Amro 2 July 2012 в 12:41
поделиться

3 ответа

На самом деле это довольно просто настроить с помощью Quartz. Сама Spring не может вам здесь сильно помочь, так как не знает о других запущенных JVM. Quartz, с другой стороны, имеет концепцию кластерного планировщика.

По сути, вам нужно настроить единую базу данных, которую могут совместно использовать все 4 JVM. Это будет использоваться как планировщик для всех 4 экземпляров. Когда работа запланирована, 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
3
ответ дан 17 December 2019 в 02:32
поделиться

Ваш вопрос не очень ясен, поэтому позвольте мне посмотреть, понимаю ли я вас: у вас есть 4 сервера, каждый из которых работает с Quartz внутри виртуальной машины, и на каждом сервере запланировано одно и то же задание кварца запускаться каждые 10 минут, используя выражение cron. Каждые 10 минут все 4 сервера запускают одну и ту же работу, создавая ваше состояние гонки, поскольку все они пытаются делать одно и то же одновременно.

На самом деле это не работа для Spring. Однако в Quartz есть возможность кластеризации, когда вы настраиваете задание для запуска только одного сервера в кластере. Он использует общую базу данных для координации того, какие серверы выполняют какие задания, и следит за тем, чтобы все они не выполняли это вместе.

В документации есть информация об этом здесь , но в обычном opensymphony.com стиль они довольно редки и бесполезны.

3
ответ дан 17 December 2019 в 02:32
поделиться

То, что я делаю в нашем веб-приложении, заключается в том, чтобы каждое задание было заключено в класс, который снимает глобальную блокировку вашего кластера (я использую memcached, так как мне все равно, задача запускается слишком часто), и запускает задачу только в том случае, если она получила блокировку. Затем он может снять блокировку, когда задача завершится (не забудьте сделать это в finally ).

Одно из преимуществ упаковки каждого задания вместо изменения планировщика заключается в том, что у вас может быть несколько заданий которые работают на всех машинах, а некоторые - только на одной.

0
ответ дан 17 December 2019 в 02:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: