相关疑难解决方法(0)

CLASSPATH中的WEB-INF?

WEB-INF文件夹CLASSPATH是Java Web应用程序的吗?

java classpath web-inf

53
推荐指数
2
解决办法
4万
查看次数

context:property-placeholder不解析引用

applicationContext.xml在classpath的根目录下有下一个文件:

<context:annotation-config />

    <context:property-placeholder location="classpath:props/datasource.properties"  />

    <bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource"
        p:username="${jdbc.username}" 
        p:password="${jdbc.password}" 
        p:url="${jdbc.url}"
        p:driverClassName="${jdbc.driverclass}" 
        p:validationQuery="SELECT sysdate FROM dual" />

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
        p:dataSource-ref="datasource" 
        p:mapperLocations="classpath:mappers/*-mapper.xml" />

    <tx:annotation-driven transaction-manager="txManager" />
    <bean id="txManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
        p:dataSource-ref="datasource" />

    <bean id="mappeScannerConfigurere" class="org.mybatis.spring.mapper.MapperScannerConfigurer"
        p:sqlSessionFactory-ref="sqlSessionFactory" 
        p:basePackage="com.mypackage" />
Run Code Online (Sandbox Code Playgroud)

props/datasource.properties 也存在于classpath的根目录中,内容如下:

jdbc.url=myjdbcurl
jdbc.driverclass=myClass
jdbc.username=myUserName
jdbc.password=myPassword
Run Code Online (Sandbox Code Playgroud)

我有一个spring托管测试,我声明通过下一个注释使用前面提到的applicationContext.xml:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
Run Code Online (Sandbox Code Playgroud)

当我调用测试方法时,我从spring获得下一个错误:

org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class '${jdbc.driverclass}'
Run Code Online (Sandbox Code Playgroud)

据我所知,sping没有解析对jdbc.driverclass的引用.我做错了什么?

PS:我正在使用spring 3.2.3.RELEASE

**

编辑

**

也许问题可能在于MapperScannerConfigurer.这是一个BeanDefinitionRegistryPostProcessor和Javadoc说:

扩展到标准BeanFactoryPostProcessor SPI,允许常规BeanFactoryPostProcessor检测开始之前注册其他bean定义

因此,MapperScannerConfigurer通过sqlSessionFactory实例化数据源对象BeanFacoryPostProcessor …

spring mybatis

8
推荐指数
1
解决办法
3321
查看次数

在Spring中,尽管已经定义了"PropertyPlaceholderConfigurer",但获取"java.lang.IllegalArgumentException:无法解析占位符"

我正在使用Spring 3.2.11.RELEASE和Maven 3.3.我在我的应用程序上下文文件中定义了这个...

<bean id="localPropertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
     <property name="locations">
        <list>
            <value>classpath:quickbase.properties</value>
        </list>
        </property>
</bean> 
…
<bean id=“myClient" class="org.mainco.subco.mysystem.MyClient">
    <constructor-arg index="0" type="String" value="${quickbase.username}" />
    <constructor-arg index="1" type="String" value="${quickbase.password}" />
    <constructor-arg index="2" type="String" value="${quickbase.url}" />
</bean>
Run Code Online (Sandbox Code Playgroud)

但是当我运行我的测试时,我得到以下错误

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'myClient' defined in class path resource [META-INF/spring/applicationContext-orders.xml]: Could not resolve placeholder 'quickbase.username' in string value "${quickbase.username}"; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'quickbase.username' in string value "${quickbase.username}"
Run Code Online (Sandbox Code Playgroud)

这让我感到困惑,因为在我的target/classes目录中,我可以看到一个文件"quickbase.properties",它定义了"quickbase.username".我无法弄清楚我还需要检查什么.

spring properties applicationcontext property-placeholder

1
推荐指数
1
解决办法
1万
查看次数