gpt4 book ai didi

java - 即使一个 bean 在运行时出现错误,也确保 Spring 应用程序的其余部分运行

转载 作者:行者123 更新时间:2023-12-02 12:24:22 24 4
gpt4 key购买 nike

现在我正在开发一个包含多个组件的 Spring 应用程序,其中包括一个 RabbitMQ 组件。

RabbitMQ 连接的初始化是通过配置 bean 进行的,这些配置 bean 在应用程序启动时自动变为 Activity 状态。

下面是我的 RabbitMQ 配置文件:

@Configuration
@PropertySources({
@PropertySource("classpath:message.properties"),
@PropertySource("classpath:rabbitmq.properties")
})
@EnableRabbit
public class MessageConfiguration {

private static final String MESSAGE_HOST_PROPERTY = "message.host";

private static final String FACTORY_USERNAME_PROPERTY = "rabbitmq.username";
private static final String FACTORY_PASSWORD_PROPERTY = "rabbitmq.password";


private Environment environment;



@Autowired
public MessageConfiguration(Environment environment) {
this.environment = environment;
}


@Bean
public AmqpTemplate publishTemplate() {
RabbitTemplate result = new RabbitTemplate(connectionFactory());
return result;
}


@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(environment.getProperty(MESSAGE_HOST_PROPERTY));
connectionFactory.setUsername(environment.getProperty(FACTORY_USERNAME_PROPERTY));
connectionFactory.setPassword(environment.getProperty(FACTORY_PASSWORD_PROPERTY));
return connectionFactory;
}
}

在 Bean connectionFactory 中,如果我提供错误的用户名和密码,我的应用程序将遇到身份验证错误:

Caused by: org.springframework.context.ApplicationContextException: Failed to start bean 'org.springframework.amqp.rabbit.config.internalRabbitListenerEndpointRegistry'; nested exception is org.springframework.amqp.AmqpIllegalStateException: Fatal exception on listener startup
Caused by: org.springframework.amqp.AmqpIllegalStateException: Fatal exception on listener startup
Caused by: org.springframework.amqp.rabbit.listener.exception.FatalListenerStartupException: Authentication failure
Caused by: org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.

同时,与 RabbitMQ 无关的应用程序的其余部分将无法运行。

有没有办法将 RabbitMQ bean 错误仅包含在其自身而不是所有其他组件中,以便应用程序的其余部分可以运行?

最佳答案

身份验证错误被认为是致命的。

对于暂时性错误(例如代理未运行),应用程序将启动并尝试重新连接。

FatalListenerStartupException

您不会显示监听器配置,但您可以通过 autoStartup 属性将监听器容器配置为不自动启动。如果为 false,则上下文将始终加载正常。

然后,您可以尝试在代码中start() 容器并捕获异常。

关于java - 即使一个 bean 在运行时出现错误,也确保 Spring 应用程序的其余部分运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45550153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com