发表于: 2019-04-09 23:51:13

1 495


今天完成:

1.解决了昨天调试时碰到的两个问题,跑通了邮箱验证

 1)问题一

问题描述:

java.lang.IllegalArgumentException: Could not resolve placeholder 'XXX' in string value "${XXX}";

我以前是碰到过这种类型的错误的,当时是因为Spring的配置文件中配置了多个<context:property-placeholder>标签造成的.

问题排查:

不过我记得我在项目中并没有配置多个<context:property-placeholder >.

怀疑是昨天写sendcloudBean注入的有问题

@Component
@PropertySource(value = "classpath:/application.properties", ignoreResourceNotFound = true)
public class SendCloudBean {

感觉可能是这个@PropertySource和这个<context:property-placeholder >冲突了,把@propertysource给注释掉,再试了一下,还是没用.

最后发现是<context:property-placeholder >中的location不能识别正则表达式引起的

多个<context:property-placeholder >错误产生的原因:

 spring容器采用反射扫描的发现机制,通过标签的命名空间实例化实例,当spring检查到容器中已经有一个org.springframework.beans.factory.config.PropertyPlaceholderCVonfigurer的Bean时,会停止对PropertyPlaceholderConfigurer的扫描,即只能存在一个实例(单例).所以呢在引用配置第二个<context:property-placeholder >中的值时就会报错.

 我感觉这和我碰到的是差不多的,只能存在一个,不过@PropertySource和<context:property-placeholder >的底层实现不一样,为什么也会产生冲突,这个问题以后研究,先到这.


 2)问题2

问题背景:

 由于要实现邮箱验证,手机验证,头像等功能,需要对user对象添加几个属性,需要改动表结构,mapper,user对象.产生了这个问题,之前的一些代码直接由MBG直接生成,并没有产生问题.

问题排查:

 遇到这个问题,显示debug了好久,仔细检查了好多遍代码,没看出啥来.最后到网上搜了搜,大部分回答都是对象没有无参构造函数造成的,很明显,我的问题跟这个不搭嘎.

 最后我觉得可能是resultmap属性映射顺序的问题,尝试着将resultmap的顺序和有参构造函数注入的参数相对应,问题解决.

 

问题产生原因:

 resultMap建立sql查询结果字段与实体属性映射关系的建立有两种方式:

 1.通过setter方式构造领域模型,这种方式必须提供一个无参的构造函数和属性的setter方法,因为这种方式是通过无参构造函数创建一个实体对象,再通过set方法将查询出来的值set到对象属性中

 2.通过构造函数构建领域模型,也就是目前我的项目中mapper使用的方式


遇到的问题:

见今天完成


收获:

了解mybatis的mapper文件中resultMap标签的两种用法


明天计划:

项目集成图片存储




返回列表 返回列表
评论

    分享到