鉴于我需要使用多个数据源,我在IntelliJ Idea 2020.1.3中根据Spring云任务示例编译了以下示例:https://github.com/mminella/spring-cloud-task/tree/master/spring-cloud-task-samples/multiple-datasources
然后,我使用mvn package
将其打包在一个JAR中,将其复制到启动docker compose的位置(根据官方的SCDF(Spring Cloud Data Flow)本地部署说明),并将其添加到SCDF中,在SCDF外壳中运行以下命令:app register--type task--name multiple datasources--urifile://root/scdf/multiple-datasources-2.3.0-SNAPSHOT.jar
。
我使用SCDF添加了任务,如图所示:
当我尝试从仪表板运行任务时,执行实例没有提到任何开始时间或结束时间。仪表板上也没有任何显示。
使用任务执行日志从SCDF外壳程序中查阅日志
2020-07-14 02:38:14.403 INFO 63 --- [ main] i.spring.MultipleDataSourcesApplication : Starting MultipleDataSourcesApplication v2.3.0-SNAPSHOT on 5856acfa7c62 with PID 63 (/root/scdf/multiple-datasources-2.3.0-SNAPSHOT.jar started by root in /tmp/289541567048/multiple-datasources-9c75a131-4ea9-40ff-ac42-44729162e6f5)
2020-07-14 02:38:14.407 INFO 63 --- [ main] i.spring.MultipleDataSourcesApplication : No active profile set, falling back to default profiles: default
2020-07-14 02:38:17.242 INFO 63 --- [ main] o.s.j.d.e.EmbeddedDatabaseFactory : Starting embedded database: url='jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', username='sa'
2020-07-14 02:38:18.145 INFO 63 --- [ main] o.s.j.d.e.EmbeddedDatabaseFactory : Starting embedded database: url='jdbc:hsqldb:mem:testdb', username='sa'
2020-07-14 02:38:18.810 DEBUG 63 --- [ main] o.s.c.t.c.SimpleTaskAutoConfiguration : Using io.spring.configuration.CustomTaskConfigurer TaskConfigurer
2020-07-14 02:38:18.823 DEBUG 63 --- [ main] o.s.c.t.c.DefaultTaskConfigurer : No EntityManager was found, using DataSourceTransactionManager
2020-07-14 02:38:18.928 DEBUG 63 --- [ main] o.s.c.t.r.s.TaskRepositoryInitializer : Initializing task schema for h2 database
2020-07-14 02:38:19.036 ERROR 63 --- [ main] o.s.c.t.listener.TaskLifecycleListener : An event to end a task has been received for a task that has not yet started.
2020-07-14 02:38:19.036 WARN 63 --- [ main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Failed to start bean 'taskLifecycleListener'; nested exception is java.lang.IllegalArgumentException: Invalid TaskExecution, ID 31 not found
2020-07-14 02:38:19.036 INFO 63 --- [ main] o.s.j.d.e.EmbeddedDatabaseFactory : Shutting down embedded database: url='jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false'
2020-07-14 02:38:19.245 INFO 63 --- [ main] o.s.j.d.e.EmbeddedDatabaseFactory : Shutting down embedded database: url='jdbc:hsqldb:mem:testdb'
2020-07-14 02:38:19.258 ERROR 63 --- [ main] o.s.c.t.listener.TaskLifecycleListener : An event to end a task has been received for a task that has not yet started.
2020-07-14 02:38:19.264 INFO 63 --- [ main] ConditionEvaluationReportLoggingListener :
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-07-14 02:38:19.273 ERROR 63 --- [ main] o.s.boot.SpringApplication : Application run failed
以下错误尤其突出:
2020-07-14 02:38:19.036 WARN 63 --- [ main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Failed to start bean 'taskLifecycleListener'; nested exception is java.lang.IllegalArgumentException: Invalid TaskExecution, ID 31 not found
2020-07-14 02:38:19.258 ERROR 63 --- [ main] o.s.c.t.listener.TaskLifecycleListener : An event to end a task has been received for a task that has not yet started.
2020-07-14 02:38:19.264 INFO 63 --- [ main] ConditionEvaluationReportLoggingListener :
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
该示例在
application.properties
中有以下行:
spring.application.name=Demo Multiple DataSources Task
logging.level.org.springframework.cloud.task=DEBUG`
所以,如果我没有弄错的话,应该已经启用了调试。
具体来说,我的问题是:
1) 考虑到这是一个示例,即使未经修改也无法运行,我可能会忽略什么或做错什么?
2) 如何正确启用调试?
非常感谢。
PS:来自repo的示例已经具有H2数据库依赖性,这是在pom中使用Spring云数据流注册定制Spring云任务的答案。xml。
我没有尝试用当前的启动初始值设定项重新创建示例,但是我尝试用最新的初始值设定项创建一个简单的hello world,我得到了完全相同的错误。我不认为是初始化错误。
我还没有尝试最后一个建议,压倒一切。但考虑到这是一个官方示例,我真的需要覆盖默认配置吗?
PPS:我知道我的SCDF安装工作正常,因为我能够运行以下示例中的预打包时间戳程序:https://cloud.spring.io/spring-cloud-task-app-starters/
这似乎与任务应用程序没有使用与SpringCloud数据流相同的数据库有关。你需要确保,
您可以在这里阅读一些相关文档
我遇到了同样的问题:每当我启动批处理作业时,任务执行就会增加。
我在数据库(我在批处理作业中使用的)中查询了任务执行表,但没有找到与该执行ID相关的内容。
我试图删除批处理作业并从Docker注册表重新导入应用程序,但任务执行仍然会增加,没有希望!
我查看了SCDF服务器配置。yaml文件,用于在Kubernetes上安装SCDF,并发现SCDF使用Mysql系统数据库存储其内容,这很奇怪!!
https://github.com/spring-cloud/spring-cloud-Dataflow/blob/main/src/kubernetes/server/server-config.yaml
url: jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT}/mysql
我查询了mysql系统数据库,发现里面有任务执行表,ID信息!
问题解决了,SCDF本身将任务执行ID保存在自己的数据库中,而我们的批处理应用程序使用不同的数据库,因此它产生了问题。我必须临时将批处理应用程序数据库更改为SCDF的数据库,即mysql系统数据库。
来自:app。一批Spring数据源。url=jdbc:mysql://mysql:3306/task?useSSL=false
发送至:app。一批Spring数据源。url=jdbc:mysql://mysql:3306/mysql?useSSL=false
结论:SCDF需要自己的数据库来管理任务执行,批处理应用程序(在批处理数据库旁边)应该指向该SCDF数据库才能工作。此外,在Kubernetes中安装SCDF期间,您应该将SCDF的数据库更改为其他位置,而不是mysql系统数据库
本教程向您展示了如何使批处理应用程序同时使用2个数据源
https://github.com/spring-cloud/spring-cloud-task/tree/main/spring-cloud-task-samples/multiple-datasources
此链接将添加有关此问题的更多信息:
https://github.com/spring-io/dataflow.spring.io/issues/161
背景:
我按照这个链接安装了SCDF服务器(这让我抓狂)
https://dataflow.spring.io/docs/installation/kubernetes/kubectl/#deploy-数据流服务器
它指向
https://github.com/spring-cloud/spring-cloud-dataflow/blob/main/src/kubernetes/server/server-config.yaml
而这个链接
https://dataflow.spring.io/docs/batch-developer-guides/batch/spring-batch/
使用mysql urlurl=jdbc创建批处理应用程序的指南:mysql://localhost:3306/task?useSSL=false
(任务数据库),但它不会告诉您SCDF如何使用任务执行ID
我想Spring应该更新文档并添加更多关于SCDF任务执行过程的解释
我使用部署到pivotal cloud foundry的spring云数据流,将spring批处理作业作为spring云任务运行,这些作业需要aws凭据才能访问s3存储桶。 我尝试将aws凭据作为任务属性传递,但凭据作为参数或属性显示在任务的日志文件中。(https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/html
我试图了解运行批处理任务时通过Spring Cloud数据流WRT数据源配置的预期行为。 Spring批处理数据库表(Batch\u JOB\u EXECUTION等)是否在SCDF数据库本身中?当通过SCDF启动任务时,似乎发生了一些神奇的事情,它在SCDF数据库中创建了这些表,并似乎在使用它们。它似乎正在将SCDF数据源注入我的应用程序? 我目前在localhost服务器版本2.0.1上运行。
我在Openshift集群上安装了一个Spring Cloud数据流。我尝试注册一个应用程序,然后创建一个任务,一切都很好,但当我试图安排任务时,我遇到了以下异常: 我不知道这是什么意思,我是Dataflow的新手。我不明白为什么他试图使用Maven而不是kubernetes部署器,也不明白为什么我会出现这个错误。有人能再给我解释一下吗? 顺便说一句,我将这些应用程序注册为docker容器。
我无法编译谷歌云数据流SDK。我在执行“mvn安装”时出错:
我有一个从流-任务-启动器-数据流调用的组合任务 我将流处理器中的几个属性传递给任务启动器数据流和子任务,例如。。。 这可以正常工作,但我已经达到了最大字符限制,并在组合任务pod上得到一个sql异常,说明我已经超过了2500个字符的限制。我想为所有任务而不是单独设置属性以节省字符空间,但使用通配符不起作用 有没有办法为所有任务设置属性,而不必单独设置? 我尝试在kubernetes中的Sprin
我试图存储我的源在Kafka一个单独的主题流源的最后读取记录。我怎么能实现这与Spring云数据流流应用程序。任何建议都会有很大帮助...