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,这个请求要返回跨域配置,如果处理不了,就没办法做跨域,就会报跨域的问题,问题如下(…重启服务器日志没了,算了下次遇到再说)



