推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

Java 多线程通过 Mybatis 获取 Oracle 序列值重复问题处理

   2023-08-06 网络整理佚名1820
核心提示:序列值重复问题处理在同一个事务内开多线程访问序列值时,会取出同一个值。解决方法是将查询语句放在一个新事务中,同时增加同步约束。另外如果在本类中调用时直接调用时事务不会生效,需要通过接口变更去调用。详细说明见参考资料2。参考资料:[1].(12.[2].

Java多线程通过获取序列值处理重复问题

当多个线程在同一事务内访问序列值时,将检索到相同的值。

select mySequence.nextval from dual

解决方案是将查询放在新事务中并添加同步约束。

    @Transactional(value = 'mytran', propagation = Propagation.REQUIRES_NEW, rollbackFor = {
            Exception.class })
    @Override
    public synchronized Long getNextVal() {
        return mapper.getNextVal();
    }

另外,如果在该类中直接调用事务不会生效,则需要通过接口变更的方式来调用。 详细信息请参见参考文献 2。

// 事务无效
getNextVal();

// 事务有效
myService.getNextVal();

参考:

[1]。 12c 1(12.1) //SQL/ .

[2]。 @之所以在默认事务机制下无效,

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON