使Spring Boot配置具有容错性



我有一个Spring Boot应用程序,它依赖于各种服务,如Key斗篷、Elastic Stack和PostgreSQL。该应用程序将与许多其他应用程序一起部署到Kubernetes集群中。是否可以使我的应用程序容忍可能不可用的服务?想象一下,如果PostgreSQL在启动时没有启动。我可以强制应用程序在降级状态下启动,通知用户,记录错误,并通知任何调用应用程序服务降级吗?如果它可以每隔一段时间重试自动配置这样的bean,那也会很有用。

你不是在问@Retryable和@Recover吗?还有@Lazy,但前两个可能正是你想要的。这是假设您的bean没有内置重试。即Kafkabean会自动重试。如果你说的是rest api,我可能会使用Eureka、Circuit Breaker等。

这不会完全回答您的问题。但是对于数据库来说,可以在数据库不可用的情况下启动spring-boot。如果你使用Hikari,那么你可以配置连接池,这样它就不会在启动时尝试连接到数据库。

@Bean
public DataSource xxxDataSource() {
HikariConfig config = new HikariConfig();
config.setDriverClassName("org.postgresql.Driver");
config.setUsername("user");
config.setPassword("password");
config.setJdbcUrl("jdbc-url");
config.setMaximumPoolSize(5);
config.setInitializationFailTimeout(-1);  // <-- This line here is what you need
return new HikariDataSource(config);
}

您不需要重新创建bean。每次您尝试使用数据源时,Hikari都会尝试创建一个连接。如果数据库仍处于关闭状态,则将引发异常。如果它恢复了,那么你就成功了。

您的问题含糊不清,范围太广。如果您使用的是Spring Data,这是不可能的,因为Spring Data会在启动时尝试连接到DB,如果不能,则会失败。您可以自己连接,但以后必须考虑断开连接、重试、客户端体验等问题。

如果你想深入分析,请参阅我的博客文章;它是为Couchbase数据库编写的,但处理的用例与您的相同。https://blog.asarkar.com/technical/couchbase-kubernetes/

最新更新