必须有一些方法来使用执行器的端点,但我无法将它们连接起来。
我有一个类似下面的JavaConfig类
@Configuration
@ComponentScan(basePackages = { "com.company.helper", "org.springframework.boot" })
@EnableWebMvc
@Import({ DbConfig.class })
public class AppConfig extends WebMvcConfigurerAdapter {
}
但是此配置在部署期间会抛出错误。
这种接线可以在没有Spring Boot应用程序的情况下完成吗?
答案 0 :(得分:8)
我已在此博客文章中添加了有关如何在非启动应用程序中添加spring boot执行器的信息
http://givenwhenthen.blogspot.com/2015/09/adding-spring-boot-actuator-to-non.html
在应用程序的build.gradle中,我添加了以下依赖项
compile('org.springframework.boot:spring-boot-actuator:1.2.5.RELEASE'){
exclude group: 'org.springframework.boot', module:'spring-boot-starter-logging'}
在应用程序的Spring Config类中,我添加了以下内容:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration;
import org.springframework.boot.actuate.endpoint.BeansEndpoint;
import org.springframework.boot.actuate.endpoint.HealthEndpoint;
import org.springframework.boot.actuate.endpoint.InfoEndpoint;
import org.springframework.boot.actuate.endpoint.RequestMappingEndpoint;
import org.springframework.boot.actuate.endpoint.mvc.EndpointHandlerMapping;
import org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter;
import org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint;
import org.springframework.boot.actuate.endpoint.mvc.MvcEndpoint;
@Configuration
@Import(EndpointAutoConfiguration.class)
public class MyAppSpringConfig {
@Bean
@Autowired
//Define the HandlerMapping similar to RequestHandlerMapping to expose the endpoint
public EndpointHandlerMapping endpointHandlerMapping(
Collection<? extends MvcEndpoint> endpoints
){
return new EndpointHandlerMapping(endpoints);
}
@Bean
@Autowired
//define the HealthPoint endpoint
public HealthMvcEndpoint healthMvcEndpoint(HealthEndpoint delegate){
return new HealthMvcEndpoint(delegate, false);
}
@Bean
@Autowired
//define the Info endpoint
public EndpointMvcAdapter infoMvcEndPoint(InfoEndpoint delegate){
return new EndpointMvcAdapter(delegate);
}
@Bean
@Autowired
//define the beans endpoint
public EndpointMvcAdapter beansEndPoint(BeansEndpoint delegate){
return new EndpointMvcAdapter(delegate);
}
@Bean
@Autowired
//define the mappings endpoint
public EndpointMvcAdapter requestMappingEndPoint(
RequestMappingEndpoint delegate
){
return new EndpointMvcAdapter(delegate);
}
}
如果你想摆脱一个额外的依赖,那么请参阅博客文章。
<强>更新强>
此外,您需要确保为RequestMappingHandlerAdapter定义了一个bean,如果您没有它,ServletDispatcher将无法为您的HealthMvcEndpoint的处理程序获取适配器。
如果你没有,只需将它添加到你的bean配置文件
xml配置:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jsonConverter"/>
</list>
</property>
</bean>
<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes" value="application/json" />
<property name="prettyPrint" value="true" />
</bean>
答案 1 :(得分:2)
我正在开发的项目使用Spring,但是Spring-boot和Spring-MVC都没有。以下解决方案可能不像启动执行器那样自动化,但它以非常简洁的方式暴露端点。
基本上,所有执行器端点都只是bean,因此您可以在端点中创建新组件并自动装配,但您认为合适。
我的pom中唯一的附加依赖项是spring-boot-actuator和spring-webmvc:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
<version>1.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
然后您需要做的就是创建一个单独的组件类(如果需要,可以注册它)。确保使用@EnableAutoConfiguration注释:
@Component
@EnableAutoConfiguration
@Path("/actuator/")
public class ActuatorResource {
private ObjectMapper mapper = new ObjectMapper();
@Autowired
private DumpEndpoint dumpEndpoint;
@GET
@Produces("application/json")
@Path("/dump")
@Transactional(readOnly = true)
public String getDump() throws JsonProcessingException {
return mapper.writeValueAsString(dumpEndpoint.invoke());
}
@Autowired
private EnvironmentEndpoint envEndpoint;
@GET
@Produces("application/json")
@Path("/environment")
@Transactional(readOnly = true)
public String getEnvironment() throws JsonProcessingException {
return mapper.writeValueAsString(envEndpoint.invoke());
}
}
答案 2 :(得分:1)
在我们的项目中,我们使用了一个对我们有用的小黑客。为了启用执行器,我们在POM中使用了spring-boot中的依赖项。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
<version>1.2.3.RELEASE</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.3.2.Final</version>
</dependency>
并且使用了另外的配置类,如下所示:
@EnableConfigurationProperties
@Configuration
@EnableAutoConfiguration
@Import(EndpointAutoConfiguration.class)
public class SpringBootActuatorConfig {
}