spring-boot - Spring Boot:如何从@scheduled cron 方法内部运行更新查询?
问题描述
我有一个名为“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:目标对象不能为空。我已经尝试了很多东西,但我认为会有一种简单的方法来更新表中列的值。
解决方案
NOT NULL
您的数据库中的列似乎有一个约束。因此,您不能保存空值。
cron 作业开始时为 null ,DocketSequence docketSequence;
因为没有初始化。
为您定义一个默认值DocketSequence
以更新数据库中的值。另一种选择是允许您的列使用空值。
推荐阅读
- python - 在python中删除数据框中的重复行
- node.js - 在更新 Node js 中的数据时遇到问题
- python - Python:最近调用最后一个错误
- java - 使用 Java 从 URL 读取 XSD
- c# - 在 Azure Function 中接收 Docx 并返回纯文本
- php - 循环遍历 json 文件以在 PHP 中查找特定值
- python - py2neo:无法创建图形
- android - 在 Android Studio 上实现 firebase 的错误消息
- android - 如何加入 ObjectBox
- python-3.x - “charmap”编解码器无法编码位置 XX 中的字符