问题
springcloud项目整合sleuth后启动报错
org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name ‘org.springframework.cloud.sleuth.sampler.SamplerAutoConfiguration$RefreshScopedSamplerConfiguration’: Singleton bean creation not allowed while singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!)
原因是造成了死锁,具体分析过程见“导入 spring-cloud-starter-zipkin 之后系统启动卡住”、
“引入 spring-cloud-starter-zipkin 组件之后,启动项目卡住(死锁)”
解决方式
- 在配置文件application.properties加上spring.sleuth.redis.enabled=false
- 启动类排除TraceRedisAutoConfiguration.class
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class,TraceRedisAutoConfiguration.class}) - 自己声明配置一个zipkin的采样器,而不是使用 spring boot 自动配置的 代码如下:
@Configuration
public class SleuthSamplerConfiguration {
@Bean
public Sampler defaultSampler() throws Exception {
// 这个值是采样率,设置为1就是100%采样,每一条请求都采,0.1就是10%采样率
Float f = new Float(0.1f);
SamplerProperties samplerProperties = new SamplerProperties();
samplerProperties.setProbability(f);
ProbabilityBasedSampler sampler = new ProbabilityBasedSampler(samplerProperties);
return sampler;
}
}