Spring Actuator 变化从 Spring Boot 2.4.3 升级到 2.6.2

Mik*_*her 9 java spring-boot spring-boot-actuator

我们有一个使用 Spring Boot 2.4.3 开发的 Spring Boot Web 应用程序并部署 Spring Actuator。我正在研究升级到 Spring Boot 2.6.2 并且大多数问题都已解决。我从项目和 war 文件中删除了弹簧执行器启动器,它部署并运行良好。我们正在使用 Java 11 和 Wildfly 18 运行。

如果我将弹簧执行器启动器添加回项目 pom 文件和 war 文件 pom 文件中,则会在部署过程中显示以下警告:

16:44:28,063 WARN  [org.jboss.modules.define] (Thread-115) Failed to define class io.micrometer.core.instrument.binder.jersey.server.MetricsApplicationEventListener in Module "deployment.test.war" from Service Module Loader: java.lang.NoClassDefFoundError: Failed to link io/micrometer/core/instrument/binder/jersey/server/MetricsApplicationEventListener (Module "deployment.test.war" from Service Module Loader): org/glassfish/jersey/server/monitoring/ApplicationEventListener
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1095)
    at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:424)
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:555)
    at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:339)
    at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:126)
    at org.jboss.modules.Module.loadModuleClass(Module.java:731)
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:247)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:398)
    at deployment.test.war//org.springframework.boot.autoconfigure.condition.FilteringSpringBootCondition.resolve(FilteringSpringBootCondition.java:108)
    at deployment.test.war//org.springframework.boot.autoconfigure.condition.FilteringSpringBootCondition$ClassNameFilter.isPresent(FilteringSpringBootCondition.java:140)
    at deployment.test.war//org.springframework.boot.autoconfigure.condition.FilteringSpringBootCondition$ClassNameFilter$2.matches(FilteringSpringBootCondition.java:128)
    at deployment.test.war//org.springframework.boot.autoconfigure.condition.OnClassCondition$StandardOutcomesResolver.getOutcome(OnClassCondition.java:227)
    at deployment.test.war//org.springframework.boot.autoconfigure.condition.OnClassCondition$StandardOutcomesResolver.getOutcome(OnClassCondition.java:214)
    at deployment.test.war//org.springframework.boot.autoconfigure.condition.OnClassCondition$StandardOutcomesResolver.getOutcomes(OnClassCondition.java:201)
    at deployment.test.war//org.springframework.boot.autoconfigure.condition.OnClassCondition$StandardOutcomesResolver.resolveOutcomes(OnClassCondition.java:190)
    at deployment.test.war//org.springframework.boot.autoconfigure.condition.OnClassCondition$ThreadedOutcomesResolver.lambda$new$0(OnClassCondition.java:150)
    at java.base/java.lang.Thread.run(Thread.java:834)
Run Code Online (Sandbox Code Playgroud)

我尝试将 jar 文件添加到项目中以查找缺失的类,但问题又添加到了另一个缺失的类文件中。我在 Spring Boot 版本 2.4.2 和 2.6.2 之间找不到 Spring Actuator 中任何会导致此问题的重大更改。

有谁了解 Spring Boot 中可能导致部署问题的变化吗?

小智 4

要在 Spring Boot 应用程序中禁用 JerseyServerMetricsAutoConfiguration 类,您可以使用 @SpringBootApplication 注释和排除属性。这是一个例子:

@SpringBootApplication(exclude = JerseyServerMetricsAutoConfiguration.class)
public class MyApplication {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,通过在 @SpringBootApplication 注释的排除属性中指定 JerseyServerMetricsAutoConfiguration 类,将其从应用程序配置中排除。

或者,您可以使用带有排除属性的@EnableAutoConfiguration注释来实现相同的结果:

@Configuration
@EnableAutoConfiguration(exclude = JerseyServerMetricsAutoConfiguration.class)
public class MyApplication {
    // ...
}  
Run Code Online (Sandbox Code Playgroud)