Грааль - Кварц - PullRequest
       6

Грааль - Кварц

1 голос
/ 10 сентября 2010

Я пытаюсь использовать плагин Quartz для Grails, чтобы запланировать работу в веб-приложении, над которым я работаю.Использование RAMstore работало нормально, но мне нужно, чтобы работа сохранялась в нашей базе данных SQLServer, что вызвало проблемы ...

Я изменил переменную jdbcStore в QuartzConfig.groovy на true, установил def в volatility = false вфайл задания и использовал код SQLServer для генерации необходимых таблиц в базе данных, но постоянно получаю сообщение об ошибке:

org.quartz.impl.jdbcjobstore.LockException: сбой при получении блокировки строки БД: строка 1: FORПредложение UPDATE разрешено только для DECLARE CURSOR.[См. Вложенное исключение: com.microsoft.sqlserver.jdbc.SQLServerException: строка 1: предложение FOR UPDATE разрешено только для DECLARE CURSOR.]

Имейте в виду, что это может быть связано с тем, что кварцевый плагин не настроендля базы данных SQLServer, но в Интернете о ней почти ничего не известно (в основном это полная реализация Java, а не grails), а эксперименты с файлами конфигурации не помогли.

Кто-нибудь знает, как это сделать?заставить это работать?И какой из различных конфигурационных файлов Quartz использует Grails?

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 20 августа 2016

Я использую кварц: 1.0.2 в нескольких проектах.
Я не сохраняю свою работу, я присваиваю каждой работе уникальное имя.Затем я сохраняю состояние своей работы в домене, который я создаю для отслеживания состояния задания.

Например, секция execute моей работы находит свой домен отслеживания состояния, используя jobName, который является уникальным значением, которое я загружаюиз файлов свойств для каждой из моих работ.Затем я передаю экземпляр FileImporter, связанный с этим заданием, моей службе, которая выполняет все условные состояния задания.

        FileImporter fileImporter1 = FileImporter.findByName(jobName);
        fileImporterService.importWhileEnabled(fileImporter1);

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

В моем сервисе я использую

static transactional = false

и сразу сохраняю состояние с помощью flush: true

fileImporter.save(failOnError: true, flush: true);
...