报这个异常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&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&characterEncoding=UTF-8"> </property> <property name="username" value="root"></property> <property name="password" value="root"></property> </bean>
相关推荐
### Java.lang.OutOfMemoryError: Java Heap Space 解决方法详解 在Java开发与运维中,`java.lang.OutOfMemoryError: Java heap space`是一个常见的错误信息,它表明JVM(Java虚拟机)的堆内存已经耗尽,无法再分配...
maven-resources-production java.lang.NegativeArraySizeException java.lang.NegativeArraySizeException 问题解决
1) Error injecting constructor, java.lang.NoSuchMethodError: org.apache.maven.model.validation.DefaultModelValidator: method 'void ()' not found at org.jetbrains.idea.maven.server.embedder....
在Java编程中,`java.lang.ClassNotFoundException` 是一个常见的运行时异常,通常发生在尝试通过类加载器加载指定类时,但找不到对应的字节码文件。在这个特定的问题中,`ClassNotFoundException` 引发的原因是缺少...
Jenkins 是一款强大的持续集成(Continuous Integration, CI)工具,被广泛用于自动化各种软件开发任务,如构建、测试和部署。在本主题中,我们主要关注 Jenkins 的插件及其在 Linux 环境中的应用。 标题提及的 ...
nested exception is java.lang.NoClassDefFoundError_kmode exception" 指出的问题,是Java开发中常见的错误,通常发生在运行时。这个错误表明系统在尝试执行某个类时找不到对应的类定义。`NoClassDefFoundError` ...
idea启动项目报错 java.lang.NegativeArraySizeException解决方法
解决 java.lang.NoSuchMethodError 的错误 Java.lang.NoSuchMethodError 错误是一种常见的 Java 异常,它发生在 Java 虚拟机 (JVM) 无法找到某个类的特定方法时。这种错误可能是由于项目依赖比较复杂、Java 运行...
在这个特定的场景中,异常堆栈跟踪显示了 `Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.Transformer`,这表明系统无法找到 `org.apache.commons.collections.Transformer` 类。...
在Android开发过程中,有时会遇到一个令人困惑的错误——`java.lang.NoClassDefFoundError`。这个错误通常意味着在运行时找不到某个类的定义,即使编译时该类是可用的。在本例中,问题出在一个特定的情景:在Android...
1. https://repo1.maven.org/maven2/mysql/mysql-connector-java/ 2. https://cdn.mysql.com//archives/mysql-connector-java-8.0/mysql-connector-java-8.0.28.zip 3. ...
Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project
java.lang.NoClassDefFoundError: javax/validation/valueextraction/ValueExtractorDeclarationException 今天部署环境遇到这个问题,查了好长时间终于解决了; 问题原因: 由于jar包hibernate-validator、...
在<plugins></plugins>中添加 <groupId>org.apache.maven.plugins <artifactId>maven-compiler-plugin <version>3.8.1 <source>1.8 <target>1.8 </plugin>
commons-lang3.3.1.jar、Apache Commons包中的一个,包含了一些数据类型工具类,是java.lang.*的扩展。必须使用的jar包。为JRE5.0+的更好的版本所提供 Jar文件包含的类: META-INF/MANIFEST.MFMETA-INF/LICENSE....
2. **示例或测试动态库**: 压缩包中可能包含一个示例动态库,供开发者学习如何使用Jnative进行Java与本地代码的交互。这个库可能包含了一些简单的函数,如加减乘除运算,以便开发者理解如何在Java中调用这些函数。 ...
spring-petclinic-master运行mvn install报错:Failed to execute goal io.spring.javaformat:spring-javaformat-maven-plugin:0.0.19:validate (default) on project spring-petclinic: Formatting violations ...
此外,Maven还支持插件,这些插件可以扩展Maven的功能,比如生成项目文档、执行单元测试、进行代码覆盖率分析等。开发者可以根据需要自定义pom.xml中的插件配置,以满足特定的构建需求。 总之,"apache-maven-3.8.1...
Apache Maven 是一个强大的项目管理和构建工具,主要用于Java应用程序的开发。Maven 使用一种标准化的项目对象模型(Project Object Model,POM),通过依赖管理和项目生命周期的概念,帮助开发者自动化构建过程。...