栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

开发踩坑记录

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

开发踩坑记录

1.异步线程会脱离事务管控,导致查出来的数据不对

TmUserOrderDay tmUserOrderDay = new TmUserOrderDay();
 tmUserOrderDay.setStartDay(new Date());
 tmUserOrderDayMapper.insertSelective(tmUserOrderDay);
 Integer id = tmUserOrderDay.getId();
 CompletableFuture.runAsync(() -> {
     System.out.println("执行异步任务,id="+id);
     TmUserOrderDay tmUserOrderDay1 = tmUserOrderDayMapper.selectByPrimaryKey(id);
     System.out.printf("syncId is %s%n", tmUserOrderDay1.getId());
 }).exceptionally(e -> {
     e.printStackTrace();
     return null;
 });
 Thread.currentThread().sleep(2000);
 TmUserOrderDay tmUserOrderDay1 = tmUserOrderDayMapper.selectByPrimaryKey(id);
 System.out.printf("insert is %s%n", tmUserOrderDay1.getId());

插入后不能立马查到数据,因为事务没提交所以会报空指针

java.util.concurrent.CompletionException: java.lang.NullPointerException
	at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:273)
	at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:280)
	at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1629)
	at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1618)
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: java.lang.NullPointerException
	at com.fangzhou.timesmilk.portal.OrderTest.lambda$getGetData$0(OrderTest.java:74)

2.Booealn 类型参数慎用
代码生成器 tinyint 会生成 Booealn 类型,或者请求参数定义了布尔类型,如果没写默认值很容易忽略空判断

 private Boolean isCreateUser;
 // 这样写会空指针
if ( order.getIsCreateUser()) {}
// 正确写法
if (null != order.getIsCreateUser() && order.getIsCreateUser()) {}
// 或者
if (Optional.ofNullable(order.getIsCreateUser()).orElse(false))

3.线程资源不足导致跨域问题

由于说了5秒时间处理不了就直接返回,而且发送通知业务结果也不影响流程所以用了异步线程处理问题,然后直接立马返回,但是实际线上发现微信的这个通知非常非常频繁,不是只有在关注的时候才发一个通知,而是公众号的所有点击操作都会通知,所以导致线程一下子用关。用完后前端的 options 预请求被拒绝返回406,这个请求要返回跨域配置,如果处理不了,就没办法做跨域,就会报跨域的问题,问题如下(…重启服务器日志没了,算了下次遇到再说)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/820485.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号