Проблемы Quartz JDBCJobStore с MySQL

#java #mysql #spring #quartz-scheduler

#java #mysql #весна #quartz-планировщик

Вопрос:

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

Моя база данных — MySQL (версия 5.6.15), и я создал таблицы, используя скрипты в Quartz jar (версия 1.8.6).

Выполняя некоторый тест, я обнаружил, что задания и триггеры сохраняются в БД и (я надеюсь) загружаются правильно, но они не выполняются. Статус триггера всегда находится в «ОЖИДАНИИ».

Я попытался создать структуру таблиц на экземпляре SQLServer (всегда используя предоставленные скрипты), и теперь это работает!!! Итак, что не так с MySQL?

Единственное отличие, которое я замечаю, это то, что имена таблиц в MySQL строчные, а не все прописные, как в SQLServer, может ли это быть проблемой?

Моя конфигурация следующая:

Настройка планировщика через spring

 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="quartzProperties">
        <map>
            <entry key="org.quartz.scheduler.instanceName" value="gep_scheduler" />
            <!-- ThreadPool -->
            <entry key="org.quartz.threadPool.class" value="org.quartz.simpl.SimpleThreadPool" />
            <entry key="org.quartz.threadPool.threadCount" value="3" />
            <entry
                key="org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread"
                value="true" />
            <!-- JobStore -->
            <entry key="org.quartz.jobStore.class" value="org.quartz.impl.jdbcjobstore.JobStoreTX" />
            <entry key="org.quartz.jobStore.driverDelegateClass" value="org.quartz.impl.jdbcjobstore.StdJDBCDelegate" />
            <entry key="org.quartz.jobStore.tablePrefix" value="qrtz_" />
            <entry key="org.quartz.jobStore.dataSource" value="qzDS" />
            <entry key="org.quartz.jobStore.isClustered" value="false" />
            <entry key="org.quartz.jobStore.misfireThreshold" value="60000" />
            <!-- DataSource -->
            <entry key="org.quartz.dataSource.qzDS.driver" value="${db.driver}" />
            <entry key="org.quartz.dataSource.qzDS.URL" value="${db.url}" />
            <entry key="org.quartz.dataSource.qzDS.user" value="${db.user}" />
            <entry key="org.quartz.dataSource.qzDS.password" value="${db.password}" />
            <entry key="org.quartz.dataSource.qzDS.maxConnections" value="${db.maxActivePools}" />
            </map>
    </property>
</bean>
  

ОБРАТИТЕ внимание, что исключение не выдается.

Ответ №1:

Я, наконец, поймал исключение из планировщика:

org.quartz.JobPersistenceException: Couldn't acquire next trigger: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=5' at line 1

Проблема была в драйвере MySQL. Я использовал версию 5.1.6, которая, похоже, несовместима с версиями MySQL 5.6.x.

Я решил импортировать последнюю версию mysql-connector (на данный момент v5.1.31).