报这个异常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>
相关推荐
1) Error injecting constructor, java.lang.NoSuchMethodError: org.apache.maven.model.validation.DefaultModelValidator: method 'void ()' not found at org.jetbrains.idea.maven.server.embedder....
idea启动项目报错 java.lang.NegativeArraySizeException解决方法
com.springsource.tcl.lang.jacl-1.4.1生成报错替换包.zip
Maven更新问题 今天Maven在更新的时候发现... http://maven.aliyun.com/nexus/content/repositories/central/ central junit junit Address/ http://jcenter.bintray.com/ central alimaven aliyun maven htt
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. ...
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 ...
标签:activation、sun、jakarta、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译...
Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project
赠送jar包:weixin-java-common-3.5.0.jar; 赠送原API文档:weixin-java-common-3.5.0-javadoc.jar; 赠送源代码:weixin-java-common-3.5.0-sources.jar; 赠送Maven依赖信息文件:weixin-java-common-3.5.0.pom;...
Jnative1.4_java调用动态库所需jar,里面包含了一个可以测试的动态库,可以自己拿下来玩玩。
commons-lang3.3.1.jar、Apache Commons包中的一个,包含了一些数据类型工具类,是java.lang.*的扩展。必须使用的jar包。为JRE5.0+的更好的版本所提供 Jar文件包含的类: META-INF/MANIFEST.MFMETA-INF/LICENSE....
idea创建Maven项目时,报错显示Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.0.2:resources,并且Maven插件内看不到 mybatis-generator。如下图: 折腾了好久发现配置放错地方了,...
Maven坐标:org.scala-lang.modules:scala-java8-compat_2.11:0.7.0; 标签:scala、lang、modules、java8、compat、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可...
当开发Maven项目时,添加了依赖的代码后,默认情况下,会从国外的Maven仓库服务器下载所需的 jar包文件,下载过程可能耗时较长,且经由的网络设备较多,下载得到的jar包文件因为丢失部分数据 而损坏的概率偏高,建议...
1. 前往https://maven.apache.org/download.cgi下载最新版的Maven程序: 2. 将文件解压到D:\Program Files\Apache\maven目录下: 3. 新建环境变量MAVEN_HOME,赋值D:\Program Files\Apache\maven 4. 编辑环境变量Path...
maven java imaging 01012005 jar 安装方式 到jar的对应位置执行 mvn install:install-file -Dfile=Dm7JdbcDriver-7.1.3.204-jdk16.jar -DgroupId=...
标签:fasterxml、jackson、dataformat、cbor、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和...
Free Spire.Doc for Java版本: 3.9.0
maven jar包依赖 com.ckfinder:ckfinder:jar:2.3
apache-maven-3.8.4-bin.zip