spring的事务是在调用业务方法之前开始的,业务方法执行完毕之后才执行commitorrollback,事务是否执行取决于是否抛出runtime异常。如果抛出runtime exception并在你的业务方法中没有catch到的话,事务会回滚。<br>在业务方法中一般不需要catch异常,如果非要catch一定要抛出throw new RuntimeException(),或者注解中指定抛异常类型@Transactional(rollbackFor=Exception.class),否则会导致事务失效,数据commit造成数据不一致,所以有些时候try catch反倒会画蛇添足。<br>6、数据库引擎不支持事务<br>这种情况出现的概率并不高,事务能否生效数据库引擎是否支持事务是关键。常用的MySQL数据库默认使用支持事务的innodb引擎。一旦数据库引擎切换成不支持事务的myisam,那事务就从根本上失效了。<br>总结<br>@Transactional 注解的看似简单易用,但如果对它的用法一知半解,还是会踩到很多坑的。<br>今天就说这么多,如果本文对您有一点帮助,希望能得到您一个点赞\ud83d\udc4d哦<br>您的认可才是我写作的动力!
"为了方便使用,可以利用python的os模块,把脚本放在前面执行。在__main__脚本前面加上export DISPLAY=:0.0<br>## mian.py import os import matplotlib.plt as plt ## linux 下,给$DISPLAY 分配一个变量,以防窗口无法弹出 if __name__ == ""__main__"": os.system('export DISPLAY=:0.0')&#9; x = [0,1]&#9; plt.plot(x)&#9; print('test matplot')<br>shell 中检查<br>echo $DISPLAY<br>如果显示为空,说明当前窗口没有获得$DISPLAY环境变量 导致无法画图。<br>解决方案:在shell中运行以下脚本给变量赋值即可。<br>export DISPLAY=:0.0<br>一般情况下不会报错,所以难以排查问题所在。<br>实际上,之前使用vscode开发python时,一直遇到matplotlib模块不画图现象。编译器并不报错,debug完全通过,就是不显示图像。然而,在shell中直接运行py脚本却可以画图。"