【问题标题】:How to remote debug a Spring Cloud Data flow Task如何远程调试 Spring Cloud 数据流任务
【发布时间】:2017-11-03 18:43:13
【问题描述】:

我们正在使用 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

似乎没有任何效果。

【问题讨论】:

    标签: spring-cloud-dataflow


    【解决方案1】:

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

    1. 在您的 IDE 中以 listen 模式在端口 5006 上运行调试器。 (这个项目的类路径应该有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 中 Step Over 一次,javaOptsString 的值现在是 null。使用IDE,将javaOptsString的值设置为

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

    6. 在 IDE 中按 Resume

    7. 您在 #1 中设置的断点应该会在几秒钟内命中。

    如果您知道如何将 javaOpts 作为任务的部署属性传递 - 您将能够在侦听模式下进行调试,而不会出现这种噩梦 ;-)。我还没有找到在-agentlib:jdwp=transport=dt_socket,server=n,address=localhost:5006,suspend=y javaOpts 部署属性中转义=, 字符的方法。

    【讨论】:

      【解决方案2】:

      我们正在为本地部署者改进解决方案 - 您可以关注 spring-cloud/spring-cloud-dataflow#369 以进行跟踪。

      但是,aggregate all the application logs 存在以下选项直接进入服务器控制台,这在积极开发时可能很有用。

      stream deploy --name myStream --properties "deployer.*.local.inheritLogging=true"

      【讨论】:

        【解决方案3】:

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

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

        您现在可以在日志中看到,当启动组合任务的 java 进程时,会使用 debug 参数调用它。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-02-23
          • 1970-01-01
          • 2018-04-16
          • 1970-01-01
          • 2018-05-27
          • 2018-11-27
          • 1970-01-01
          • 2020-07-13
          相关资源
          最近更新 更多