maven单元测试报java.lang.IllegalStateException: Failed to load ApplicationContext

6 篇文章 0 订阅
6 篇文章 0 订阅

  报这个异常java.lang.IllegalStateException: Failed to load ApplicationContext的时候,通常是因为applicationContent.xml里面的bean初始化失败的原因。

 

  在maven的项目中,直接启动服务器没有报错,但在用maven进行的单元测试中,有时会报

java.lang.IllegalStateException: Failed to load ApplicationContext

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1058E:(pos 1): A problem occurred when trying to resolve bean 'props':'
Could not resolve bean reference against BeanFactory'

 

  原因是这样的,applicationContext.xml里面的那个bean props,是用jndi的形式注入进来的,一般用jndi形式都是配置一些缓存和数据源的,如

 

  <jee:jndi-lookup id="props" jndi-name="java:comp/env/props"/>
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations" value="file:#{@props}"/>
        <property name="ignoreResourceNotFound"  value="true"/>
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
        <property name="valueSeparator"  value=":=" />
    </bean>

    <bean id="mccSocketIOPool" class="com.danga.MemCached.SockIOPool"
        factory-method="getInstance"
        init-method="initialize"
        destroy-method="shutDown"
        p:servers="${memcached.servers}"
        p:maxConn="${memcached.maxConn}"
        p:initConn="${memcached.initConn}"
        p:socketConnectTO="${memcached.socketConnectTO}"
        p:socketTO="${memcached.socketTO}"
        p:maintSleep="${memcached.maintSleep}"
        p:failover="${memcached.failover}"
        p:failback="${memcached.failback}"
        p:nagle="${memcached.nagle}" >
        <constructor-arg value="morden"/>
    </bean>
    <bean id="mcc" class="com.danga.MemCached.MemCachedClient" p:sanitizeKeys="false" >
        <constructor-arg value="morden"/>
    </bean>
     <jee:jndi-lookup id="dataSource" jndi-name="jdbc/morden"/>

 ,而jndi的配置通常在服务器的配置文件里面配置的,如resin服务器,conf下面某个应用的数据源配置:

<database>
		<jndi-name>jdbc/morden</jndi-name>
		<driver type="com.mysql.jdbc.Driver">
			<url>jdbc:mysql://localhost:3306/gltest?useUnicode=true&amp;characterEncoding=UTF-8</url>
			<user>root</user>
			<password>root</password>
		</driver>
		<prepared-statement-cache-size>8</prepared-statement-cache-size>
		<max-connections>20</max-connections>
		<max-idle-time>30s</max-idle-time>
	</database>

 如果应用经过服务器(resin)启动,那么应用首先会加载jndi的配置,然后在spring的applicationContext.xml配置文件里面就会加载相应的属性值,就会正常注入相关的bean。但,如果用maven的单元测试来跑应用的话,maven不会启动应用服务器(resin),然后spring初始化bean的时候就找不到相应属性值,就报上面那个错误了。解决方案也很简单,就是在单元测试的时候,把要加载的spring bean的配置文件里面的jndi方式都改为hard code形式,就可以了。为了不影响原来的配置文件,最好用一个新的配置文件作为测试。修改后的配置文件形式如下,主要是缓存服务器和datasource的配置:

    <bean id="mccSocketIOPool" class="com.danga.MemCached.SockIOPool"
        factory-method="getInstance"
        init-method="initialize"
        destroy-method="shutDown"
        p:servers="127.0.0.1:11211"
        p:maxConn="10"
        p:initConn="20"
        p:socketConnectTO="3000"
        p:socketTO="3000"
        p:maintSleep="30"
        p:failover="false"
        p:failback="true"
        p:nagle="false" >
        <constructor-arg value="morden"/>
    </bean>

    <bean id="mcc" class="com.danga.MemCached.MemCachedClient" p:sanitizeKeys="false" >
        <constructor-arg value="morden"/>
    </bean>
    
    <bean id="dataSource"
          class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/gltest?useUnicode=true&amp;characterEncoding=UTF-8">
        </property>
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
    </bean>

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java.lang.IllegalStateException: Failed to load ApplicationContext是一个常见的错误,通常在使用Spring框架时出现。这个错误表示应用程序上下文加载失败,可能由于以下原因导致: 1. 缺少依赖:检查项目的依赖是否正确配置,并确保所有必需的库文件都已正确添加到项目中。 2. 配置错误:检查应用程序的配置文件(如application.properties或application.yml)是否正确配置。确保数据库连接、端口号等配置项正确。 3. 资源文件丢失:检查项目中是否缺少必需的资源文件,如数据库脚本、配置文件等。确保这些文件存在并位于正确的位置。 4. 类路径问题:检查类路径是否正确设置。确保所有的类和资源文件都能被正确加载。 解决这个问题的方法可能因具体情况而异,但以下是一些常见的解决方法: 1. 检查日志:查看应用程序的日志文件,尤其是错误堆栈跟踪信息。这些信息可以帮助你确定问题的具体原因。 2. 检查依赖:确保项目的依赖项正确配置,并且版本兼容。可以使用构建工具(如Maven或Gradle)来管理依赖项。 3. 检查配置文件:仔细检查应用程序的配置文件,确保其中的配置项正确设置。 4. 检查资源文件:确保项目中的资源文件存在,并且路径正确。 5. 清理和重建项目:有时,清理并重新构建项目可以解决一些编译或构建相关的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值