如何远程调试Spring Cloud Data flow Task

时间:2017-11-03 18:43:13

标签: spring-cloud-dataflow

我们正在使用Spring XD执行一些批处理作业并考虑使用Spring Cloud Dataflow。为此,我想远程调试任务的执行,但我无法使其工作。

我尝试在启动SCDF服务器之前导出以下环境变量:

spring.cloud.deployer.local.javaOpts=Xdebug -Xrunjdwp:transport=dt_socket,address=12201,server=y

还尝试在调用任务时在GUI中传递参数:

app.<appname>.local.javaOpts=Xdebug -Xrunjdwp:transport=dt_socket,address=12201,server=y

似乎没有任何效果。

3 个答案:

答案 0 :(得分:1)

我可以使用composed-task-runner调试器模式调试SCDF发起的listen,这也适用于您的任务。

  1. 在端口5006上以侦听模式在IDE中运行调试程序。 (这个项目的类路径应该有composed-task-runner个来源,把断点放在哪里)
  2. 使用-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005选项运行SCDF,将调试器附加到IDE中端口 5005 附加模式)上的SCDF进程。
  3. 在这一行放置断点: String javaOptsString = getValue(deploymentProperties, "javaOpts"); JavaCommandBuilder班级(spring-cloud-deployer-local v.1.3.0.M2,#83}行。
  4. 启动任务 - 调试器在断点处停止。
  5. 在IDE中跳过一次,javaOptsString的值现在为null。使用IDE,将javaOptsString的值设置为

    -agentlib:jdwp=transport=dt_socket,server=n,address=localhost:5006,suspend=y

  6. 在IDE中按Resume

  7. 在#1中设置的断点应在几秒钟内完成。
  8. 如果您知道如何将javaOpts作为任务的部署属性传递 - 您将能够在没有此噩梦的情况下以侦听模式进行调试;-)。我找不到在= javaOpts部署属性中转义,-agentlib:jdwp=transport=dt_socket,server=n,address=localhost:5006,suspend=y字符的方法。

答案 1 :(得分:0)

我们正在为本地部署人员制定改进的解决方案 - 您可以按spring-cloud/spring-cloud-dataflow#369进行跟踪。

但是,aggregate all the application logs直接存在于服务器控制台中的以下选项,这在活动开发中可能很有用。

  

stream deploy --name myStream --properties“deployer。* .local.inheritLogging = true”

答案 2 :(得分:0)

最后,我能够远程调试组合任务或常规任务。请按照以下步骤操作:

  1. 在scdf UI中,转到任务并单击定义部分
  2. 单击要调用的任务/组合任务上的播放按钮(调用)。
  3. 在启动任务页面上定义您的任务参数
  4. 点击“添加属性”按钮添加以下属性:          - deployer.composed-task-runner.local.debugPort = 12103          - deployer.composed-task-runner.local.debugSuspend = y
  5. 现在启动任务
  6. 现在,您可以在日志中看到启动组合任务的java进程时,将使用debug参数调用它。

    如果要通过添加以下属性来控制堆内存或任何java选项:       deployer.composed任务-runner.local.javaOpts = Xmx2048M 请注意,'composed-task-runner'是应用程序的名称(不是任务的名称)。