Spring Cloud Task在SCDF 2.11.2执行失败,报无效TaskExecution ID
Spring Cloud Task多数据源场景下SCDF 2.11.2中"Invalid TaskExecution, ID X not found"问题修复
我开发了一个基于Spring Boot 3 + Java 17的Spring Cloud Task,用于读取平面文件并插入数据库,属于多数据源场景。该任务在Spring Cloud Data Flow(SCDF) Server 2.11.2上运行时抛出Invalid TaskExecution, ID 50 not found异常,但在SCDF 2.10版本中可正常执行。
调试发现核心问题:Task相关表的前缀始终为默认的TASK_,而非预期的BOOT3_TASK_,即使通过Spring配置文件设置前缀也未生效。
异常栈信息
Caused by: java.lang.IllegalArgumentException: Invalid TaskExecution, ID 50 not found at org.springframework.util.Assert.notNull(Assert.java:172) ~[spring-core-6.1.3.jar!/:6.1.3] at org.springframework.cloud.task.listener.TaskLifecycleListener.doTaskStart(TaskLifecycleListener.java:184) ~[!/:0.0.1-SNAPSHOT] at org.springframework.cloud.task.listener.TaskLifecycleListener.start(TaskLifecycleListener.java:312) ~[!/:0.0.1-SNAPSHOT] at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:284) ~[spring-context-6.1.3.jar!/:6.1.3] ... 19 common frames omitted
应用配置(application.yml)
spring: datasource-scdf: url: "jdbc:postgresql://localhost:5432/dataflow?schema=public" username: postgres password: postgres driver-class-name: org.postgresql.Driver hikari: jdbc-url: "jdbc:postgresql://localhost:5432/dataflow?schema=public" datasource-app: url: "jdbc:mysql://localhost:3306/test_task" username: root password: driver-class-name: com.mysql.cj.jdbc.Driver
数据源配置类
@Configuration public class CustomCloudTaskConfiguration { @Bean @ConfigurationProperties("spring.datasource-scdf") public DataSourceProperties customOperationsDataSourceProperties() { return new DataSourceProperties(); } @Bean(name = "customDatasource") @ConfigurationProperties("spring.datasource-scdf.configuration") public DataSource customOperationsDataSource() { return customOperationsDataSourceProperties() .initializeDataSourceBuilder() .type( HikariDataSource.class ) .build(); } @Primary @Bean public DataSourceTransactionManager taskOperationsTransactionManager() { return new DataSourceTransactionManager( customOperationsDataSource() ); } }
初始的CustomTaskConfigurer实现(存在问题)
@Component public class CustomTaskConfigurer extends DefaultTaskConfigurer { public CustomTaskConfigurer(@Qualifier("customDatasource") DataSource dataSource) { super(dataSource); } }
修复方案
问题出在DefaultTaskConfigurer的构造方法调用上,初始实现没有传入TaskProperties和ApplicationContext,导致配置的表前缀无法被正确加载。修改后的CustomTaskConfigurer如下:
@Component public class CustomTaskConfigurer extends DefaultTaskConfigurer { @Autowired public CustomTaskConfigurer(@Qualifier("springCloudDataSource") DataSource dataSource, TaskProperties taskProperties, ApplicationContext context) { super(dataSource, taskProperties.getTablePrefix(), context); } }
额外注意事项
- 确保任务中定义的数据库配置属性/名称与SCDF服务器执行时传递的参数完全一致,避免数据源匹配错误。
内容的提问来源于stack exchange,提问作者Jaswinder K
相关产品推荐
相关产品推荐

