1.事务是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败。事务具有ACID四个特性。
2.Spring对事务的支持,确实很强大,但是从本质上来讲:事务是否生效取决数据库底层是否支持(比如MySQL的MyISAM引擎就不支持事务,Spring事务也无效),同时一个事务的多个操作需要在同一个Connection上。事务也往往是在业务逻辑层来控制。
3.spring使用中经常配置多个数据源DataSource。很显然,Spring需要通过DataSource来得到操作数据库的管道Connection。spring通过ThreadLocal把Connection封装随线程携带保证了线程安全,一个线程下面的操作拿到的Connection是同一个对象!通过生成代理类的方式,对事务注解的方法进行方法增强,即开启事务,执行方法,最后根据方法执行的情况进行提交或回滚事务,默认注解回滚的是运行时异常。