工作中的一些小问题(持续更新)
Could not resolve placeholder ‘xxx’ in value “${xxx}”
工作时出现了好几次这个问题,需要记录一下解决思路和方法。
出现这种问题的根源都是配置文件下的这个配置无法正确识别,要么就是最简单的:配置文件里压根没这配置,而自己却使用了;要么就是配置文件本身就无法被识别了。
为什么会无法识别配置文件?最可能的问题是字符集不符合,一旦配置文件内出现中文,无论是不是注释,都会在maven编译后报错的日志中找到这么一句话
1 | |
说明了yaml文件由于字符集不是utf8而不能被正确识别。
这时就要检查自己的配置文件是不是utf8字符集了,如果是本地文件需要用文本文件打开查看;如果是nacos上的配置,那默认就是utf8,说明项目自身编译配置文件时用的不是utf8字符集。
解决方法也很简单,在maven下的<properties>标签增加一个
1 | |
说明编译时需要用utf8编译即可。
try/catch和for循环的内外关系
同事问了我一个问题:在try/catch下的for循环发生异常后,会不会跳出循环?
我愣了一下,之前好像没有考虑过这个问题,当时回答是会跳出的,当然正确答案我也不能确定。
正好在知乎刷到了这个问题的正确解答,在这里记录一下。
- 在try/catch下的for循环,发生异常会跳出并终止循环。
- 在for循环下的try/catch,发生异常会报出异常,但不会终止循环。
记一次Oracle update更新的回滚
早上模模糊糊的,想执行一个插入的语句,没成想写成update了,一下把表里所有数据都更新了,给我吓出一身冷汗…好险是公司的测试环境,不然今天我就拿东西滚蛋了。
大致查了一下怎么恢复,得知了Oracle具有快照的功能,会存储一段时间内的数据,只需要执行如下语句就可以查看。
1 | |
其中table_name是需要回滚的表,时间填要回滚的时间即可。
然后开启表的闪回功能
1 | |
最后修改表
1 | |
只能说以后要引以为戒…
记一个service bean为空的bug
调接口发现报空指针,本地debug才发现报空指针的是service bean,可是其他使用该service的接口都可以正常使用,service也加了@Autowired注解,有点百思不得其解了。后面查询了https://ask.csdn.net/questions/7615814的回答,发现接口方法写成private了...说明private会影响service bean的注入,以后可不能再手快了…
Maven字符集相关问题
今天好不容易写完bug代码,准备打包发测试的时候发现打包失败了,还是第一次遇到这种情况,看了一下错误日志,说明nacos中的配置文件并没有被解析到,导致读取不到配置文件中的常量,上网搜了一下,初步猜测是字符集的问题,首先确认nacos中的字符集,查了一下就知道,nacos中的配置文件字符集默认都是utf-8。
那么只能是本地字符集的问题了,在idea的设置中将所有文件都改为utf-8,继续跑package,结果还是失败…
maven打包失败后会在target中放一个错误日志,查看日志发现了一个更重要的错误。
1 | |
这个错误说明maven打包时使用的字符集与配置文件的字符集不相符,导致不能正常读取。
在网上找了各种方法,给pom文件加了各种配置,都没能有效解决…
根据这个思路继续查,查到博客https://blog.csdn.net/usrnck0709/article/details/124945862,这里给出了四个比较具体的方案,其中我采用的是最后一种,在pom文件中添加
1 | |
即在运行maven时确认字符集为utf-8
查数据库锁表语句,杀锁表进程
1 | |
部署命令
1 | |