【问题标题】:Spring context not found using groovy classloader使用 groovy 类加载器找不到 Spring 上下文
【发布时间】:2014-11-18 15:49:14
【问题描述】:

我得到一个典型的错误,因为找不到弹簧上下文:

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsingXML document from class path resource  nested exception is java.io.FileNotFoundException: class path resource  cannot be opened because it does not exist

创建弹簧上下文的类以“奇怪”的方式实例化。有一个 java 进程,创建一个 groovy 类加载器并添加所需的类路径条目(包括带有 spring 上下文的 jar)。使用这个类加载器将执行一个 groovy 脚本,该脚本反过来执行一个 java 类,在静态 init 块中创建一个 spring bean。不幸的是,由于上述异常,这失败了。

如果使用 -cp jarContainingContext 调用初始 java 进程,则它可以工作。包含 spring 上下文的 jar 还包含创建 spring 上下文的 java 类。因此,我确定 jar 在类路径中。

groovy 类加载器是否可能与 spring 的类加载器不同(如果有单独的类加载器)?

java MyClass -> 使用所有必需的类路径条目创建 groovy 类加载器 -> runscript -> groovy 脚本 -> 从还包含 spring 上下文的库中运行 java 类 -> 尝试在静态初始化程序中创建 bean -> 失败

这整个链条听起来很奇怪,但我无法真正改变它。我根本无法理解问题出在哪里。因为创建 spring 上下文的 java 类将被 groovy 类加载器找到,而不是同一个 jar 中的 springContext。似乎有 2 个单独的类路径。

【问题讨论】:

    标签: spring groovy classloader


    【解决方案1】:

    问题出在类加载器上。 SpringBatch 有一个错误,可能会使用系统类加载器。这样就创建了一个类加载器地狱。

    我们发出了一个拉取请求来解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多