通过 SpringCloud 数据流服务器 2.11.2 运行且任务执行 ID 无效时,Spring Cloud 任务执行失败,但在 2.10 上运行正常

问题描述 投票:0回答:1

我正在编写一个 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 服务器在执行时传递的内容匹配

spring-cloud-dataflow java-17 spring-cloud-task spring-boot-3
1个回答
0
投票

使用 bootVersion=3 注册您的任务应用程序非常重要

REST 文档提供了更多信息:https://docs.spring.io/spring-cloud-dataflow/docs/2.11.2/reference/htmlsingle/#resources-app-registry-post

在仪表板注册页面上有一个启动版本的下拉菜单。

您可以找到有关 Boot 3.x 支持

的更多信息
© www.soinside.com 2019 - 2024. All rights reserved.