Spring XD动态模块ClassLoader问题

时间:2016-11-04 17:18:34

标签: classloader spring-xd

根据文档,我们可以在模块创建时动态加载jar,方法是利用.properties文件中的 module.classloader 属性:

http://docs.spring.io/spring-xd/docs/1.3.1.RELEASE/reference/html/#module-class-loading

我花了两天时间尝试测试此功能。这是行不通的。 module.classloader 选项似乎被忽略了

我在XD代码中找不到任何名为 module.classloader 的字符串。但我在这个类中找到了另一个名为 module.classpath 的文件:

https://github.com/spring-projects/spring-xd/blob/master/spring-xd-module/src/main/java/org/springframework/xd/module/options/ModuleUtils.java

上述类中的代码似乎与文档相符。但不幸的是,它也不起作用。找不到我的类,我得到java.lang.ClassNotFoundException

我有名为 dir4jars 的模块选项,我在创建时加载jar(当我发出作业创建--name xx --defintion ..)。它是一个目录,我已经测试了以下可能性,包括 module.classpath module.classloader

module.classpath=${dir4jars}/*.jar
module.classloader=${dir4jars}/*.jar
.
.
job create --name jobName --definition "myJobModuleName --dir4jars=C:/ELS/Flash/libxd" --deploy

and

job create --name jobName --definition "myJobModuleName --dir4jars=file:C:/ELS/Flash/libxd" --deploy 

我需要 dir4jars 是绝对的并且在XD之外。 所以我的问题:

  • 这个动态负载使用的正确选项是什么? module.classpath module.classloader
  • 如何设置上面提到的绝对目录?

非常感谢。

1 个答案:

答案 0 :(得分:0)

我认为它必须是module.classpathmodule.classloader在文档中看起来像是一个错误。当您明确使用module.classpath=file:C:/ELS/Flash/libxd时,这是否有效?

作为旁注:请考虑使用Spring Cloud Data Flow这是Spring XD的继承者。