当前位置: 首页 > 知识库问答 >
问题:

如何在Spring Boot1.4.2.版本中在计划任务中进行数据库事务

秦时铭
2023-03-14

谁能给我一个例子,说明如何使用Spring Boot1.4.2.Release在计划任务中调用DB事务?非常感谢。

我使用Spring Boot 1.4.2.Release通过@schedule(fixedRate=5000)@transactional(propagation=propagation.requires_new)创建了一个计划任务,并使用@autowired获得了JPararePository的一个实例。

@Scheduled(fixedRate = 5000)
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void importDataFromDat() {
    List records = datUploadRecordRepository.findAllByImportTime();

    for (DatUploadRecord record : records) {

        record.setImportTime(new Date());
        datUploadRecordRepository.save(record);
  //    datUploadRecordRepository.updateImportTime(new Date(), record.getId());
    }
}
  1. 它可以返回select SQL的结果,但不能将实体保存到数据库。
  2. 如果我在自己的JpaRepository中创建自己的update方法,而不是调用save()方法,则会导致以下错误:

共有1个答案

高迪
2023-03-14

也许晚了,但您能不能创建一个独立的事务性组件来管理操作,然后从任务中调用它?

在我们的应用程序中,我们使用了一个计划任务来清除文档。调用document service获取所有单据(事务性操作),然后对每个单据进行清除(document service的清除方式也是事务性的)

 类似资料:
  • 我正在从事一个Spring Webflux项目,在计划任务中发布和使用Flux时遇到了一个问题。 我配置的调度程序: 除非我在最后故意阻止,否则这项任务永远不会完成: 我最初没有费心直接引用发布/订阅计划程序,我尝试了所有看似合理但没有效果的选项。 我的日志事件发生了,但当来自调度程序的该任务的线程死亡时,通量也会被丢弃;即使在我指定发布和订阅行为后,它们应该在自己的线程池中? 我想使这个行动完全

  • 我正在编写一个应用程序,它有一个cron作业,每60秒执行一次。应用程序配置为在需要时扩展到多个实例。我只想每60秒在一个实例上执行一次任务(在任何节点上)。开箱即用,我找不到解决这个问题的方法,我很惊讶以前没有人问过多次。我使用的是Spring 4.1.6。

  • 我使用JavaFX制作了一个GUI,有三个单选按钮,一旦用户单击提交并创建了另一个线程,并且根据检查了什么单选按钮,线程运行所需的输出并将结果输出到控制台。 但是当线程运行时(一个进程需要大约30秒才能完成),我可以检查任何放射性按钮。它创建另一个线程并与另一个正在进行的线程一起输出长时间。所以我的输出框只是一个乱七八糟的东西!我在看异步任务,但我不确定这是否与它有关。 以下是我需要的:如果一个任

  • 问题内容: 我想将应用程序的版本号存储在MySQL数据库中,例如: 我应该使用哪种数据类型。 问题答案: 您有2个选择: 使用varchar 使用三个数字字段,主要,次要,补丁 同时使用。 每个选项都有其优点和缺点。 选项1只是一个字段,因此很容易获得版本。但这不一定是可排序的,因为从字典上讲2.0.0将高于10.0.0。 选项2可以很容易地进行排序,但是您必须获得三个字段。 选项3可以使用以下视

  • 在此之前我问了一个问题。我的服务conifg是: 我编写了一个扩展mediator交易文件。该类返回文件名并向服务发送请求。服务没有输入消息。我要每天13:30的服务。我尝试添加新的计划任务。但是它不能工作?谁能告诉我如何设置这个计划任务? 我也不知道如何设置“固定服务器”。

  • 我想使用spring测试框架测试hibernate Session的save()方法。@测试方法为: 我想刷新用户到数据库。我希望我的用户在此方法后在数据库中 然后我要使用spring data framework转到database并通过下一行获取这个保存的用户: 非常感谢您的回应。问题是方法flush()没有将我的用户放入数据库,我尝试了isolation.read_uncommitted,但