spring 、jpa、classpath几个注意的地方

22 篇文章 0 订阅

1.首先说说spring 与 jpa的问题,现在想买都习惯使用maven来管理,实现分子模块,每个子模块中都自己模块的实体类,每个实体类上使用@Entity进行注解,使其能将该实体自动扫描让jpa来映射管理。但是问题出现,运气好 有部分实体能被映射成功,运气不好一个实体也不能被映射成功。经过实验,发现:persistence.xml 所在的子模块的实体类能被映射,除此之外的都不行,解决办法:不得不放弃 全注解,多配一个<entity-mappings>,将需要映射的实体类通过配置文件进行加载。当然还有其其它解决方法,如使用:<jar-file>、<class>等

2.再说说web项目中加入spring后,web.xml中的配置。

我之前在一篇文章张中说过:

applicationContext.xml 配置文件的存放位置

web.xml中classpath:和classpath*:  有什么区别? 
classpath:只会到你的class路径中查找找文件; 
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找.

上确实是对的。

现在遇到的问题是:

还是maven项目中,一个项目被分成了多个子模块,每个子模块又有各自的applicationContext.xml配置文件,比如:

持久层(子模块):applicationContext-db.xml、applicationContext-mdb.xml

缓存层(子模块):applicationContext-cache.xml

控制层(子模块):applicationContext.xml、applicationContext-task.xml

等..  

然后我们在web.xml 配置如下:

<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>classpath*:applicationContext*.xml</param-value>
</context-param>


上面的意思是:把当前classpath和jar中的classpath中以applicationContext开头的xml文件都加载进来作为spring的配置文件,但经过测试:发现只有控制层的applicationContext.xml、applicationContext-task.xml这两个配置文件成功了,其它模块的都没有加载进来。

那是什么原因呢,猜测classpath* 的*没有生效?还是applicationContext*.xml的* 没有生效,但是加载进来了 applicationContext-task.xml 文件呀,说明后者是生效了的。经过慢慢的测试终于找到了问题发生的现象,当使用classpath*时,后面的文件路径就不能带有通配符。spring去扫描jar里面的文件时,不会吧* 当成 任意字符处理的。只有使用classpath时,spring才会把文件路径中的*解析为任意字符。问题找到了,下来就来看解决办法。

首先修改web.xml 

<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>classpath:applicationContext*.xml,classpath*:applicationContext.xml</param-value>
</context-param>


上面的意思是:

加载当前类路径下的 所有已applicationContext开头的xml  , 同时加载所有jar(子模块)中的applicationContext.xml文件。

但这个配置还是没有满足我们的要求,因为子模块中 还有 applicationContext-db.xml 、applicationContext-cache.xml 等 类似的没有加载进来。

解决办法是 在对应的子模块中,增加一个 applicationContext.xml 文件(因为,根据web.xml中的配置,spring能加载每个子模块的applicationContext.xml 文件,)。然后再各个子模块中的applicationContext.xml 文件中使用<import resource> 将当期子模块的其他配置文件加载进来即可。

如:

<?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:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	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">

	<import resource="applicationContext-db.xml" />
	<import resource="applicationContext-mdb.xml" />
</beans>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IccBoY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值