需要了解spring.handlers和spring.schemas

Vir*_*ato 17 spring xsd uri spring-batch spring-3

我有一些问题来自我已经通过另一个问题解决的问题.但是,我仍然想知道根本原因.我的问题如下:

  1. spring.handlersspring.schemas的目的是什么?

据我所知,这是一种告诉Spring Framework在哪里找到xsd以便所有内容都正确连线和加载的方法.但...

  1. 在什么情况下我应该在META-INF文件夹下有这两个文件?

  2. 在我上面链接的另一个问题中,是否有人知道为什么我必须maven-shade-plugin在META-INF下添加创建这两个文件(基于我所有的依赖项)?换句话说,导致我必须使用maven shade插件的根本原因是什么?

Mic*_*low 27

spring.handlers和spring.schemas的目的是什么?

好吧你或多或少发现自己,让我们添加更多细节:

一些spring库在META-INF目录中包含一个spring.schemas和一个spring.handlers文件

META-INF/spring.schemas

  • 重新映射(*)schemalocation到库中的xsd
  • (摘要)此库仅支持重新映射的版本

META-INF/spring.handlers

  • 为特定名称空间提供名称空间处理程序类
  • 命名空间处理程序类提供解析器逻辑来解析弹出批处理bean,如作业, 步骤等.

(*)在构建spring应用程序上下文期间发生了实际的重新映射


在什么情况下我应该在META-INF文件夹下有这两个文件?

通常这些文件都在你使用的spring库jar中,但是你可以使用这种机制来实现自己的命名空间bean解析,那么你就拥有自己的文件


在上面链接的另一个问题中,是否有人知道为什么我必须在META-INF下添加maven-shade-plugin来创建这两个文件(基于我的所有依赖项)?换句话说,导致我必须使用maven shade插件的根本原因是什么?

如果在spring配置中使用spring命名空间,则需要相应的文件

当您想要运行Java应用程序时出现问题:

  • 还有一个主要课程
    • spring库需要在classpath上
    • 或者全部合并到一个jar中,该jar必须在classpath(*)上
  • 作为war/ear服务器应用程序,弹簧库需要在类路径上,通常在战争中

我猜你没有用完整的类路径启动主类,我也为你的第一个问题更新了我的答案

(*)如果将all合并到一个jar中,则必须确保所有spring.schemas/spring.handlers文件的内容合并为一个spring.schemas和一个spring.handlers文件,请参阅此答案以获取配置与maven一起创造一体化.jar