spring+mybatis 数据源读取不到配置文件的值
2016-07-28 17:20
627 查看
最近在搭建maven + springmvc + spring + mybatis + mysql 过程中遇到一个问题(tomcat启动的时候报异常
java.lang.IllegalStateException: Could not load JDBC driver class [${jdbc_driverClassName}])经过查询相关资料最后解决,解决如下:
开始我的application.xml中配置如下:
<!-- 引入jdbc配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:/jdbc.properties</value>
<!--要是有多个配置文件,只需在这里继续添加即可 -->
</list>
</property>
</bean>
<!-- 配置数据源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!-- 不使用properties来配置
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/weizl" />
<property name="username" value="root" />
<property name="password" value="123456" />-->
<!-- 使用properties来配置 -->
<property name="driverClassName" value="${jdbc_driverClassName}" />
<property name="url" value="${jdbc_url}"/>
<property name="username" value="${jdbc_username}" />
<property name="password" value="${jdbc_password}" />
</bean>
<!-- 配置Mybatis的文件 ,mapperLocations配置**Mapper.xml文件位置,configLocation配置mybatis-config文件位置-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:com/wzl/mapper/*.xml"/>
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
</bean>
<!-- 自动扫描了所有的XxxxMapper.xml对应的mapper接口文件,这样就不用一个一个手动配置Mpper的映射了,只要Mapper接口类和Mapper映射文件对应起来就可以了。 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.wzl.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
引起问题的原因是由于MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了
解决方法修改为如下配置:
<!-- 引入jdbc配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:/jdbc.properties</value>
<!--要是有多个配置文件,只需在这里继续添加即可 -->
</list>
</property>
</bean>
<!-- 配置数据源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!-- 不使用properties来配置
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/weizl" />
<property name="username" value="root" />
<property name="password" value="123456" />-->
<!-- 使用properties来配置 -->
<property name="driverClassName" value="${jdbc_driverClassName}" />
<property name="url" value="${jdbc_url}"/>
<property name="username" value="${jdbc_username}" />
<property name="password" value="${jdbc_password}" />
</bean>
<!-- 配置Mybatis的文件 ,mapperLocations配置**Mapper.xml文件位置,configLocation配置mybatis-config文件位置-->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:com/wzl/mapper/*.xml"/>
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
</bean>
<!-- 自动扫描了所有的XxxxMapper.xml对应的mapper接口文件,这样就不用一个一个手动配置Mpper的映射了,只要Mapper接口类和Mapper映射文件对应起来就可以了。 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.wzl.dao" />
<property name="sqlSessionFactoryBeanName" value="sessionFactory" />
</bean>
说明:使用sqlSessionFactoryBeanName注入,不会立即初始化sqlSessionFactory, 所以不会引发提前初始化问题,同时还应注意在配置org.mybatis.spring.SqlSessionFactoryBean
这个Bean时,id不能为sqlSessionFactory,如果为这样的话会导致MapperScannerConigurer在bean定义加载时,加载PropertyPlaceholderConfigurer还没来得及替换定义中的变量
java.lang.IllegalStateException: Could not load JDBC driver class [${jdbc_driverClassName}])经过查询相关资料最后解决,解决如下:
开始我的application.xml中配置如下:
<!-- 引入jdbc配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:/jdbc.properties</value>
<!--要是有多个配置文件,只需在这里继续添加即可 -->
</list>
</property>
</bean>
<!-- 配置数据源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!-- 不使用properties来配置
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/weizl" />
<property name="username" value="root" />
<property name="password" value="123456" />-->
<!-- 使用properties来配置 -->
<property name="driverClassName" value="${jdbc_driverClassName}" />
<property name="url" value="${jdbc_url}"/>
<property name="username" value="${jdbc_username}" />
<property name="password" value="${jdbc_password}" />
</bean>
<!-- 配置Mybatis的文件 ,mapperLocations配置**Mapper.xml文件位置,configLocation配置mybatis-config文件位置-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:com/wzl/mapper/*.xml"/>
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
</bean>
<!-- 自动扫描了所有的XxxxMapper.xml对应的mapper接口文件,这样就不用一个一个手动配置Mpper的映射了,只要Mapper接口类和Mapper映射文件对应起来就可以了。 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.wzl.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
引起问题的原因是由于MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了
解决方法修改为如下配置:
<!-- 引入jdbc配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:/jdbc.properties</value>
<!--要是有多个配置文件,只需在这里继续添加即可 -->
</list>
</property>
</bean>
<!-- 配置数据源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!-- 不使用properties来配置
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/weizl" />
<property name="username" value="root" />
<property name="password" value="123456" />-->
<!-- 使用properties来配置 -->
<property name="driverClassName" value="${jdbc_driverClassName}" />
<property name="url" value="${jdbc_url}"/>
<property name="username" value="${jdbc_username}" />
<property name="password" value="${jdbc_password}" />
</bean>
<!-- 配置Mybatis的文件 ,mapperLocations配置**Mapper.xml文件位置,configLocation配置mybatis-config文件位置-->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:com/wzl/mapper/*.xml"/>
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
</bean>
<!-- 自动扫描了所有的XxxxMapper.xml对应的mapper接口文件,这样就不用一个一个手动配置Mpper的映射了,只要Mapper接口类和Mapper映射文件对应起来就可以了。 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.wzl.dao" />
<property name="sqlSessionFactoryBeanName" value="sessionFactory" />
</bean>
说明:使用sqlSessionFactoryBeanName注入,不会立即初始化sqlSessionFactory, 所以不会引发提前初始化问题,同时还应注意在配置org.mybatis.spring.SqlSessionFactoryBean
这个Bean时,id不能为sqlSessionFactory,如果为这样的话会导致MapperScannerConigurer在bean定义加载时,加载PropertyPlaceholderConfigurer还没来得及替换定义中的变量
相关文章推荐
- Java NIO 简单了解
- Spring Bean的作用域
- Java入门
- Java +安卓 定时任务
- Java数据库连接池的几种配置方法(以MySQL数据库为例)
- javaweb学习总结(二十三)——jsp自定义标签开发入门
- Java JVM:编译加载与自定义类加载器
- JAVA 和 C# 调用外部.exe文件,传值并等等exe完成,获取返回值
- java http接口和webservice接口开发
- Java动态代理
- Spring Boot实战之全局异常捕获 实现参数异常检查返回统一错误信息
- Spring整理
- 深入理解Java:注解(Annotation)--注解处理器
- Eclipse FindBugs插件安装与使用
- mybatis+SpringMVC环境搭建
- 关于Spring的69个面试问答
- 在java项目中使用log4j的实例
- Spring4笔记----实现 FactoryBean 接口配置 Bean
- java 反射
- java代理机制