各类框架工具报错
错误总结
线上问题
[[线上问题总结-茶颜供应链]]
Java基础
- 空指针异常 NullException
- 场景
- 新增字段直接判断 newFiled == 1。应该 newFiled == null || newFiled == 1
- 查询外部接口返回了null
- 场景
Java框架
Spring
AOP
Transactional事务失效
本类调用,不走代理。
例子
1
2
3
4
5
6
7
8
9public Result update User(User user, SubmitInfo submitInfo){
UserDetail userDetail = buildUserDetail(user);
this.updateUser(userDetail);
}
public Result doUpdateUser(userDetail){
}原因
本类调用,不走代理。
@Transactional 生效,需要走代理。
走代理需要注入到spring容器中,并且他类调用
解决
新写一个类,或者自己注入自己
不在同一个线程中,如@Async导致失效。
手动抛出Exception,又没有指定回滚异常为Exception;spring只会在RunException和error回滚事务。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class UserService {
public void add(UserModel userModel) throws Exception {
try {
saveData(userModel);
updateData(userModel);
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new Exception(e);
}
}
}
多数据源,事务管理器不是默认名称,事务注解没有配置管理器名称
1
2
3
4
5
6
7
8
9
10
11
12// 事务管理器配置
public DataSourceTransactionManager mainTransactionManager( DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
// 使用
public int insert(){
}异常被吞了,没有手动回滚,或者再抛出异常
异常类型错误
controller
@RequestParam
问题
调接口报错400
1
public Result<UserMatrixDTO> getUserByUserAndDept(@RequestParam(value = "userName") String userName, @RequestParam(value = "deptName",required = false) String deptName) {
原因
默认required = true。 不传时报400
解决
增加
required = false
swagger knife4j
问题:接口文档请求异常
原因:响应的swagger的接口JSON是一个非法JSON。例如:后端给List集合的属性赋予了example属性
解决:List去除example属性
问题
swagger文档中响应参数显示错误
原因
@ApiModel(“”)中的值与其他值相同,swagger取了其他的@ApiModel注解得类
例子
有两个 @ApiModel(“测试”) 标注的类,swagger文档只会取其中一个
解决
改变其中一个 @ApiModel 中的值。
Junit
问题
junit启动报错,Caught exception while allowing TestExecutionListener
Caught exception while allowing TestExecutionListener [org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@7582ff54] to prepare test instance [com.sexytea.pss.receiving.AutoCodeTest@2766ca9d]
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘com.sexytea.pss.receiving.AutoCodeTest’: Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘com.*.mapper.**Mapper原因
*Mapper.java没有注解@Mapper时,报错。BootAppcation上有@MapperScan也没用
例子
解决
Mapper.java类上添加注解@Mapper
mybatis
项目无法启动
错误信息:Process finished with exit code 1
代码环境
1
2
3@MapperScan({"com.xiaoruiit.mapper.*"})
xiaoruiit/mapper/manual 下有手动dao
xiaoruiit/mapper 下有自动生成的dao原因:@Autowired 无法注入dao,报错
排错
Throwable抓报错
1
2
3
4
5try {
SpringApplication.run(BootApplication.class, args);
}catch (Throwable e){
e.printStackTrace();
}解决:删除manual包
mapper参数绑定异常
错误信息
本地idea启动没问题。
容器中运行报错
1
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'skuName' not found.
代码
1
List<User> getReviewStockList(String userCode, String userName);
解决
1
List<User> getReviewStockList(@Param("userCode")String userCode,@Param("userName")String userName);
Lombok
问题:set、get报错,参数接不到

原因:第二个字母大写的属性,lombok生成的get,set方法不符合java bean规范
解决
修改属性,或者手动生成set、get方法
BeanUtils
问题
springboot + mybatis分页插件 pageHelper不能正确的获取到total
原因
1
BeanUtils复制List<bean>信息到List<beanVo>时丢失了PageInfo中的total信息
解决
第一种:直接查出为VO,不要转换;第二种:BeanUtils时,手写对PageInfo的total赋值。
Mysql
order by 字段值为空,分页数据重复
1
2
3order by diffMoney desc limit 0,10;
order by diffMoney limit 10,10;
diffMoney字段的值大部分为null,查出的部分分页数据会重复解决
增加id排序字段
1
order by diffMoney desc, id desc limit 10,10;
日志SLS
问题描述
Cannot resolve class or package ‘jspxcms’,即找不到包jspxcms
原因
改变了目录结构

解决
恢复目录结构

Http
问题
原因
解决
逻辑
未分页
问题:接口报错
原因:未分页多次循环调用Feign来组装数据,hystrix起作用。
实例
未分页调用薪资配置list接口,7000多条数据用Feign远程调用MdmUserService组装员工基本数据。
解决
github
无法推送
背景
配置了github ssh key 和本地key
问题
一直都成功,某次推送,idea报错:ssh: connect to host github.com port 22: Connection timed out
解决
C:\Users\LENOVO.ssh 增加文件 config
内容:
1
2
3
4
5
6Host github.com
User git
Hostname ssh.github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
Port 443参考
https://blog.csdn.net/weixin_45637036/article/details/106560217
其他问题
UAT环境不可用
- 问题描述
需验证生产问题时
- 发现鸳央登录后点击供应链内容提示无法登录。
- 发现茶颜登录后,点击供应链内容无反应。
- PDA无法登录
事件发展:
排查
PDA
- 查日志,有报错。重发服务
- 重发服务后,只有心跳日志,接口日志。想起半个月前环境迁移,可能没配置路由
- 容器配置检查路由,缺少路由,配置路由。依然无接口日志
- 抓包到报错的接口,是钉钉扫码接口报错,前端本地调试可以登录,随即发现uat环境迁移,域名改变,即钉钉回调地址发生变化。改变回调地址,重新打包。
IPAD
- 抓包,请求到固定域名 uat.baidu.com,但返回404
- 找前端改nginx中uat配置的后端地址并发版时,发现流水线配置没有改集群地址。
具体问题点
- 容器缺少服务配置
- 容器缺少路由配置
- 部分服务配置错误
- pda未切换域名
- iPad未切换域名
- 部分服务未切换数据库
- 前端流水线配置没有选新的集群地址
- 知识
- 服务(svc)配置影响内部互相调用。
- 路由ingress配置影响外部访问。入口服务必须配置,一般配置映射到80端口。其他服务不配置时,接口文档无法访问。
- 需要DNS配置
- nginx和后端服务同在阿里云集群,nginx配置了后端服务名,test-svc
- 复杂性:
- 我手里有定好排期的开发任务
- 我不知道整个链路,没人知道整个链路
- 没有人知道整个链路
- 事件已发生一段时间,相关人员忘记了东西
- 相关人员多。前端两位,其中以为是另一个组的;后端5位,各自服务未改数据库地址;运维一位,不是专职,还会做别的事;测试两位,其中一位做了部分容器配置;领导,忘了之前的配置;
- 没有prod权限对照检查,uat环境与其他配置不同