我正在编写一个 Spring Cloud 任务(Spring Boot 3,Java 17),它读取平面文件并将其插入数据库。所以这是一个多数据库场景。通过 SpringCloud 数据流服务器 2.112 运行,失败并显示“ Invalid TaskExecution, ID ”。请参阅下面的例外情况。
有人可以指出我哪里出错了吗? 我尝试过调试它,我注意到 tablePrefix 始终是“TASK_”而不是“BOOT3_TASK_”
我们将非常感谢您的帮助。
例外:
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() );
}
}
默认任务配置器
@Component
public class CustomTaskConfigurer extends DefaultTaskConfigurer {
public CustomTaskConfigurer(@Qualifier("customDatasource") DataSource dataSource) {
super(dataSource);
}
}
我尝试通过 Spring 配置文件设置表前缀,但没有成功
修复
@Component
public class CustomTaskConfigurer extends DefaultTaskConfigurer {
@Autowired
public CustomTaskConfigurer(@Qualifier("springCloudDataSource") DataSource dataSource, TaskProperties taskProperties, ApplicationContext context) {
super(dataSource, taskProperties.getTablePrefix(),context);
}
}
还要确保任务中定义的数据库配置属性/名称与 SCDF 服务器在执行时传递的内容匹配
使用 bootVersion=3 注册您的任务应用程序非常重要
REST 文档提供了更多信息:https://docs.spring.io/spring-cloud-dataflow/docs/2.11.2/reference/htmlsingle/#resources-app-registry-post
在仪表板注册页面上有一个启动版本的下拉菜单。
您可以找到有关 Boot 3.x 支持
的更多信息