spring中事务失效

在Spring中,事务可以失效的几个常见场景包括:

1. 方法没有被声明为`@Transactional`:在Spring中,只有被`@Transactional`注解标记的方法才会启用事务管理。如果一个方法没有被声明为`@Transactional`,那么其中的数据库操作将不会受到事务管理的影响,可能会导致事务失效。

2. 异常没有被正确抛出:在默认情况下,Spring的事务管理器只会在遇到未捕获的RuntimeException或Error时回滚事务。如果在事务中捕获了异常并没有重新抛出,或者捕获的异常是被检查异常(Checked Exception),那么事务可能不会回滚。

3. 事务传播行为设置不正确:Spring事务的传播行为定义了事务方法与其他事务方法的关系。如果在调用事务方法时,传播行为设置不正确,可能会导致事务失效。例如,如果一个事务方法A调用了另一个事务方法B,而B的传播行为设置为`Propagation.REQUIRES_NEW`,那么B将会在一个新的事务中执行,而不是使用A的事务。

4. 异步方法:在Spring中,异步方法默认是不受事务管理的。如果在异步方法中进行数据库操作,并且没有手动开启事务,那么事务将不会生效。

5. 类自我调用:当一个类的方法在同一个类中被调用时,Spring的事务代理机制可能会失效。这是因为Spring的事务代理是通过AOP实现的,而AOP是基于动态代理的。当一个方法在同一个类中被调用时,动态代理无法拦截到方法调用,从而导致事务失效。

这些是一些常见的导致Spring事务失效的场景,需要注意并避免在实际的开发中。为了确保事务的正确应用,建议仔细阅读Spring事务管理的文档,并正确配置和使用`@Transactional`注解。

使用DDL是无法回滚

DDL(Data Definition Language,数据定义语言)用于定义数据库对象的结构,例如表、视图、索引等。以下是一些常见的DDL命令:

  1. CREATE:用于创建数据库对象,例如创建表、视图、索引等。

    • CREATE TABLE: 创建表。
    • CREATE VIEW: 创建视图。
    • CREATE INDEX: 创建索引。
    • CREATE TRIGGER: 创建触发器。
  2. ALTER:用于修改数据库对象的结构。

    • ALTER TABLE: 修改表的结构,例如添加列、修改列类型、添加约束等。
    • ALTER VIEW: 修改视图的定义。
    • ALTER INDEX: 修改索引的定义。
    • ALTER TRIGGER: 修改触发器的定义。
  3. DROP:用于删除数据库对象。

    • DROP TABLE: 删除表。
    • DROP VIEW: 删除视图。
    • DROP INDEX: 删除索引。
    • DROP TRIGGER: 删除触发器。
  4. TRUNCATE TABLE:用于快速删除表中的所有数据,并且不能回滚。

  5. RENAME:用于重命名数据库对象。

    • RENAME TABLE: 重命名表。
    • RENAME COLUMN: 重命名列。

多线程在事务中操作

事务中前面有删除操作,后面的插入禁止使用多线程(并且后面使用了join,就会是串行,所以或报错)跑插入或更新操作,同一个事务中同一个线程可以共享事务,新开的线程就不行,因为删除操作会锁住整个表,后面其他线程无法插入或更新

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值