V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
guyeuro
V2EX  ›  问与答

spring @Transactional 注解和 redis/kafka 的消息发布

  •  
  •   guyeuro · 2017-08-15 17:45:40 +08:00 · 1841 次点击
    这是一个创建于 2661 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我看一个 web 项目里

    用 @Transactional ( readOnly = true )注解了一个类 类的方法是进行 redis/kafka 的消息发布

    这个类里面就一个方法,方法的主要代码段如下:

    for (String jsonStr : strArray) {
    			redisTemplate.convertAndSend("topic_id", jsonStr );
    			KafkaProducerUtil.sendMessage("topic_id", jsonStr );
    		}
    

    我的疑惑是

    1 这个 readOnly = true 对 redis/kafka 消息的发布有何作用?

    2 这个方法里面没有抛异常的,只是 sendMessage ()的定义(定义在另一个类中)里有抛异常,但是异常在那里捕捉了,这样这个方法就没有抛异常的可能,那么加 @Transactional 注解有何用?

    4 条回复    2017-08-15 18:46:25 +08:00
    ixiaohei
        1
    ixiaohei  
       2017-08-15 18:22:10 +08:00
    关系数据的事务去注解无关数据库操作毫无意义。
    ixiaohei
        2
    ixiaohei  
       2017-08-15 18:23:24 +08:00
    另外这个方法不是别的类调用,@Transactional 不会开启数据库事务。
    guyeuro
        3
    guyeuro  
    OP
       2017-08-15 18:32:01 +08:00
    @ixiaohei 这个类和关系型数据库无关,只涉及 redis 和 kafka
    你意思这里用 @Transactional 注解没有意义?
    我也疑惑,还以为 @Transactional 注解对没有关系型数据库的方法也起作用呢
    ixiaohei
        4
    ixiaohei  
       2017-08-15 18:46:25 +08:00
    @guyeuro 因为里面的事务就是关系型数据库提供的,你没有看到 spring 要让配置事务管理器么。另外去了解下关系型数据的事务 ACID 就知道为什么别的操作无用。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6028 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 06:20 · PVG 14:20 · LAX 22:20 · JFK 01:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.