У меня есть весеннее веб-приложение, в котором есть несколько контроллеров. Моя проблема заключается в том, что при попытке перенаправить .war в tomcat (или просто перезапустить приложение) контроллеры не отображаются с первой попытки. Мне нужно повторно развернуть приложение или снова перезапустить, пока они не будут окончательно отображены ... Я понятия не имею, почему это происходит.Контроллер весны Java не отображается
Один из моих контроллеров:
@RestController
@RequestMapping("kt")
public class KTIntegrationController {
@Autowired
KtImportService importService;
@ExceptionHandler(ItemNotFoundException.class)
@ResponseStatus(value= HttpStatus.NOT_FOUND)
public RestError handleNotFoundException(ItemNotFoundException e) {
return new RestError(404, "NOT FOUND", e.getMessage());
}
@RequestMapping(value="import/to-db", method=RequestMethod.POST)
public RestResponse<List<String>> loadToDB(@RequestParam("initiator") String initiator,
@RequestParam("process") String pid,
@RequestParam("category") String institution) throws KtImportException {
return new RestResponse<List<String>>(importService.loadToDB(initiator,pid,institution));
}
}
Tomcat журнала (если контроллер не был отображен):
...
...
[12:47:40.887] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.boot[email protected]bf5b3f: startup date [Thu Aug 27 12:47:23 EEST 2015]; root of context hierarchy
[12:47:41.107] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
[12:47:41.108] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[text/html],custom=[]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest)
[12:47:41.173] INFO o.s.w.s.h.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[12:47:41.173] INFO o.s.w.s.h.SimpleUrlHandlerMapping - Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[12:47:41.291] INFO o.s.w.s.h.SimpleUrlHandlerMapping - Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[12:47:41.895] INFO o.s.j.e.a.AnnotationMBeanExporter - Registering beans for JMX exposure on startup
[12:47:41.922] INFO o.s.boot.SpringApplication - Started application in 19.463 seconds (JVM running for 547.311)
...
...
Tomcat журнала (если контроллер был преобразовываться):
...
...
[11:27:39.426] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.boot[email protected]1722a662: startup date [Thu Aug 27 11:27:28 EEST 2015]; root of context hierarchy
[11:27:39.577] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/kt/import/to-db],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public com.gerasolutions.rest.RestResponse<java.util.List<java.lang.String>> com.gera.integration.rc.rest.controller.KTIntegrationController.loadToDB(java.lang.String,java.lang.String,java.lang.String) throws com.gera.integration.rc.core.domain.KtImportException
...
...
[11:27:39.586] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
[11:27:39.586] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[text/html],custom=[]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest)
[11:27:39.634] INFO o.s.w.s.h.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[11:27:39.635] INFO o.s.w.s.h.SimpleUrlHandlerMapping - Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[11:27:39.706] INFO o.s.w.s.h.SimpleUrlHandlerMapping - Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[11:27:40.009] INFO o.s.j.e.a.AnnotationMBeanExporter - Registering beans for JMX exposure on startup
[11:27:40.022] INFO o.s.boot.SpringApplication - Started application in 12.283 seconds (JVM running for 19.89)
...
...
I не ожидайте найти ответ, как исправить это здесь, так как это довольно запутанная ошибка (ну, по крайней мере, для меня), но некоторые идеи или указатели, в которых я мог бы начать искать, были бы наиболее громкими. Структура
--EDIT--
Проект:
app
-> src
-> main
-> java
-> com.app.a
-> c
-> config
-> Config.class
-> r
-> controller
-> Controller.class
Application.class
ServletInitialiazer.class
-> resources
-> webapp (this is empty)
Application.class:
@Configuration
@ComponentScan(basePackages={"com.app.a.*"})
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
ServletInitializer.class:
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}
Config.class имеет источник данных и которые определены в нем. (Не должно затрагивать эту ошибку)
--EDIT--
Более того, если я просто загрузить это приложение .war из моего ноутбука, с помощью командной строки: mvn spring-boot:run
, все работает, контроллеры всегда отображается с первой попытки.
К сожалению, это не работает. Забыл отметить, что это приложение зависит от другого проекта с очень похожей структурой. Таким образом, componentScan выглядит следующим образом: '@ComponentScan (basePackages = {" com.app.a. * "," com.app.a.services "})' com.app.a.services находится в другом проекте (файл jar включен через maven depenceny) – CrazySabbath