DispatcherServlet中缺少堆栈跟踪的随机NullPointerExceptions

时间:2017-07-04 14:19:56

标签: spring spring-boot spring-data-rest spring-restcontroller

当我的一个端点被访问时,我看到随机的NullPointerException。

我知道什么是NPE,但请耐心等待,我在这里有很多问题:

  • 问题可能发生在每10000个电话中一次
  • 如果我第二次重播相同的请求就可以了。
  • 看起来好像没有找到控制器中的代码(没有记录任何语句)
  • 而且,最烦人的......我没有堆栈跟踪来帮助我查明问题。

这是记录的内容:

[p-nio-80-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause

java.lang.NullPointerException: null

Annnnnd,就是这样,仅此而已......

控制器的代码相当简单,看起来像这样:

@RepositoryRestController
@ResponseBody
public class AnimalImportEndpoint {

    @Inject
    private animalImportService;

    @RequestMapping(value = "/animals/import", method = RequestMethod.POST)
    public AnimalImportResult import(@Valid @RequestBody Animal animal) {
        return animalImportService.import(animal);
    }

    @ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "Illegal arguments")
    @ExceptionHandler(IllegalArgumentException.class)
    public void illegalArguments() {
    }
}

该类使用@RepositoryRestController而不是@RestController进行注释,因为Spring Data Rest也会公开/animals

有关如何解决此问题的任何指示或建议吗?

编辑:其他有趣的事实,我使用侦探来追踪请求。当我得到这个NullPointerException时,我可以看到我的日志中没有spanId / traceId ......

1 个答案:

答案 0 :(得分:1)

添加此JVM参数以禁用堆栈跟踪删除优化

-XX:-OmitStackTraceInFastThrow