至2023春以来开发问题阶段性记录总结Part5
Hi,我是阿昌,记录一下针对2022秋至2023春以来的一些开发问题的记录和一些注意点,菜鸡🐔见笑了哈哈。+5
1、maven中下的父依赖问题
排查子项目依赖不对的时候,可以使用Dependency Analyzer
的IDEA插件,可以帮助依赖冲突等问题
2、慢sql定位整体思路
1⃣️获取到执行sql ip
2⃣️定位到执行sql ip对应的项目是哪个
3⃣️根据样本sql搜索sql日志获取链路id
4⃣️获取到链路id 搜索Info日志获取请求链路
3、业务组件在service业务层使用,当某个服务不用这个业务组件,但又没有配置信息,就会出现自动装配错误问题
可以根据判断如果没有配置就不自动装配去使用@ConditalOnXXX注解,动态注入
4、当依赖第三方服务的数据时,做好npe的返回判断兼容
如当调用淘宝的sdk时,如果某个字段突然返回为null时就会出现npe的报错,需要业务的需要是try-catch还是用if-else
5、事务里面尽量避免各种count和大查询,导致事务一直阻塞
聚合函数除非专门的统计业务使用,应在业务中避免使用;
同时也避免在业务中无脑开启事物,导致别的查询/ddl操作出现sql执行超时
6、数据迁移且需要停机发布是,判断是否可以采用禁用DDL操作的锁来避免停机发布
1⃣️开启不准写入更新锁(直接报错)supplier不可更新,插入
2⃣️迁移历史数据
3⃣️发布新功能代码
4⃣️关闭锁
5⃣️测试验证
7、发布系统报错—执行了 java.lang.Runtime exit
真实报错内容:
Error: Could not find or load main class org.springframework.boot.loader.WarLauncher
java.lang.Throwable
at com.raycloud.agent.raycloud.hook.safe.RuntimeHook.sendMethod(RuntimeHook.java:24)
at com.raycloud.agent.raycloud.monitor.MonitorUtil.enterMethod(MonitorUtil.java:191)
at java.lang.Runtime.exit(Runtime.java)
at java.lang.System.exit(System.java:971)
at sun.launcher.LauncherHelper.abort(LauncherHelper.java:450)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:508)
Could not find or load main class org.springframework.boot.loader.WarLauncher
解决方案:spring项目需要改成jar包启动;
错误指明不能使用war包的打包方式进行打包,要使用jar包;
可通过pom.xml文件中的
8、nacos开关设置要做好配置中心挂了后有符合业务的默认值返回
从配置中心获取配置时,业务代码要兼容当配置中心万一挂了后不能导致业务服务也会根据出现报错
9、批量拆分查询时duplicateKey问题
若不去重,转Map会有可能出现重复数据问题