配置ssm框架遇到的一个坑(<context:property-placeholder>占位符配置失效)
来源:互联网 发布:机器人编程语言py 编辑:程序博客网 时间:2024/06/07 00:48
最近几天在学习ssm框架,spring mvc+spring+mybatis。配置完毕后测试数据源时一直报错,连接不上,一开始是这个
然后无奈之下,索性都改成了字符串常量,去掉占位符的形式(时间已过去三个小时,期间一直在打发时间),结果成功了,能连接上数据库。当时真想扇自己一耳光。然后我就纳闷明明我已经配置了<context:property-placeholder location="classpath:jdbc.properties">
为什么就没生效呢,而且我配置的位置是在spring_application_context.xml这个spring 应用上下文xml文件的最上面的位置,不应该出现加载bean时未解析到的情况。然后我就百度了下,网上说的是要么直接将 <!-- 扫描dao包下的 interface -->
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.lcz.ssm.dao"></property>
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
上面的第二个sqlSessionFactory属性配置删除,要么这行改成
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
(注意这里后面是value,这个sqlSessionFactoryBeanName属性在MapperScannerConfigurer类中为String类型变量)。这里问题已经明朗了,然后我很奇怪,为什么这么搞就没问题了,然后我看了下源码上该方面的注释,顿时豁然开朗。
![这里写图片描述](http://img.blog.csdn.net/20170508215349605?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzMzMTc1Njg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 这里javaDoc中很明确地说了:翻译过来就是-----该方法在spring 上下文中不止一个SqlSessionFactory的情况下用来指定使用哪个SqlSessionFactory.通常这个仅当你有不止一个数据源时才需要使用。 注意这里使用的是bean的名字,不是bean的引用。这是由于在开始阶段,这个scanner类加载的比较早,过早地构造mybatis 对象实例。 这么一来我想上面我那种做法之所以导致占位符失效,大概就是因为,MapperScannerConfigurer这个类在spring ioc容器中创建较早,如果直接引用sqlSessionFactory的话,导致这个bean也过早创建,而占位符那个类PropertySourcesPlaceholderConfigurer此时还没有创建,自然未注册到spring 应用上下文中去,因而导致占位符失效。 另外可以看到下面这个方法已经废弃。 @Deprecated
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
感觉这个方法废弃估计跟这个也有关系吧。另外再补充点自己配置ssm遇到的坑,也是关于jdbc.properties属性文件的,那就是你在配置jdbc.properties时千万要注意属性值后面空格问题,属性值前面空格会看作属性名属性值之间的分隔符,不会计入属性值的一部分,而属性值后面的空格会算作属性值字符串的一部分。另外还有一点就是属性名,最好不要取作username,这样很有可能在spring 应用上下文文件中会被系统username变量值所覆盖,结果${username}的取值就变成你的环境变量user的值了, 比如Administrator,从而无法连接上数据库。
- 配置ssm框架遇到的一个坑(<context:property-placeholder>占位符配置失效)
- spring <context:property-placeholder/> 配置详解
- <context:property-placeholder>配置资源文件
- spring <context:property-placeholder/> 配置详解
- context:property-placeholder junit配置无效解决方法
- spring <context:property-placeholder/> 配置详解
- spring <context:property-placeholder/> 配置详解
- Spring配置<context:property-placeholder>标签解析
- spring 配置<context:property-placeholder/> 作用
- spring 配置文件中的占位符 使用 context:property-placeholder
- spring 配置文件中的占位符 使用 context:property-placeholder
- spring 配置文件中的占位符 使用 context:property-placeholder
- spring 配置文件中的占位符 使用 context:property-placeholder
- Spring配置:用context:property-placeholder替换PropertyPlaceholderConfigurer
- Spring配置:用context:property-placeholder替换PropertyPlaceholderConfigurer
- spring3以后 <context:property-placeholder>配置资源文件
- 外在化应用参数的配置 spring <context:property-placeholder location="" />
- 关于<context:property-placeholder>的一个有趣现象
- Butterknife的使用以及一些莫名其妙的错误解答
- Hibernate5学习笔记(四)
- Codeforces Round #412 ( Div. 2) C
- Isolation Forest算法总结
- Go语言对数组进行冒泡排序和快速排序
- 配置ssm框架遇到的一个坑(<context:property-placeholder>占位符配置失效)
- Python数据采集之Requests
- springboot+security 动态权限修改session立即失效(六)
- IDEA中Tomcat相关——如无法访问localhost:8080欢迎页面,无法配置web.xml以及server.xml,设置download.xml下载目录无效等问题
- 处理JMeter乱码的三种处理方法
- Github最火开源项目-四分钟学会分析内存泄漏
- BackTrack-----找出一个集合的所有子集(78. Subsets)
- LVS中文手册
- 登录短信验证实现