💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
当这两个一块使用时,要注意的是Transactional 和Synchronized 谁包裹谁的问题。 ## 事务包含同步锁 由于在synchronized(或者其他锁) 里面锁住的代码,先解锁后方法才会提交事务,当并发太高时,有几率出现锁不住的情况, ![](https://img.kancloud.cn/7b/b5/7bb55fcebc34f980a97bdcff99c999b0_667x642.png) @Transactional(.....) public synchronized void Test() { 或者是代码块 synchronized (lock) { ..... } } ## 同步锁包含事务 比如 controller层在调用service层方法上添加Synchronized ,这样主要问题是锁住的代码太多,可能导致很多不需要加锁的业务也加上锁了,加锁一般都是尽量大的去减小颗粒度,但是这样确实不会导致 ## 其他解决方式 改成 同步锁包含事务 这种方式,会影响性能,所以这里说一下其他方式 使用编程式事务 @Transactional 是声明式事务 在代码里手动开启和提交、回滚事务,这样可以细粒度的控制事务