我有一个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);
}
. . .
我希望执行具有给定任务名称的任务只能一次运行(处于运行状态)。该任务完成后,将允许运行具有相同名称的任务。
实际结果显示,给定任务名称的一项任务只能执行一次。任务锁定记录保留,即使第一次运行已完成,也不允许后续任务执行。