Spring 引导管理 - 保留应用程序和事件

Spring Boot Admin - Persist applications and events

我遇到 Spring 引导管理的问题:重新启动服务器实例后,它会丢失所有应用程序和事件。

这是架构和步骤:监控应用程序 A、B 和 C 的服务器实例。

  1. 启动服务器实例
  2. 启动应用 A、B 和 C
  3. 停止应用程序 C 和服务器实例
  4. 重启服务器实例
  5. 此时事件日志被清除,应用程序C不在应用程序列表中

我该如何处理这种情况?也许,我必须将这些信息保存在数据库中。但是,我找不到任何有用的东西。

谢谢

据我了解,您已经停止了应用程序 C 并在重新启动服务器实例(Spring 启动管理- SBA)时,您看不到应用程序 C。

但我想这是预期的行为,SBA 不注册离线应用程序。这是因为应用程序首先注册到 SBA,而不是相反。在本例应用程序中,C 处于离线状态。

但是,一旦应用程序注册到 SBA 并下线,您仍然可以在列表中看到它的状态为下线。但是 SBA 服务器重新启动将创建新的服务器实例,而不知道以前注册的应用程序。

如果我没有理解清楚,请您提供更多信息。

您可以使用 Hazelcast 使应用程序和事件持久化。查看 SBA 文档(聚类段落)。

pom.xml中添加Hazelcast依赖:

<dependency>
    <groupId>com.hazelcast</groupId>
    <artifactId>hazelcast</artifactId>
</dependency>

然后,在application.properties中:

spring.boot.admin.hazelcast.enabled=true
spring.boot.admin.hazelcast.event-store=spring-boot-admin-event-store

实例化一个 HazelcastConfig

    @Bean
public Config config() {
    MapConfig eventStoreMap = new MapConfig("spring-boot-admin-event-store")
            .setInMemoryFormat(InMemoryFormat.OBJECT)
            .setBackupCount(1)
            .setEvictionPolicy(EvictionPolicy.NONE)
            .setMergePolicyConfig(new MergePolicyConfig(PutIfAbsentMapMergePolicy.class.getName(), 100))
            .setMapStoreConfig(new MapStoreConfig().setImplementation(new HazelcastEventImplementation()));

    Config config = new Config();
    config.addMapConfig(eventStoreMap);
    config.setProperty("hazelcast.jmx", "true");

    return config;
}

最后,使用您首选的持久化方法(在我的示例配置中 HazelcastEventImplementation.java 实现 MapStore< InstanceId, ArrayList > class ).