弹簧靴执行器,不带弹簧启动器转换过程

2022-08-31 13:03:27

我一直在研究Spring/Spring MVC应用程序,我希望添加性能指标。我遇到过弹簧靴执行器,它看起来像一个很好的解决方案。但是,我的应用程序不是Spring Boot应用程序。我的应用程序在传统的容器Tomcat 8中运行。

我添加了以下依赖项

// Spring Actuator
compile "org.springframework.boot:spring-boot-starter-actuator:1.2.3.RELEASE"

我创建了以下配置类。

@EnableConfigurationProperties
@Configuration
@EnableAutoConfiguration
@Profile(value = {"dev", "test"})
@Import(EndpointAutoConfiguration.class)
public class SpringActuatorConfig {

}

我甚至按照StackOverflow上另一篇文章的建议,在每个配置类上添加。然而,这并没有做任何事情。仍未创建终结点并返回 404。@EnableConfigurationProperties


答案 1

首先,让我们澄清一下,如果不使用Spring Boot,则不能使用Spring Boot Actuator。

我错了,没有Spring Boot就无法做到这一点。请参阅@stefaan-neyts答案以获取有关如何执行此操作的示例。

我创建了一个示例项目,以演示如何使用最少量的Spring Boot自动配置来转换基本的SpringMVC应用程序。

来源:http://www.mkyong.com/spring-mvc/gradle-spring-mvc-web-project-example

转换后的来源:https://github.com/Pytry/minimal-boot-actuator

我本可以完全删除调度程序 servlet.xml和 web.xml文件,但我保留了它们,以演示如何执行尽可能少的更改并简化转换更复杂的项目。

以下是我为转换而采取的步骤列表。

转换过程

  • 添加带有@SpringBootApplication注释的 Java 配置文件
  • 将应用程序配置文件作为 Bean 添加到传统的 xml 配置中(在上下文扫描后立即添加它)。
  • 将视图解析器移动到应用程序 java 配置中。

    或者,将前缀和后缀添加到 application.properties。然后,您可以在应用程序中为它们注入@Value,或者完全删除它,然后只使用提供的弹簧引导视图解析器。我和前者一起去了。

  • 已从弹簧上下文 xml 中删除默认上下文侦听器。

    这很重要!由于spring boot将提供一个,因此如果不这样做,您将收到“错误侦听器启动”异常。

  • 将弹簧引导插件添加到您的构建脚本依赖项中(我使用的是 gradle)

  • 将 mainClassName 属性添加到生成文件中,并设置为空字符串(指示不创建可执行文件)。

  • 修改弹簧启动执行器的依赖关系


答案 2

您可以使用不带弹簧套的致动器。将其添加到 pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-actuator</artifactId>
    <version>1.3.5.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>4.3.5.RELEASE</version>
</dependency>

然后在你的配置类中

@Configuration
@EnableWebMvc
@Import({
        EndpointAutoConfiguration.class , PublicMetricsAutoConfiguration.class , HealthIndicatorAutoConfiguration.class
})
public class MyActuatorConfig {

    @Bean
    @Autowired
    public EndpointHandlerMapping endpointHandlerMapping(Collection<? extends MvcEndpoint> endpoints) {
        return new EndpointHandlerMapping(endpoints);
    }

    @Bean
    @Autowired
    public EndpointMvcAdapter metricsEndPoint(MetricsEndpoint delegate) {
        return new EndpointMvcAdapter(delegate);
    }
}

然后,您可以在应用程序中查看指标

http://localhost:8085/metrics

Actutaor end point


推荐