【发布时间】:2017-12-14 11:11:03
【问题描述】:
我有打电话给假客户的情况。它工作正常,直到我尝试将 feign 客户端放入线程中(简化版):
@Autowired
UsuarioFeign feignUserClient;
....
final Runnable t = new Runnable() {
@Override
public void run() {
try {
feignUserClient.findByEmail("someEmail@address.com");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
new Thread(t).start();
当我尝试这样做时,我得到(由真实版本打印,而不是上面的简化版本):
java.lang.NullPointerException
at br.alfa.tutoria.AlfaTutoriaApplication$1.apply(AlfaTutoriaApplication.java:46)
at feign.SynchronousMethodHandler.targetRequest(SynchronousMethodHandler.java:158)
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:88)
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76)
at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103)
at com.sun.proxy.$Proxy246.findByEmail(Unknown Source)
at br.alfa.tutoria.service.impl.TutoriaServiceImpl.atribuiFuncaoTutor(TutoriaServiceImpl.java:285)
at br.alfa.tutoria.service.impl.TutoriaServiceImpl$2.run(TutoriaServiceImpl.java:270)
at java.lang.Thread.run(Unknown Source)
feignUserClient 是 @Autowired(我尝试将其变为 final,并使用构造函数注入它,但没有任何区别 - 无论如何,代码执行时它的值不为 null)。
更多信息:
Feign 接口:
@FeignClient(name = "authUsers", url = br.alfa.tutoria.config.Url.AUTH_SERVER)
public interface UsuarioFeign {
@RequestMapping(value = "/user-search-by-email", method = RequestMethod.POST)
public User findByEmail(String email);
}
另一个类,调用feign接口……没关系。我在几个不同的类中尝试过(所有类都用@RestController 或@Service 注释)。如果我从线程中调用UsuarioFeign.findByEmail,它就会停止工作。
【问题讨论】:
-
你能添加整个
AlfaTutoriaApplication类吗? -
刚刚做了,@ryan。我正在努力追查问题。我用简单的线程构建了两个简单的 feign 应用程序。有效。如此简单的线程不是问题。我还在努力。现在我要更新 Spring boot,接下来,寻找嵌套线程。
-
我从主题@ryan 中删除了
AlfaTutoriaApplication类。事实上,它给了我一个关于真正问题的重要线索(但感谢您提出这个问题 - 复制和粘贴的简单行为让我注意到了安全部分)。
标签: spring-security spring-cloud java-threads netflix-feign