我在阅读SpringKafkaTemplate(org.springframework.kafka.core)的源代码时遇到了以下代码:
protected final Log logger = LogFactory.getLog(this.getClass()); //NOSONAR
private final ProducerFactory<K, V> producerFactory;
private final boolean autoFlush;
private final boolean transactional;
private final ThreadLocal<Producer<K, V>> producers = new ThreadLocal<>();
private RecordMessageConverter messageConverter = new MessagingMessageConverter();
private volatile String defaultTopic;
private volatile ProducerListener<K, V> producerListener = new LoggingProducerListener<K, V>();
如您所见,像defaulttopic和producerlistener这样的变量被设置为volatile,我认为这会使它们在被更改时在内存中可见。
所以我很困惑为什么meesageconverter没有设置为相同的值。
1条答案
按热度按时间js4nwp541#
我们通常不希望配置属性(例如消息转换器)在运行时发生更改,因此不需要使其变得易变。如果您有这样的需求,那么可以对模板进行子类化,并使用
synchronized
方法(调用super.set...()
).您正在查看代码的旧版本;这些变量不再是
volatile
.