Spring MVC XML项目中spring-tx.xsd文件问题无法解决
解决Spring 6迁移中spring-tx.xsd找不到的警告
问题重现
将Spring 3(Java 1.8.x)应用迁移至Spring 6(OpenJDK 19)后,启动时出现警告:
ResourceEntityResolver - DTD/XSD XML entity [https://www.springframework.org/schema/tx/spring-tx.xsd] not found, falling back to remote https resolution
核心原因与解决步骤
1. 修正XML配置中的URL拼写错误
观察你的Spring配置文件,发现xmlns:tx和xsi:schemaLocation中的URL存在空格错误:
错误写法:
xmlns:tx="http://www.spring framework.org/schema/tx" xsi:schemaLocation="http://www.spring framework.org/schema/tx https://www.springframework.org/schema/tx/spring-tx.xsd"
正确写法(去掉spring和framework之间的空格):
xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/tx https://www.springframework.org/schema/tx/spring-tx.xsd"
这是直接导致问题的关键原因,Spring无法识别错误的命名空间URL,自然找不到对应的本地Schema文件。
2. 确保Spring TX依赖与Spring 6版本完全一致
Spring 6对内部依赖的版本一致性要求严格,必须保证spring-tx的版本和Spring核心框架版本完全匹配:
- 若使用Maven,检查
pom.xml中的依赖:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>6.x.x</version> <!-- 替换为你使用的Spring 6具体版本,比如6.0.14 --> </dependency>
- 执行依赖树检查(Maven:
mvn dependency:tree,Gradle:./gradlew dependencies),排除任何Spring 3/4/5版本的旧依赖冲突。
3. 验证Spring TX包内的Schema映射
Spring的Schema文件默认打包在spring-tx的jar包中,通过META-INF/spring.schemas文件做本地映射。你可以直接查看依赖的spring-tx.jar内容,确认:
- 存在
spring-tx.xsd文件(通常在org/springframework/transaction/config/目录下) META-INF/spring.schemas中包含如下映射行:
https://www.springframework.org/schema/tx/spring-tx.xsd=org/springframework/transaction/config/spring-tx.xsd
如果缺失,说明依赖包损坏或版本不正确,重新下载依赖即可。
4. 针对OpenJDK 19的兼容性调整
OpenJDK 19对XML实体解析的安全限制更严格,必要时可添加JVM启动参数放宽限制:
-Djdk.xml.entityExpansionLimit=0 -Djdk.xml.totalEntitySizeLimit=0
额外提示
- 尽量避免手动添加本地xsd文件到项目中,Spring 6推荐通过依赖包自动加载Schema,手动文件容易导致版本不匹配。
- 如果服务器网络受限无法远程拉取Schema,必须确保本地依赖包完整包含对应xsd且映射正确。
内容的提问来源于stack exchange,提问作者Rocken
相关产品推荐
相关产品推荐

