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

2017-08-15 17:45:40 +08:00
 guyeuro

我看一个 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 注解有何用?

1837 次点击
所在节点    问与答
4 条回复
ixiaohei
2017-08-15 18:22:10 +08:00
关系数据的事务去注解无关数据库操作毫无意义。
ixiaohei
2017-08-15 18:23:24 +08:00
另外这个方法不是别的类调用,@Transactional 不会开启数据库事务。
guyeuro
2017-08-15 18:32:01 +08:00
@ixiaohei 这个类和关系型数据库无关,只涉及 redis 和 kafka
你意思这里用 @Transactional 注解没有意义?
我也疑惑,还以为 @Transactional 注解对没有关系型数据库的方法也起作用呢
ixiaohei
2017-08-15 18:46:25 +08:00
@guyeuro 因为里面的事务就是关系型数据库提供的,你没有看到 spring 要让配置事务管理器么。另外去了解下关系型数据的事务 ACID 就知道为什么别的操作无用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/383171

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX