一上来就给我干蒙了
Java8新特性
Java 8 (又称为 jdk 1.8)
Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。
方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。
新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。
Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。
Date Time API − 加强对日期与时间的处理。
Optional 类 − Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。
Nashorn, JavaScript 引擎 − Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用。
事务的注解?
@Transactional
参考文章:文章有误https://www.cnblogs.com/xiaohan666/p/9272581.html
事务的管理方式有2种:
编程式事务管理:需要将数据库的自动提交等取消,并且需要自己编写事务代码
声明式事务管理模式:spring利用spring AOP特性编写了注解的方式来管理事务,避免开发人员编写大量的事务代码
什么时候不回滚?
Spring会对unchecked异常进行事务回滚;如果是checked异常则不回滚。
辣么什么是checked异常,什么是unchecked异常?
派生于Error或者RuntimeException(比如空指针,1/0)的异常称为unchecked异常
其他继承自java.lang.Exception得异常统称为Checked Exception,如IOException、SqlException等
再通俗一点:你写代码出现的空指针等异常,会被回滚,文件读写,网络出问题,spring就没法回滚了。
如果我想check异常也想回滚怎么办,注解上面写明异常类型即可。
@Transactional(rollbackFor={Exception.class.RuntimeException.class})
类似的还有norollbackFor,自定义不回滚的异常。
看图:https://www.processon.com/view/54e04d67e4b0c4be3d43cb2b?fromnew=1#map
特性:
- 在service类标签上添加@Transactional(即实现类,一般不建议在接口上),可以将整个类纳入spring事务管理,在每个业务方法执行时都会开启一个事务,不过这些事务采用相同的管理方式。并且当在某个service实现类中某个方法调用了另一个这个实现类中的方法,则两个方法都必须声明事务,才能被当成一个事务进行管理
- @Transactional 注解只能应用到 public 可见度的方法上。 如果应用在protected、private或者 package可见度的方法上,也不会报错,不过事务设置不会起作用。
- 默认情况下,spring会对unchecked异常进行事务回滚;如果是checked异常则不回滚。
- 只读事务: @Transactional(readOnly=true)
启动事务会增加线程开销,数据库因共享读取而锁定(具体跟数据库类型和事务隔离级别有关)。通常情况下,仅是读取数据时,不必设置只读事务而增加额外的系统开销。
解决Transactional注解不回滚
检查你方法是不是public的。
你的异常类型是不是unchecked异常。SQL异常是unchecked异常 如果我想check异常也想回滚怎么办,注解上面写明异常类型即可。
@Transactional(rollbackFor={Exception.class.SQLException.class})
类似的还有norollbackFor,自定义不回滚的异常。
另外 如果已经在service中进行了try catch 操作 由于已经被抓获异常 故事务也不会回滚
- 数据库引擎要支持事务,如果是mysql,注意表要使用支持事务的引擎,比如innodb,如果是myisam,事务是不起作用的。
- 是否开启了对注解的解析
<tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="true"/>
- spring是否扫描到你这个包,如下是扫描到org.test下面的包
<context:component-scan base-package="org.test"
</context:component-scan>