`
kkcheng
  • 浏览: 40726 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

spring3.1 加载不进PropertyPlaceholderConfigurer

 
阅读更多
最近项目升级,spring3.1+mybatis3.1+mybatis-spring1.1.0
数据查询时老是报classNotFound ${jdbc.driverClassName},debuy源码发现PropertyPlaceholderConfigurer在BasicDataSource之后载,正常的情况下应该是这前加载?网上搜了下得到如下结构:
      
我用spring3.0.6+mybatis3.0.6+mybatis-spring1.0.2做了一个demo,我把数据库连接驱动放在src下,但是我在spring配置文件中加上 <context:property-placeholder location="classpath:jdbc.properties" />,dataSource配置如下:
view source
print?
01 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
02 <!--         <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/> -->
03 <!--         <property name="jdbcUrl" value="jdbc:oracle:thin:@10.1.1.3:1521:orcl"/> -->
04 <!--         <property name="user" value="hyq"/> -->
05 <!--         <property name="password" value="oracle"/> -->
06         
07         <property name="driverClass" value="${jdbc.driverClass}"/>
08         <property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
09         <property name="user" value="${jdbc.user}"/>
10         <property name="password" value="${jdbc.password}"/>
11
12     </bean>

抛出异常如下:
1 2011-11-19 20:37:57 WARN [com.mchange.v2.c3p0.DriverManagerDataSource:107] - Could not load driverClass ${jdbc.driverClass}
2 java.lang.ClassNotFoundException: ${jdbc.driverClass}

而把上面那段注释的打开,相当于写死在配置文件中就正常。从上面异常我只能看出没加载

属性文件成功,属性文件如下:
view source
print?
01 ## jdbc config
02 jdbc.driverClass=oracle.jdbc.driver.OracleDriver
03 jdbc.jdbcUrl=jdbc:oracle:thin:@10.1.1.3:1521:orcl
04 jdbc.user=hyq
05 jdbc.password=oracle
06 jdbc.initialPoolSize=5
07 jdbc.minPoolSize=5
08 jdbc.maxPoolSize=30
09 jdbc.acquireIncrement=5
10 jdbc.maxIdleTime=10
11 jdbc.maxStatements=0

---------------------------------------------------------------------

在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 进行自动扫描的时候,设置了sqlSessionFactory 的话,可能会导致PropertyPlaceholderConfigurer失效,也就是用${jdbc.username}这样之类的表达式,将无法获取到properties文件里的内容。 导致这一原因是因为,MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了。 但如果不设置sqlSessionFactory 属性的话,就必须要保证sessionFactory在spring中名称一定要是sqlSessionFactory ,否则就无法自动注入。又或者直接定义 MapperFactoryBean ,再或者放弃自动代理接口方式。



分享到:
评论
2 楼 lijunwyf 2016-01-26  
怎么解决?
1 楼 checkes 2013-04-25  
我也遇到了

相关推荐

    Spring动态加载配置文件

    `PropertyPlaceholderConfigurer`是Spring早期版本中处理属性文件的工具,而`@PropertySource`则是从Spring 3.1引入的新特性,它们都可以用来从外部属性文件中读取值并注入到bean中。 1. `...

    org.springframework.beans.factory.config.PropertyPlaceholderConfigurer

    `org.springframework.beans.factory.config.PropertyPlaceholderConfigurer` 是Spring框架中的一个重要组件,主要负责处理配置文件中的占位符替换。这个类是Spring在初始化bean时用来解析和注入环境变量或系统属性...

    第十九章 Spring Environment 抽象(Environment Abstraction)1

    在Spring 3.1之前,占位符处理主要由`PropertyPlaceholderConfigurer`完成,而在3.1及以后版本,这个功能被`PropertySourcesPlaceholderConfigurer`和`EmbeddedValueResolver`接口接管,使得处理更加灵活和高效。...

    spring

    Spring的使用场景广泛,包括但不限于: - **Web开发**:Spring MVC框架提供了一个简洁的MVC实现,用于构建高性能的web应用程序。 - **数据访问**:Spring提供了JDBC抽象层,以及对ORM框架如Hibernate和JPA的支持,...

    spring-reference

    Spring框架可以应用于多种不同的场景,包括但不限于: - **Web开发**:Spring MVC提供了强大的功能来支持构建基于HTTP的Web应用。 - **数据访问**:Spring提供了一套统一的数据访问抽象层,使得开发者能够轻松地在...

    java 获取properties的几种方式(csdn)————程序.pdf

    Spring 3.1引入了`Environment`接口,可以通过它来获取Properties的值。在Bean中注入`Environment`对象,然后调用`getProperty()`方法: ```java @Autowired private Environment env; public void ...

    Spring中配置和读取多个Properties文件的方式方法

    总结起来,Spring通过`PropertyPlaceholderConfigurer`或`PropertySourcesPlaceholderConfigurer`提供了一种灵活的方式来加载和读取多个Properties文件,使得应用可以根据不同的配置文件进行初始化,从而实现配置的...

    基于spring 方法级缓存的多种实现

    然后,在Spring配置文件中声明`PropertyPlaceholderConfigurer`来加载这些属性,接着创建`JedisPoolConfig`,配置Redis连接池的参数。最后,声明`JedisPool`、`JedisConnectionFactory`和`RedisTemplate`,用于与...

    对SAE主从数据库连接的管理和封装.docx

    Spring的配置文件通常采用XML格式,但需要注意的是,在SAE环境下,不能使用`&lt;context&gt;`标签,因为SAE在撰写本文时还不支持。以下是简化后的Spring配置示例: ```xml &lt;beans xmlns="http://www.springframework.org...

    详解五种方式让你在java中读取properties文件内容不再是难题

    如果不依赖于Spring,可以直接使用`java.io.InputStream`和`java.util.Properties`类加载并读取properties文件。例如: ```java Properties props = new Properties(); ClassPathResource resource = new Class...

    引入多个properties时.txt

    &lt;bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt; &lt;value&gt;classpath:jdbc.properties &lt;value&gt;classpath:res.properties ...

Global site tag (gtag.js) - Google Analytics