Spring 应用程序未考虑 spring.schemas

Posted

技术标签:

【中文标题】Spring 应用程序未考虑 spring.schemas【英文标题】:Spring application not taking spring.schemas into account 【发布时间】:2013-12-31 04:06:03 【问题描述】:

我有一个使用 spring-boot 0.5.0M2 的 Spring 批处理。我使用程序集 jar-with-dependencies 来生成可执行的 JAR 文件。我检查了生成的 JAR 是否具有正确的依赖项,即所有必需的 Sprinf xsd 都位于它们应该在的位置,并且 spring-boot 插件已生成正确的 META-INF/spring.schemas。

我从 Cygwin 终端运行我的应用程序,但由于我的代理需要 NTLM 身份验证,我无法从 Cygwin shell 访问网络。

如果我使用 mvn spring-boot:run 运行我的应用程序,它就可以工作。但是在生产中,批处理将使用 java -jar myExecutableJar.jar 运行,我很确定服务器将无法访问 Internet。

在这种情况下,我收到以下错误:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::

2013-12-12 17:15:42,197 INFO [fr.foo.my.app.MyBatch] - <Starting MyBatch on UC401711VW7JAV1 with PID 6848 (C:\nicolas\git\foobatch\target\indexer-batch-0.2.0-jar-with-dependencies.jar started by S818203)>
2013-12-12 17:16:03,481 WARN [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - <Ignored XML validation warning>
org.xml.sax.SAXParseException; lineNumber: 12; columnNumber: 12; schema_reference.4 : Echec de la lecture du document de sch▒ma 'http://www.springframework.org/schema/beans/spring-beans-3.2.xsd' pour les raisons suivantes : 1) Le document est introuvable ; 2) Le document n'a pas pu ▒tre lu ; 3) L'▒l▒ment racine du document n'est pas <xsd:schema>.
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
[...]
Caused by: java.net.ConnectException: Connection timed out: connect
        at java.net.DualStackPlainSocketImpl.connect0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at sun.net.NetworkClient.doConnect(Unknown Source)
        at sun.net.www.http.HttpClient.openServer(Unknown Source)
        at sun.net.www.http.HttpClient.openServer(Unknown Source)
        at sun.net.www.http.HttpClient.<init>(Unknown Source)
        at sun.net.www.http.HttpClient.New(Unknown Source)
        at sun.net.www.http.HttpClient.New(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
        at [...]

所以我将此解释为应用程序试图下载 spring-beans-3.2 XSD,而不是考虑 spring.schemas 并使用 JAR 中存在的类路径资源。

有没有办法强制 Spring 上下文执行此操作?

感谢您的帮助!

【问题讨论】:

我想这可能是一个错误,但它对我有用(构建一个 jar,拔下网络电缆,运行 jar)。在我看来,您的类路径中实际上并没有spring.schemas。不确定这是怎么发生的,但请检查 jar 中的内容。 P.S.你真的需要升级 Spring Boot。自 M2 以来,该项目发生了很多事情。快照有同样的问题吗? 【参考方案1】:

此错误的最常见原因是在 XML 中使用显式版本化架构 URL,然后在类路径中意外包含相关 JAR 的 版本。例如。如果您在 XML 标头中引用 spring-beans-4.0.xsd,但在传递依赖项中包含 spring-context:3.2.*

【讨论】:

以上是关于Spring 应用程序未考虑 spring.schemas的主要内容,如果未能解决你的问题,请参考以下文章

在springmvc+spring+mybatis框架下怎么使用单点登录cas

SE Springer小组之《Spring音乐播放器》可行性研究报告五六

Spring-Boot MVC 模板未加载(未找到 404)

Symfony 属性路由未考虑在内

Spring Boot 应用程序未从 Spring Cloud Config Server 读取属性值

Spring Boot 应用程序未更改