怎么收录网站,网站开发测量像素工具,新浪舆情通app下载,柳州网站建设源码创作内容丰富的干货文章很费心力#xff0c;感谢点过此文章的读者#xff0c;点一个关注鼓励一下作者#xff0c;激励他分享更多的精彩好文#xff0c;谢谢大家#xff01; Transactional 是 Spring Framework 中常用的注解之一#xff0c;它可以被用于管理事务。通过使…创作内容丰富的干货文章很费心力感谢点过此文章的读者点一个关注鼓励一下作者激励他分享更多的精彩好文谢谢大家 Transactional 是 Spring Framework 中常用的注解之一它可以被用于管理事务。通过使用这个注 解我们可以方便地管理事务保证数据的一致性和完整性。 在 Spring 应用中当我们需要对数据库进行操作时通常需要使用事务来保证数据的一致性和完整 性。 Transactional 注解可以被用于类或方法上用于指定事务的管理方式。当它被用于类上时它表示 该类中所有的方法都将被包含在同一个事务中。当它被用于方法上时它表示该方法将被包含在一个新 的事务中。 Transactional 注解有多个属性其中最常用的是 propagation 和 isolation 。 propagation 属性用于指定事务的传播行为它决定了当前方法执行时如何处理已经存在的事务 isolation 属性用于指定事务的隔离级别它决定了当前事务与其他事务之间的隔离程度。 除了 propagation 和 isolation 属性外 Transactional 还支持其他属性如 readOnly 、 timeout 、 rollbackFor 、 noRollbackFor 等这些属性可以用于进一步细化事务的行为。 总之 Transactional 注解是 Spring 应用中常用的事务管理注解。 Configuration EnableTransactionManagement public class AppConfig { Bean public DataSource dataSource () { // 配置数据源 } Bean public JdbcTemplate jdbcTemplate () { return new JdbcTemplate ( dataSource ()); } Bean public PlatformTransactionManager transactionManager () { return new DataSourceTransactionManager ( dataSource ()); } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Tranasctional 注解的使用注意事项 Tranasctional 注解是 Spring 框架提供的声明式注解事务解决方案在使用 Transactional 注解时需 要注意以下问题 : 1. Transactional 注解只能用在 public 方法上如果用在 protected 或者 private 的方法上不会报 错但是该注解不会生效。 2. 默认情况下 Transactional 注解只能回滚 非检查型异常具体为 RuntimeException 及其子类和 Error 子类 非检查型异常指 Unchecked Exception 的是程序在编译时不会提示需要处理该异常而 是在运行时才会出现异常。在 Java 中非检查型异常指的是继承自 RuntimeException 类 的异常例如 NullPointerException 、 ArrayIndexOutOfBoundsException 等。这些异常通 常是由程序员的代码错误引起的因此应该尽可能避免它们的发生但是在代码中并不需要 显式地处理它们。 检查型异常 Checked Exception 是指在 Java 中编译器会强制要求对可能会抛出这些异 常的代码进行异常处理否则代码将无法通过编译。这些异常包括 IOException 、 SQLException 等等它们通常表示一些外部因素导致的异常情况比如文件读写错误、数 据库连接失败等等。 在编写代码时应该尽量避免抛出非检查型异常因为这些异常的发生通常意味着程序存在严 重的逻辑问题。 默认情况下 Transactional 注解只能回滚 非检查型异常为啥呢 ? 可以从 Spring 源码的 DefaultTransactionAttribute 类里找到判断方法 rollbackOn 。 3. 如果需要对检查型异常 Checked Exception 进行回滚可以使用 rollbackFor 属性来定义回滚 的异常类型使用 propagation 属性定义事务的传播行为。 下面是一个例子 上面的例子中 : 指定了回滚 Exception 类的异常为 Exception 类型或者其子类型检查型异常 Checked Exception 另外配置类事务的传播行为支持当前事务当前如果没有事务那么会创建一个事 务。 4. Transactional 注解不能回滚被 try{}catch() 捕获的异常。 5. Transactional 注解只能对在被 Spring 容器扫描到的类下的方法生效。 其实 Spring 事务的创建也是有一定的规则对于一个方法里已经存在的事务 Spring 也提供了解决方案 去进一步处理存在事务通过设置 Tranasctional 的 propagation 属性定义 Spring 事务的传播规则。 Spring 事务的传播规则 Spring 事务的传播规则是指在多个事务方法相互调用的情况下事务应该如何进行传播和管理。 Spring 事务的传播行为一共有 7 种定义在 spring-tx 模块的 Propagation 枚举类里对应的常量值定义 在 TransactionDefinition 接口里 , 值为 int 类型的 0-6 。 Override public boolean rollbackOn ( Throwable ex ) { return ( ex instanceof RuntimeException || ex instanceof Error ); } 1 2 3 4 Transactional ( rollbackFor Exception . class , propagation Propagation . REQUIRED ) 1 PROPAGATION_REQUIRED 支持当前事务如果当前没有事务则创建一个事务这 是最常见的选择。 PROPAGATION_SUPPORTS 支持当前事务如果当前没有事务就以非事务来执行 PROPAGATION_MANDATORY 支持当前事务如果没有当前事务就抛出异常。 PROPAGATION_REQUIRES_NEW 新建事务如果当前存在事务就把当前事务挂起。 PROPAGATION_NOT_SUPPORTED 以非事务执行操作如果当前存在事务则当前事务挂 起。 PROPAGATION_NEVER 以非事务方式执行如果当前存在事务则抛出异常。 PROPAGATION_NESTED 如果当前存在事务则在嵌套事务内执行。如果当前没有 事务则进行与 PROPAGATION_REQUIRED 类似的操作。 稍后一点结合源码介绍。