文章目录
背景
近期的开发中遇到的坑,及时的整理,主要内容包括:
- mybatis 原名与别名的问题
- maven项目properties文件找不到的问题
- darknet调用路径的问题
- 基于proto的grpc的经验积累问题
- 关于50051端口的问题
- spring中异步注解容易造成的问题
参考资料
https://blog.csdn.net/chenmixuexi_/article/details/76177331 关于别名的问题
https://www.cnblogs.com/jpfss/p/10273129.html @async注解的说明
解决方案
1.关于mybatis原名与别名的问题
这里的别名我想用两种场景去解释,首先,我们都知道表结构与entity是建立了映射的,比如通过select标签的resultmap属性与 resultmap标签的id对应。但是表的字段与属性的对应,其实是有两种解决方案的,第一种就是在resultmap中直接对应,如下:
<!--
返回的数据映射
type:代表是要映射的对象
id:代表唯一(过会我们要拿到它)
-->
<resultMap type="cn.itsource.domain.Product" id="productMap">
<!--
column:对应的列名
property:对应的属性名
-->
<id column="id" property="id" />
<result column="productName" property="name" />
</resultMap>
<select id="queryOne" parameterType="long" resultMap="productMap">
select * from product where id = #{id}
</select>
但是有时候,原生的列名,太过冗长,不好写也不好记忆,字段多了就容易出错,尤其是在联表的场景,还可能出现冲突的字段名称的问题,哪怕通过给表起别名的方式可以区分,但是还是看起来不容易区分。这时候,就需要给字段起别名,简单的别名,好写也好记忆。需要注意的是,有了别名之后,就要使用别名,如果不使用别名,还使用原来的表的字段名字,就会出现映射的问题,提示找不到字段。
2.maven项目properties文件找不到的问题
这个问题发生在,原来的idea项目写的好好的,在我建了idea项目的子模块A之后,父模块中的代码显示找不到父模块中的properties文件。反思了一下操作,也就是建立了一个子模块A,于是把父模块的中的代码和配置文件,新建了一个子模块B,然后放入了代码和配置文件,一样的代码,运行没有问题。于是就有了总结:一个多模块的项目,在建立子模块的时候,idea的目录结构配置文件会产生变化,导致父目录启动的时候找不到配置文件,也算是idea的一种思想吧,父目录只作为pom,不作为代码的容器。
3.关于darknet框架的问题
调用的所有链接,不管是代码中的还是 文件中的,都用根目录,否则就会找不到地址。可能因为其内部的寻址比较奇怪。
4.基于proto的grpc踩坑经验
1.proto文件要使用同一版本,不同的版本一定报错。
2.需要注意的是,proto文件中哪怕是大小写有差异,也会产生找不到方法的问题,接口大小写敏感。
5.windows端口的问题
50051端口会被神秘的占用,排查了很多也找不到具体是哪个进程占用了,猜测可能是病毒的原因。
重启之后,端口就不再被占用了。
6.关于spring的async注解的问题
需要注意的是,一旦添加了这个注解,在测试的时候,如果这个方法是一个耗时的方法,可能还没等到方法执行完毕jvm就关闭了,这个方法产生的现象自然也就不会出现了。比如发http请求的场景。测试的时候,只要把这个注解去掉,就不会出现这种情况了。