使用springboot怎么控制事务 Spring的事务监控
使用springboot怎么控制事务
@EnableTransactionManagement // 启注解事务管理,等同于xml配置方式的
@SpringBootApplication
public class ProfiledemoApplication {
@Bean
public Object testBean(PlatformTransactionManager platformTransactionManager){
System.out.println(">>>>>>>>>>" platformTransactionManager.getClass().getName())
return new Object()
}
public static void main(String[] args) {
SpringApplication.run(ProfiledemoApplication.class, args)
}
}
Spring的事务监控
场景是 在程序正常运行中 通过Spring 的Quarz 来每隔几秒钟触发程序运行。 在程序运行的过程中通过Weblogic 的 Console 界面来停掉weblogic 这个时候会有异常出现,事务控制没有生效,本来设想的 A,B,C,D 为一个事务 , 现在变成了 A,B 写入数据库,而C,D 没有。 导致事务控制失败。 问题分析: 1. 首先怀疑代码问题, 在 D insert 后面强制 抛出一个异常, 事务回滚, 正常。 说明代码应该没有问题。 2. 在执行的过程中 不通过 weblogic 的Console 界面停止weblogic 而是直接通过 Kill weblogic 进程的方式(该应用部署在Unix 环境下) ,事务控制也没有问题。 这样我就不太清楚是什么原因造成的了。
Spring的事务管理有几种方式?
声明式事务:(注解,XML)
编程式事务:(代码中嵌入)
隔离级别:
1、Serializable:最严格的级别,事务串行执行,资源消耗最大;
2、REPEATABLE READ:保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损失。
3、READ COMMITTED:大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”。该级别适用于大多数系统。
4、Read Uncommitted:保证了读取过程中不会读取到非法数据。
隔离级别在于处理多事务的并发问题。我们知道并行可以提高数据库的吞吐量和效率,但是并不是所有的并发事务都可以并发运行,这需要查看数据库教材的可串行化条件判断了。
事务的隔离级别的话,和数据库硬件相关
请概括下spring是如何进行事务管理的
说白了事务不就是控制connection的commit时机与rollback的逻辑吗?
如果是service级的事务,也就是整个服务逻辑内的方法用的都是一个connection,所以能达到事务的原子性吧。 spring也是如此,只不过封装到我们看不到而已吧,没什么神奇的。
spring 是怎么管理事务的
原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。
一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。
Spring应用的几种事务处理机制
Spring提供了许多内置事务管理器实现,常用的有以下几种:
DataSourceTransactionManager(JDBC局部事务),
HibernateTransactionManager(Hibernate事务),
和JtaTransactionManager(JTA全局事务)。
Spring提供了两种事务管理方式:
编程式事务管理和声明式事务管理。
不推荐使用编程式事务管理,推荐使用声明式管理。
推荐两篇文章给你看:
http://blog.csdn.net/edward0830ly/article/details/8703123
这篇写的中规中矩,内容比较齐全。
http://www.cnblogs.com/newsouls/p/3988216.html
这篇写的通俗易懂,入门者看着比较容易。