相信大家也搜索过相关资料来查看相关的spring整合actuator添加项目监控,相对而言比较简单,毕竟是spring自己的东西,可以无缝对接。因快速开发本文从最简单的方法整合actuator,各位有什么好的方法欢迎推荐。
1.环境:
spring 版本4.2.1 .RELEASE
spring-boot-actuator 1.2.8.RELEASE(只要版本比spring版本低就行)
jdk1.7或1.8
必须注意的一点项目必须支持http请求,就是说需要有spring的web webmvc tx的jar,actuator会相应的引用依赖其中的方法。
2.集成
引用actuator jar
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-actuator</artifactId> <version>1.2.8.RELEASE</version> </dependency>配置:
<servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring-servlet.xml</param-value> 路径自己根据实际情况配置 </init-param> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name><url-pattern> *.do </url-pattern> 建议加上后缀 之后actuator 将自动为访问地址加上后缀,防止对其他资源访问干扰</servlet-mapping>
spring-servlet.xml 文件内容:
<mvc:annotation-driven/>自定义spring config用于整合actuator方法
import org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.HealthIndicatorAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.PublicMetricsAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration;
import org.springframework.boot.actuate.endpoint.*;
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;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.web.context.support.StandardServletEnvironment;
import java.util.Collection;
//其中有多少个自动配置就引用多少个
//具体请到jar中查看
//一定要将此类放置在spring 扫描路径下
@Configuration
@Import({EndpointAutoConfiguration.class,
PublicMetricsAutoConfiguration.class,
HealthIndicatorAutoConfiguration.class,
TraceRepositoryAutoConfiguration.class})
public class MyAppSpringConfig {
//
//=============================以下对象已经在开始自动配置,并给我们生成了直接设置返回就好===========================================
//EndpointAutoConfiguration PublicMetricsAutoConfiguration HealthIndicatorAutoConfiguration TraceRepositoryAutoConfiguration
@Bean
public EndpointHandlerMapping endpointHandlerMapping(
Collection<? extends MvcEndpoint> endpoints) {
EndpointHandlerMapping mapping = new EndpointHandlerMapping(endpoints);
//给访问路径加上前缀作为区分
mapping.setPrefix("/actuator");
return mapping;
}
@Bean
public HealthMvcEndpoint healthMvcEndpoint(HealthEndpoint delegate) {
return new HealthMvcEndpoint(delegate, false);
}
@Bean
public EndpointMvcAdapter metricsEndPoint(MetricsEndpoint delegate) {
return new EndpointMvcAdapter(delegate);
}
@Bean
public EndpointMvcAdapter infoEndPoint(InfoEndpoint delegate) {
return new EndpointMvcAdapter(delegate);
}
@Bean
public EndpointMvcAdapter traceEndPoint(TraceEndpoint delegate) {
return new EndpointMvcAdapter(delegate);
}
//==========================================================================================================================
@Bean
public EndpointMvcAdapter dumpEndpoint() {
//不需要引用什么spring中的方法 独立运行
return new EndpointMvcAdapter(new DumpEndpoint());
}
@Bean
public EndpointMvcAdapter environmentEndpoint(StandardServletEnvironment environment) {
//手动创建EnvironmentEndpoint对象并设置 StandardServletEnvironment值 由spring自动注入
//因为actuator中的StandardServletEnvironment是spring中的实体 直接注入就结合起来了 以下同理
EnvironmentEndpoint environmentEndpoint = new EnvironmentEndpoint();
environmentEndpoint.setEnvironment(environment);
return new EndpointMvcAdapter(environmentEndpoint);
}
@Bean
public EndpointMvcAdapter beansEndpoint(ApplicationContext context) {
BeansEndpoint endpoint = new BeansEndpoint();
//如果不给注入并设置context 将无法获取bean数据
endpoint.setApplicationContext(context);
return new EndpointMvcAdapter(endpoint);
}
@Bean
public EndpointMvcAdapter requestMappingEndpoint(ApplicationContext context) {
RequestMappingEndpoint requestMappingEndpoint = new RequestMappingEndpoint();
//同理如上
requestMappingEndpoint.setApplicationContext(context);
return new EndpointMvcAdapter(requestMappingEndpoint);
}
//实际开发中相的配置是不应该展示给开发人员,在这里配置的是无权限版的结合,可参考上面的配置按需增加
/*
//由于容器不是集成在spring,而使用的是独立的tomcat 虽然可以执行 但并不会shutdown tomcat
@Bean
public EndpointMvcAdapter shutdownEndpoint(ApplicationContext context) {
ShutdownEndpoint shutdownEndpoint = new ShutdownEndpoint();
//同理如上
shutdownEndpoint.setApplicationContext(context);
//默认禁用 开启才能生效
shutdownEndpoint.setEnabled(true);
return new EndpointMvcAdapter(shutdownEndpoint);
}*/
}
3.关于actuator访问
actuator请求返回的json数据,具体请求如下:
详细介绍请参考: http://blog.csdn.net/u011851478/article/details/55046918 顺便感谢博主的图片
经过以上修改访问地址变成
启动时也可发现多了几个意外的访问url:
文章比较粗糙,希望能帮到大家