SpringBoot 中事务配置 Propagation = NOT_SUPPORTED 不起作用

在研究 Spring Boot 中配置事务是,发现一个不明白的问题,在 Service 上使用了 @Transaction 注解,并且 Propagation.NOT_SUPPORTED,结果还是将数据持久化了。

service 代码:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository UserRepository;

    @Transactional(propagation=Propagation.NOT_SUPPORTED, readOnly=true)
    @Override
    public User createUser(User user) {
        user = UserRepository.save(user);
        return user;
    }

}

Repository 代码:

public interface UserRepository extends JpaRepository<User, Long> {

}

App 启动类代码:

@Configuration
@SpringBootApplication
@EnableTransactionManagement
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

期待的结果是,createUser 不应该将User 数据持久化!

希望朋友们帮我分析一下这是什么原因引起的呢?

谢谢!

你增删改就用默认的事务就好了 直接在service类上面写@Transactional 查询方法的时候再去配置@Transactional(propagation=Propagation..SUPPORTED, readOnly=true)

你这显然是理解错了事务传播的含义。事务传播说的是2个事务方法批次调用时,事务如何执行。比如A有事务,B也有事务,那么A内部调用了B,B的事务应该怎么执行?
如果B回滚了,A是否也要回滚?而你想要的效果,根本不是事务能解决的,除非save内部报错,事务才能不保存对象

这个传播行为本来就是以非事物的方式执行。执行了就会持久话