Spring Boot: Как запустить запрос на обновление из метода @scheduled cron? - PullRequest
0 голосов
/ 06 марта 2020

У меня есть таблица с именем "docket_seq" только с 1 столбцом "next_val". Мне нужно сбрасывать значение next_val каждый день в определенное время. Я написал запрос на обновление следующим образом:

package com.xxx.xxx.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import com.xxx.xxx.model.DocketSequence;

@Repository
public interface DocketSequenceRepository extends JpaRepository<DocketSequence, Long> {
    @Modifying
    @Query("UPDATE DocketSequence SET next_val='1'")
    Long resetDateSequence(@Param("next_val") Long next_val);       
}

Я запускаю задание cron следующим образом:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import com.xxx.xxx.model.DocketSequence;
import com.xxx.xxx.repository.DocketSequenceRepository;

@Component
public class ResetDocketSequence {
    @Autowired
    DocketSequenceRepository docketSequenceRepository;

    DocketSequence docketSequence; 

    @Scheduled(cron = "0 06 23 * * ?", zone = "Asia/Calcutta")
    public void resetSequence() {   
        docketSequenceRepository.save(docketSequence);
        System.out.println("Cron job has run");      
     }
}

Когда я выполняю код и запускается задание cron, я получаю ошибка: InvalidDataAccessApiUsageException: целевой объект не должен быть нулевым. Я много чего перепробовал, но думаю, что был бы простой способ просто обновить значение столбца в таблице.

1 Ответ

0 голосов
/ 06 марта 2020

Кажется, есть ограничение как NOT NULL для столбца в вашей базе данных. Следовательно, вы не можете сохранить нулевые значения.

DocketSequence docketSequence; является нулевым, когда запускается задание cron, поскольку инициализация отсутствует.

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

...