我创建了一个MessageListener
,它将使用来自Azure服务总线的消息。使用SingleConnectionFactory
创建连接时,我尝试设置ExceptionListener
。我的ExceptionListener
和配置都在不同的类中。所以在我的Configuration类中,我试图自动装配一个实现ExceptionListener
的类。当我这样做时,我得到Autowired ExceptionListener
为null。请告知我是否可以自动加载ExceptionListener
。请在下面找到我的示例代码:
@Component
public class JMSExcepListener implements ExceptionListener{
@Autowired
private DefaultMessageListenerContainer listenerContainer;
@Autowired
private SingleConnectionFactory conFactory;
@Override
public void onException(JMSException exception) {
listenerContainer.destroy();
listenerContainer.initialize();
try {
conFactory.createConnection();
} catch (JMSException e) {
e.printStackTrace();
}
System.out.println("Exception");
}}
我在SingleConnectionFactory
@Configuration
public class AzureConfig{
@Autowired
JMSExcepListener jmsExcListener;
@Autowired
MessageConsumer messageConsumer;
@Bean
public SingleConnectionFactory jmsConnectionFactory() {
SingleConnectionFactory cachingConnectionFactory = null;
try {
cachingConnectionFactory = new SingleConnectionFactory(ConnectionFactoryImpl.createFromURL(url));
cachingConnectionFactory.setReconnectOnException(true);
cachingConnectionFactory.setClientId(applicationName);
singConnFactory.setExceptionListener(jmsExcListener);
} catch (MalformedURLException e) {
}
return cachingConnectionFactory;
}
}
@Bean
public DefaultMessageListenerContainer getContainer() {
DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
container.setConnectionFactory(jmsConnectionFactory());
container.setDestinationName(queueName);
container.setMessageListener(messageConsumer);
return container;
}
}
此处jmsExcListener
将显示为空,但消息使用者工作正常请帮助。
是否因为任何循环注入,因为我试图在AzureConfig中注入ExcepitonListener并尝试将在AzureConfig中创建的bean注入到ExceptionListener中。如何解决这个问题?
答案 0 :(得分:0)
以防您从未注意到这一点;你有一个循环的依赖链。
JMSExcepListener类需要一个SingleConnectionFactory(通过自动装配) 在AzureConfig中创建的 反过来又需要一个JMSExcepListener(通过自动装配)的bean。
解决方案始终是这样的:不要在配置类的类级别自动关联依赖项。