guyeuro
V2EX  ›  问与答

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

  •  
  •   guyeuro · Aug 15, 2017 · 2232 views
    This topic created in 3256 days ago, the information mentioned may be changed or developed.

    我看一个 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 replies    2017-08-15 18:46:25 +08:00
    ixiaohei
        1
    ixiaohei  
       Aug 15, 2017
    关系数据的事务去注解无关数据库操作毫无意义。
    ixiaohei
        2
    ixiaohei  
       Aug 15, 2017
    另外这个方法不是别的类调用,@Transactional 不会开启数据库事务。
    guyeuro
        3
    guyeuro  
    OP
       Aug 15, 2017
    @ixiaohei 这个类和关系型数据库无关,只涉及 redis 和 kafka
    你意思这里用 @Transactional 注解没有意义?
    我也疑惑,还以为 @Transactional 注解对没有关系型数据库的方法也起作用呢
    ixiaohei
        4
    ixiaohei  
       Aug 15, 2017
    @guyeuro 因为里面的事务就是关系型数据库提供的,你没有看到 spring 要让配置事务管理器么。另外去了解下关系型数据的事务 ACID 就知道为什么别的操作无用。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   937 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 186ms · UTC 21:51 · PVG 05:51 · LAX 14:51 · JFK 17:51
    ♥ Do have faith in what you're doing.