Spring boot,Jax-RS + Open Tracer
在我的 gradle 部门中:
plugins {
id 'java'
id 'org.springframework.boot' version '2.2.2.RELEASE'
id "io.spring.dependency-management" version "1.0.8.RELEASE"
}
implementation("org.springframework.boot:spring-boot-starter-jersey") ...
implementation("io.opentracing.contrib:opentracing-jaxrs2-discovery:1.0.0") // <---
当我尝试注入(inject)示踪剂时,问题就开始了:
@Path("/my)
@Produces(MediaType.APPLICATION_JSON)
public class MyResource { ...
@Inject
Tracer tracer;
我尝试了几种方法来添加 Trance:
https://github.com/opentracing-contrib/java-jaxrs
我最后尝试的是:(我也尝试过@WebListener)
@Provider
public class TracingInitializer implements DynamicFeature {
private final ServerTracingDynamicFeature serverTracingDynamicFeature =
new ServerTracingDynamicFeature.Builder(GlobalTracer.get())
.withOperationNameProvider(ClassNameOperationName.newBuilder())
.build();
@Override
public void configure(ResourceInfo resourceInfo, FeatureContext context) {
serverTracingDynamicFeature.configure(resourceInfo, context);
}
}
然后将其注入(inject):
@Named
public final class JerseyConfig extends ResourceConfig { ...
@Inject
public JerseyConfig() {
register(TracingInitializer.class);
开始时我最终遇到了这个异常:
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=Tracer,parent=MyResource,qualifiers={},position=-1,optional=false,self=false,unqualified=null,124873055)
在添加开放跟踪部门之前,hk2' @Inject 工作正常。
问:知道如何让它发挥作用吗?能够注入(inject)示踪剂。
最佳答案
好的。我所做的是:
- 将我所有的重命名 spring @Service 注释替换为 @Named 注释。
- 添加了 GlobalTracerBinder 类:
--
public class GlobalTracerBinder extends AbstractBinder {
@Override
protected void configure() {
bind(GlobalTracer.get()).to(Tracer.class);
}
}
- 在
class JerseyConfig extends ResourceConfig {
中注册它
像这样:
register(new GlobalTracerBinder());
然后我可以看到跟踪器对象被注入(inject)了。 (不确定该 Tracer 是否是我需要的,我看到它返回“”作为跟踪 ID。但我想这是另一个问题。)
请免费提供更好的解决方案。
<小时/>可以说,我会说:如果不受限制:使用 spring/controller 或不使用 spring + jax-rs。
关于java - 使用 Jax-RS 和 Open Tracer 的 Spring Boot 出现 UnsatisfiedDependencyException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59831190/