Spring配置文件的xsd知识点

简介: Spring配置文件的xsd知识点

今天在Spring配置文件中配置如下事务属性时,提示<tx is not bound(不受约束的),估计是配置文件的xsd没配置好。


<!-- 2.配置事务属性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"></tx:method>
<tx:method name="*"></tx:method>
</tx:attributes>
</tx:advice>


在xsi:schemaLocation=中增加:


http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

错误就消失了。


网上查阅了相关资料,现总结如下:


xml文档要有格式,为了Spring的配置文件增加的节点(比如<tx:advice)能符合要求、合法,必须通过引入校验该xml格式的文件,也就是xsd文件。Spring通过配置可以联网引入xsd文件,也可以在断网下使用本地xsd文件校验xml文件。


xsi:schemaLocation 属性提供一种方法来查找在 XML 实例文档中定义的命名空间的 XML 架构定义。它的值是用空白分隔的统一资源标识符 (URI) 对的列表,其中的每一对 URI 都依次包含一个命名空间以及该命名空间的 XML 架构定义(通常为 .xsd 文件)的位置。


xsi:schemaLocation 提供了xml的namespace到对应的xsd文件的映射,从下列配置可以看出xsi:schemaLocation 里面配置的字符串都是成对的,前面是namespace的URI,后面是xsd文件的URI


 xsi:schemaLocation="
           http://www.springframework.org/schema/beans    
           http://www.springframework.org/schema/beans/spring-beans-4.1.xsd    
           http://www.springframework.org/schema/context    
           http://www.springframework.org/schema/context/spring-context-3.0.xsd 
           http://www.springframework.org/schema/jee
           http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
           http://www.springframework.org/schema/tx   
           http://www.springframework.org/schema/tx/spring-tx-3.0.xsd    
           http://www.springframework.org/schema/aop    
           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 

Spring在启动时默认要加载xsd文件来验证XML文件的,在浏览器中输入复制的xmlns:tx的链接,也就是http://www.springframework.org/schema/tx,可以看到如下页面:

以上都是可选的tx的xsd版本,而xsi:schemaLocation的http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 在用浏览器访问是该版本xsd对应内容的页面:

 

箭头指的就是对<tx:advice进行xml校验的部分,从上面代码看出,tx还可以添加<tx:annotation-driven,<tx:jta-transaction-manager 节点,这个与xml中的提示是一致的:

 

advice部分的具体代码如下:


1 <xsd:element name="advice">
 2 <xsd:complexType>
 3 <xsd:annotation>
 4 <xsd:documentation source="java:org.springframework.transaction.interceptor.TransactionInterceptor">
 5 <![CDATA[
 6 Defines the transactional semantics of the AOP advice that is to be executed. That is, this advice element is where the transactional semantics of any    number of methods are defined (where transactional semantics includes the propagation settings, the isolation level, the rollback rules, and suchlike).
 7 ]]>
 8 </xsd:documentation>
 9 <xsd:appinfo>
10 <tool:annotation>
11 <tool:exports type="org.springframework.transaction.interceptor.TransactionInterceptor"/>
12 </tool:annotation>
13 </xsd:appinfo>
14 </xsd:annotation>
15 <xsd:complexContent>
16 <xsd:extension base="beans:identifiedType">
17 <xsd:sequence>
18 <xsd:element name="attributes" type="attributesType" minOccurs="0" maxOccurs="1"/>
19 </xsd:sequence>
20 <xsd:attribute name="transaction-manager" type="xsd:string" default="transactionManager">
21 <xsd:annotation>
22 <xsd:documentation source="java:org.springframework.transaction.PlatformTransactionManager">
23 <![CDATA[
24 The bean name of the PlatformTransactionManager that is to be used to drive transactions. This attribute is not required, and only needs to be specified explicitly if the bean name of the desired PlatformTransactionManager is not 'transactionManager'.
25 ]]>
26 </xsd:documentation>
27 <xsd:appinfo>
28 <tool:annotation kind="ref">
29 <tool:expected-type type="org.springframework.transaction.PlatformTransactionManager"/>
30 </tool:annotation>
31 </xsd:appinfo>
32 </xsd:annotation>
33 </xsd:attribute>
34 </xsd:extension>
35 </xsd:complexContent>
36 </xsd:complexType>
37 </xsd:element>

如果此时无法上网,就无法从该网站获取到该xsd文件,就无法对xml文件进行校验了,容易发生应用启动不了的情况。为此我们可以加载本地的xsd文件,这样断网情况下也可以启动应用了。举例子来说,若tx的xsd文件没有配置,则要进行如下步骤进行配置


1、点开项目的lib,找到spring-tx-4.1.4.RELEASE.jar,右键属性-复制文件路径(复制jar之前的路径),在文件夹地址栏粘贴,回车打开;


 

2、将spring-tx-4.1.4.RELEASE.jar解压到某个文件夹,有如下文件:



3、在org\springframework\transaction\config路径下可以找到:



里面还有旧版本的xsd文件,这样可以避免配置文件用的还是旧版本的xsd文件,而Spring是新版本情况下,断网应用启动不了的情况。Spring这个确实想得挺周到的。


4、将tx的某个版本的xsd文件拷贝到工程的source folder下,然后xml的配置改成如下形式:

xsi:schemaLocation="http://www.springframework.org/schema/beans 
        classpath:beans/spring-beans-4.1.xsd 
        http://www.springframework.org/schema/mvc 
        classpath:mvc/spring-mvc-4.1.xsd 
        http://www.springframework.org/schema/context 
        classpath:context/spring-context-4.1.xsd 
        http://www.springframework.org/schema/aop 
        classpath:aop/spring-aop-4.1.xsd 
        http://www.springframework.org/schema/tx   
        classpath:tx/spring-tx-4.1.xsd ">


这样就可以从本地获取xsd文件,就算断网也可以解析xml文件了。

附一份常见的spring配置文件的文件头:


------------------------------------3.0----------------------------
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.0.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
</beans>


当然你也可以根据使用的Spring的相应jar包版本更改对应的版本,比如上面的3.0可以改成4.1也行


http://www.springframework.org/schema/  该网站是Spring所有可能用到的结点属性的xsd列表,点击相应选项即可查到对应的xsd版本与xsd的URI:


 


相关文章
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
117 2
|
3月前
|
XML Java 数据格式
Spring从入门到入土(xml配置文件的基础使用方式)
本文详细介绍了Spring框架中XML配置文件的使用方法,包括读取配置文件、创建带参数的构造对象、使用工厂方法和静态方法创建对象、对象生命周期管理以及单例和多例模式的测试。
156 7
Spring从入门到入土(xml配置文件的基础使用方式)
|
9天前
|
Java 测试技术 应用服务中间件
Spring Boot 配置文件总结
Spring Boot 提供全局配置文件 `application.properties` 和 `application.yml`,用于修改自动配置的默认值。前者使用键值对配置,后者使用缩进和冒号。不同环境(开发、测试、生产)可切换配置文件,通过 `spring.profiles.active` 指定。例如,开发环境端口为4790,测试环境为4791,生产环境为4792。配置示例展示了属性、List、Map定义及引用方法。
50 14
|
1月前
|
XML Java 数据格式
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
本文介绍了在使用Spring框架时,如何通过创建`applicationContext.xml`配置文件来管理对象。首先,在resources目录下新建XML配置文件,并通过IDEA自动生成部分配置。为完善配置,特别是添加AOP支持,可以通过IDEA的Live Templates功能自定义XML模板。具体步骤包括:连续按两次Shift搜索Live Templates,配置模板内容,输入特定前缀(如spring)并按Tab键即可快速生成完整的Spring配置文件。这样可以大大提高开发效率,减少重复工作。
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
|
30天前
|
Java Spring
【Spring配置】创建yml文件和properties或yml文件没有绿叶
本文主要针对,一个项目中怎么创建yml和properties两种不同文件,进行配置,和启动类没有绿叶标识进行解决。
|
3月前
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
3月前
|
Java 测试技术 Spring
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件
这篇文章介绍了Spring Boot中配置文件的语法、如何读取配置文件以及如何通过静态工具类读取配置文件。
285 0
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件
|
3月前
|
存储 前端开发 Java
Spring Boot 集成 MinIO 与 KKFile 实现文件预览功能
本文详细介绍如何在Spring Boot项目中集成MinIO对象存储系统与KKFileView文件预览工具,实现文件上传及在线预览功能。首先搭建MinIO服务器,并在Spring Boot中配置MinIO SDK进行文件管理;接着通过KKFileView提供文件预览服务,最终实现文档管理系统的高效文件处理能力。
526 11
|
3月前
|
Java Maven Spring
用Spring导致的无法运行Java文件的问题的解决方案
本文提供了解决在IntelliJ IDEA社区版中使用Spring Initializr插件创建Spring项目后,Java文件无法运行的问题的方法,主要是通过加载Maven项目来解决。
100 0
|
4月前
|
消息中间件 NoSQL 安全
(转)Spring Boot加载 不同位置的 application.properties配置文件顺序规则
这篇文章介绍了Spring Boot加载配置文件的顺序规则,包括不同位置的application.properties文件的加载优先级,以及如何通过命令行参数或环境变量来指定配置文件的名称和位置。
149 0