如何修复“无法处理@BeforeTask或@AfterTask批注,因为:名称为“ application-1”的任务已在运行

时间:2019-08-02 20:52:40

标签: spring-cloud-task

我有一个Spring Cloud Task应用程序设置,可以使用spring.cloud.task.single-instance-enabled = true。使用此选项时,将在TASK_LOCK存储库表中创建一个锁定记录,并且我的任务成功完成。即使任务已完成,此锁定记录仍然保留。随后的运行失败,并显示“无法处理@BeforeTask或@AfterTask注释,因为:名称为“ application-1”的任务已在运行。”

我尝试更改参数以使任务唯一运行,但这没有用。如果我指定一个新的任务名称,则可以使它运行一次,但不能运行两次。手动删除后端的任务锁定记录将允许后续执行相同任务名称。

我是否正确地假设应该在完成任务后从表中删除任务锁?

application.yml

spring:
  cloud:
    task:
      single-instance-enabled: true
  datasource:
    url: ****
    username: ****
    password: ****
    driver-class-name: oracle.jdbc.OracleDriver
  jpa:
    hibernate: 
      ddl-auto: create-drop
    properties:
      hibernate:
        dialect: org.hibernate.dialect.Oracle12cDialect

数据源配置程序类

import javax.sql.DataSource;

import org.springframework.cloud.task.configuration.DefaultTaskConfigurer;

public class DataSourceConfigurer extends DefaultTaskConfigurer {

                public DataSourceConfigurer(DataSource dataSource)

                {
                                super(dataSource);
                }

}

主应用程序类

. . .
@Autowired
       private DataSource dataSource;
       @Bean
       public DataSourceConfigurer getTaskConfigurer() {
              return new DataSourceConfigurer(dataSource);
       }
. . .

我希望执行具有给定任务名称的任务只能一次运行(处于运行状态)。该任务完成后,将允许运行具有相同名称的任务。

实际结果显示,给定任务名称的一项任务只能执行一次。任务锁定记录保留,即使第一次运行已完成,也不允许后续任务执行。

0 个答案:

没有答案