不學無數——SpringBoot入門Ⅷ

SpringBoot--Actuator

1. 初識Actuator

在開發過程當中,項目被放置到生產服務器上運行時,有可能須要咱們全方位的監控應用服務的運行狀況。此時SpringBoot提供了Actuator模塊進行監控和管理html

2. 使用方法

在gradle中添加依賴java

compile("org.springframework.boot:spring-boot-starter-actuator")

而後啓動項目後會發如今啓動中發現以下的輸出信息spring

這些端點信息是暴露在外面的原生信息,例如此時訪問http://localhost:8080/health會發如今網站中輸出以下信息json

SpringBoot2.0中映射的地址是/actuator/health服務器

{
	"status": "UP",
	"diskSpace": {
		"status": "UP",
		"total": 250685575168,
		"free": 172327690240,
		"threshold": 10485760
	},
	"db": {
		"status": "UP",
		"database": "MySQL",
		"hello": 1
	}
}

3. 端點介紹

Actuator的端點可以進行監控和管理應用。SpringBoot有許多的內嵌的端點,若是還須要其餘的也能夠本身添加。例如health端點提供了基本的應用健康信息。app

每個獨立的端點均可以進行選擇暴露或者不暴露,默認狀況下有些端點是開啓的,若是不想暴露的話,那麼能夠在配置文件中進行配置endpoints + . + name,舉例以下:ide

endpoints.env.enabled=false

下面給出幾個端點的簡單介紹spring-boot

端點名 描述 是否默認暴露
autoconfig 展現出全部自動配置的報告,展現自動配置的先決條件,而且分段展現出配置成功的和配置失敗的,而且展現出緣由,其中positiveMatches 是自動化配置成功的,negativeMatches 是自動化配置不成功的 true
beans 該端點用來獲取應用上下文中建立的全部Bean true
configprops 展現出來全部@ConfigurationProperties的屬性信息 true
dump 暴露出程序運行中的線程信息 true
env 它用來獲取應用全部可用的環境屬性報告。包括:環境變量、JVM屬性、應用的配置配置、命令行中的參數 true
health 用來獲取應用的各種健康指標信息 true
info 該端點用來返回一些應用自定義的信息。默認狀況下,該端點只會返回一個空的json內容。咱們能夠在application.properties配置文件中經過info前綴來設置一些屬性 true
metrics 該端點用來返回當前應用的各種重要度量指標,好比:內存信息、線程信息、垃圾回收信息等 true
mappings 展現出全部的@RequestMapping路徑 true
trace 該端點用來返回基本的HTTP跟蹤信息。默認狀況下,跟蹤信息的存儲採用 true

3.1 自定義info端點信息

在添加了Actuator進行訪問info端點的時候,咱們會發現頁面中顯示了一個空的json信息。若是想要顯示信息的話,那麼能夠在配置文件中經過設置info.*進行賦值,例如:gradle

info.app.encoding=UTF-8
info.app.java.source=1.8
info.app.java.target=1.8

這是訪問localhost:8080/info能夠發現以下信息網站

{
	"app": {
		"java": {
			"target": "1.8",
			"source": "1.8"
		},
		"encoding": "UTF-8"
	},
	"name": "BuXueWuShu"
}

4. 自定義端點

有時候自帶的端點信息不符合咱們的需求,須要咱們自定義一些端點信息。在自定義端點信息以前咱們須要看一下Endpoint這個SpringBoot中的類。

public interface Endpoint<T> {
	//暴露在外的Id值,例如health、env
	String getId();
	
	//控制Id信息是否暴露
	boolean isEnabled();
	
	//用於權限的控制
	boolean isSensitive();
	
	//訪問Id值返回的信息
	T invoke();
}

發現暴露出來的端點都是實現了Endpoint這個類,例如trace這個端點。

@ConfigurationProperties(prefix = "endpoints.trace")
public class TraceEndpoint extends AbstractEndpoint<List<Trace>> {

	private final TraceRepository repository;

	/**
	 * Create a new {@link TraceEndpoint} instance.
	 * @param repository the trace repository
	 */
	public TraceEndpoint(TraceRepository repository) {
		super("trace");
		Assert.notNull(repository, "Repository must not be null");
		this.repository = repository;
	}

	@Override
	public List<Trace> invoke() {
		return this.repository.findAll();
	}

}

而後發如今spring.factories文件中自動配置了

org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration,\

點進去之後發如今其中已經自動將默認的端點注入進Spring容器中了

@Bean
	@ConditionalOnMissingBean -- 表示在容器中沒有此實體Bean時建立
	public TraceEndpoint traceEndpoint() {
		return new TraceEndpoint(this.traceRepository == null
				? new InMemoryTraceRepository() : this.traceRepository);
	}

所以自定義端點也是相似的原理,咱們作個簡單的以下:

public class MyEndPoint implements Endpoint {
    @Override
    public String getId() {
        return "buxuewushu";
    }

    @Override
    public boolean isEnabled() {
        return true;
    }

    @Override
    public boolean isSensitive() {
        return true;
    }

    @Override
    public Object invoke() {
        User user=new User();
        user.setName("不學無數");
        user.setAddress("HeNan");
        return user;
    }
}

將其放入spring.factories自動注入進容器中

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.FirstSpringBoot.EndPoint.MyEndPoint

而後啓動項目輸入localhost:8080/buxuewushu出現如下的信息

{
	"name": "不學無數",
	"address": "HeNan"
}

5. 參考文章

相關文章
相關標籤/搜索