Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无弹簧护套的弹簧护套执行器_Java_Spring_Spring Mvc_Spring Boot - Fatal编程技术网

Java 无弹簧护套的弹簧护套执行器

Java 无弹簧护套的弹簧护套执行器,java,spring,spring-mvc,spring-boot,Java,Spring,Spring Mvc,Spring Boot,我一直在开发Spring/SpringMVC应用程序,我希望添加性能指标。我遇到了弹簧启动执行器,它看起来像一个伟大的解决方案。但是,我的应用程序不是Spring引导应用程序。我的应用程序运行在传统的容器Tomcat8中 我添加了以下依赖项 // Spring Actuator compile "org.springframework.boot:spring-boot-starter-actuator:1.2.3.RELEASE" 我创建了以下配置类 @EnableConfigurationP

我一直在开发Spring/SpringMVC应用程序,我希望添加性能指标。我遇到了弹簧启动执行器,它看起来像一个伟大的解决方案。但是,我的应用程序不是Spring引导应用程序。我的应用程序运行在传统的容器Tomcat8中

我添加了以下依赖项

// 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 {

}

我甚至在每个配置类上添加了
@EnableConfigurationProperties
,正如StackOverflow上的另一篇文章所建议的那样。然而,这并没有起到任何作用。端点仍然没有被创建,返回404。

如果您想使用插入其中的组件,您需要将应用程序转换为Spring Boot。在下面有一个名为Convert a existing application to Spring Boot的部分,您需要查看该部分。我自己并没有这样做,但我使用Spring Boot,它的配置相对简单,所以希望您可以从这里获得它。

首先让我们澄清一下,如果不使用Spring Boot,您就不能使用Spring Boot执行器

我错了,没有弹簧靴就不能穿。见@stefaan neyts 回答一个如何做的例子

我创建了一个示例项目来展示如何使用最少的Spring引导自动配置来转换基本的SpringMVC应用程序

原始资料来源:

转换源:

我本可以完全删除dispatcher-servlet.xml和web.xml文件,但我保留它们是为了展示如何尽可能少地执行更改,并简化转换更复杂的项目

下面是我转换的步骤列表

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

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

  • 从spring上下文xml中删除了默认上下文侦听器

    这很重要! 由于SpringBoot将提供一个异常,如果不提供,您将得到一个“errorlistenerstart”异常

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

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

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


    • 虽然答案已经被接受,但我想更新我的经验。我不想使用
      @SpringBootApplication
      将我的应用程序转换为spring引导。请参阅我提到的最低要求代码

      尽管在没有Spring Boot的情况下使用Spring Boot功能不是一个好主意,但这是可能的

      例如,此Java配置使Spring Boot执行器指标在不使用Spring Boot的情况下可用:

      import java.util.Collection;
      
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration;
      import org.springframework.boot.actuate.autoconfigure.PublicMetricsAutoConfiguration;
      import org.springframework.boot.actuate.endpoint.MetricsEndpoint;
      import org.springframework.boot.actuate.endpoint.mvc.EndpointHandlerMapping;
      import org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter;
      import org.springframework.boot.actuate.endpoint.mvc.MvcEndpoint;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      import org.springframework.context.annotation.Import;
      
      @Configuration
      @Import({ EndpointAutoConfiguration.class, PublicMetricsAutoConfiguration.class })
      public class SpringBootActuatorConfig {
      
          @Bean
          @Autowired
          public EndpointHandlerMapping endpointHandlerMapping(Collection<? extends MvcEndpoint> endpoints) {
              return new EndpointHandlerMapping(endpoints);
          }
      
          @Bean
          @Autowired
          public EndpointMvcAdapter metricsEndPoint(MetricsEndpoint delegate) {
              return new EndpointMvcAdapter(delegate);
          }
      }
      
      import java.util.Collection;
      导入org.springframework.beans.factory.annotation.Autowired;
      导入org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration;
      导入org.springframework.boot.actuate.autoconfigure.PublicMetricsAutoConfiguration;
      导入org.springframework.boot.actuate.endpoint.MetricsEndpoint;
      导入org.springframework.boot.actuate.endpoint.mvc.EndpointHandlerMapping;
      导入org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter;
      导入org.springframework.boot.actuate.endpoint.mvc.MvcEndpoint;
      导入org.springframework.context.annotation.Bean;
      导入org.springframework.context.annotation.Configuration;
      导入org.springframework.context.annotation.import;
      @配置
      @导入({EndpointAutoConfiguration.class,PublicMetricsAutoConfiguration.class})
      公共类SpringBootActuatorConfig{
      @豆子
      @自动连线
      
      公共端点HandlerMapping端点HandlerMapping(集合您可以在不使用spring引导的情况下使用执行器。 将其添加到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>
      
      
      org.springframework.boot
      


      < p>您没有在代码中引入@ prgBoog注释,但当您添加@ Spring BooGOT时,编译器将自动考虑为引导程序,并为它和您的执行器依赖文件

      < P>添加所需的依赖文件,因为我们已经有了Spring Bug Stor 2。x,将执行器包含到E中的配方。现有的Spring MVC项目可以如下所示:

      @Configuration
      @Import({
              EndpointAutoConfiguration.class,
              HealthIndicatorAutoConfiguration.class,
      
              InfoEndpointAutoConfiguration.class,
              HealthEndpointAutoConfiguration.class,
      
              WebEndpointAutoConfiguration.class,
              ServletManagementContextAutoConfiguration.class,
              ManagementContextAutoConfiguration.class,
      })
      @EnableConfigurationProperties(CorsEndpointProperties.class)
      class ActuatorConfiguration {
      
          @Bean //taken from WebMvcEndpointManagementContextConfiguration.class
          public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(WebEndpointsSupplier webEndpointsSupplier,
                                                                               ServletEndpointsSupplier servletEndpointsSupplier, ControllerEndpointsSupplier controllerEndpointsSupplier,
                                                                               EndpointMediaTypes endpointMediaTypes, CorsEndpointProperties corsProperties,
                                                                               WebEndpointProperties webEndpointProperties) {
              List<ExposableEndpoint<?>> allEndpoints = new ArrayList<>();
              Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
              allEndpoints.addAll(webEndpoints);
              allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());
              allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
              EndpointMapping endpointMapping = new EndpointMapping(webEndpointProperties.getBasePath());
              return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes,
                      corsProperties.toCorsConfiguration(),
                      new EndpointLinksResolver(allEndpoints, webEndpointProperties.getBasePath()));
          }
      
          @Bean
          DispatcherServletPath dispatcherServletPath() {
              return () -> "/";
          }
      
      }
      
      @配置
      @进口({
      EndpointAutoConfiguration.class,
      HealthIndicatorAutoConfiguration.class,
      InfoEndpointAutoConfiguration.class,
      HealthEndpointAutoConfiguration.class,
      WebEndpointAutoConfiguration.class,
      ServletManagementContextAutoConfiguration.class,
      ManagementContextAutoConfiguration.class,
      })
      @EnableConfigurationProperties(CorsEndpointProperties.class)
      类促动器配置{
      @Bean//取自WebMvcEndpointManagementContextConfiguration.class
      公共WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(WebEndpointsApplication WebEndpointsApplication,
      ServletEndpoints应用程序ServletEndpoints应用程序,ControllerEndpoints应用程序ControllerEndpoints应用程序,
      EndpointMediaTypes EndpointMediaTypes,CorsEndpointProperties corsProperties,
      WebEndpointProperties(WebEndpointProperties){
      
      列表您可能已经知道了这一点,但是您也可以将spring boot用于打包为war的应用程序;boot不要求您使用嵌入式tomcatI,我实际上对spring boot不太熟悉
      @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);
          }
      }
      
      @Configuration
      @Import({
              EndpointAutoConfiguration.class,
              HealthIndicatorAutoConfiguration.class,
      
              InfoEndpointAutoConfiguration.class,
              HealthEndpointAutoConfiguration.class,
      
              WebEndpointAutoConfiguration.class,
              ServletManagementContextAutoConfiguration.class,
              ManagementContextAutoConfiguration.class,
      })
      @EnableConfigurationProperties(CorsEndpointProperties.class)
      class ActuatorConfiguration {
      
          @Bean //taken from WebMvcEndpointManagementContextConfiguration.class
          public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(WebEndpointsSupplier webEndpointsSupplier,
                                                                               ServletEndpointsSupplier servletEndpointsSupplier, ControllerEndpointsSupplier controllerEndpointsSupplier,
                                                                               EndpointMediaTypes endpointMediaTypes, CorsEndpointProperties corsProperties,
                                                                               WebEndpointProperties webEndpointProperties) {
              List<ExposableEndpoint<?>> allEndpoints = new ArrayList<>();
              Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
              allEndpoints.addAll(webEndpoints);
              allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());
              allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
              EndpointMapping endpointMapping = new EndpointMapping(webEndpointProperties.getBasePath());
              return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes,
                      corsProperties.toCorsConfiguration(),
                      new EndpointLinksResolver(allEndpoints, webEndpointProperties.getBasePath()));
          }
      
          @Bean
          DispatcherServletPath dispatcherServletPath() {
              return () -> "/";
          }
      
      }
      
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-actuator-autoconfigure</artifactId>
              <version>2.1.18.RELEASE</version>
          </dependency>