在使用Spring Boot Actuator时,发现其它端点都是可以访问的,唯独httptrace 不可以访问。
初步判断是Spring Boot的版本问题,在版本为“2.0.6.RELEASE”时是可以正常访问的,在“2.4.3版本中无法访问”
解决办法:
在不更改版本的情况下,需要实现HttpTraceRepository
Configuration类
import org.springframework.boot.actuate.autoconfigure.trace.http.HttpTraceAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.trace.http.HttpTraceProperties;
import org.springframework.boot.actuate.trace.http.HttpTrace;
import org.springframework.boot.actuate.trace.http.HttpTraceRepository;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
@Configuration
@ConditionalOnWebApplication
@ConditionalOnProperty(prefix = "management.trace.http", name = "enabled", matchIfMissing = true)
@EnableConfigurationProperties(HttpTraceProperties.class)
@AutoConfigureBefore(HttpTraceAutoConfiguration.class)
class TraceConfig {
private List<HttpTrace> list = new CopyOnWriteArrayList<HttpTrace>();
@Bean
@ConditionalOnMissingBean(HttpTraceRepository.class)
public HttpTraceRepository traceRepository() {
return new HttpTraceRepository() {
@Override
public List<HttpTrace> findAll() {
return list;
}
@Override
public void add(HttpTrace trace) {
if (list.size() > 99){
list.remove(0);
}
list.add(trace);
}
};
}
}
这里新增了一个配置,在HttpTraceAutoConfiguration之前,自定义了traceRepository,通过实现HttpTraceRepository接口手动返回近一百条记录