Кварцевый планировщик с несколькими экземплярами приложения Spring Boot - PullRequest
0 голосов
/ 06 мая 2020

Я просто хочу задать несколько вопросов о Quartz, PostgreSQL и моем приложении для весенней загрузки.

У меня есть база данных PostgreSQL с именем «scheduleDemo». Там есть таблицы для расписаний, заданий и триггеров.

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

Мои quartz.properties одинаковы, за исключением обоих приложений, но

org.quartz.scheduler.instanceName; это другое.


org.quartz.scheduler.instanceName=springBootQuartzApp2
org.quartz.scheduler.instanceId=AUTO
org.quartz.threadPool.threadCount=5
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.useProperties=false
org.quartz.jobStore.misfireThreshold=60000
org.quartz.jobStore.tablePrefix=qrtz_
org.quartz.jobStore.isClustered=false
org.quartz.plugin.shutdownHook.class=org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownHook.cleanShutdown=TRUE

org.quartz.jobStore.dataSource = abc
org.quartz.dataSource.abc.driver = org.postgresql.Driver
org.quartz.dataSource.abc.URL = jdbc:postgresql://localhost:5432/scheduledemo
org.quartz.dataSource.abc.user = postgres
org.quartz.dataSource.abc.password = postgres

У меня есть SchedulerFactoryBean, как этот

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() throws IOException {

        SchedulerFactoryBean factory = new SchedulerFactoryBean();

        factory.setOverwriteExistingJobs(true);
        factory.setQuartzProperties(quartzProperties());
        AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
        jobFactory.setApplicationContext(applicationContext);
        factory.setJobFactory(jobFactory);

        return factory;

У меня есть два разных класса, которые реализуют интерфейс Job кварца, например SimpleJob1.class и SimpleJob2.class. Из-за того, что они разные Планировщик, не должны ли они заражать друг друга?

Когда я отправляю SimpleJob1.class из своего первого приложения, и если он пропускает время срабатывания, мое второе приложение выдает ошибку. Beucase в моем втором приложении весенней загрузки нет SimpleJob1.class.

2020-05-06 18:35:15.356  INFO 31171 --- [_MisfireHandler] org.quartz.impl.jdbcjobstore.JobStoreTX  : Handling 3 trigger(s) that missed their scheduled fire-time.
2020-05-06 18:35:15.364 ERROR 31171 --- [_MisfireHandler] org.quartz.impl.jdbcjobstore.JobStoreTX  : MisfireHandler: Error handling misfires: Couldn't store trigger 'DEFAULT.alpcxsxsa2n' for 'SampleGroup.alpcxsxsa2n' job:Couldn't retrieve job because a required class was not found: com.javabypatel.demo.job.SimpleJob1

org.quartz.JobPersistenceException: Couldn't store trigger 'DEFAULT.alpcxsxsa2n' for 'SampleGroup.alpcxsxsa2n' job:Couldn't retrieve job because a required class was not found: com.javabypatel.demo.job.SimpleJob1

Моя конфигурация плохая? Или это плохая практика?

Это плохой вопрос, но я не настраивал dataSource с помощью Spring? Следует ли мне отправлять dataSource с помощью springJpa?

Спасибо !!

Любая идея мне поможет!

...