2015-08-27 16 views
5

Ho un'applicazione web a molla, che ha pochi controller. Il mio problema è che durante il tentativo di ridistribuire i controller da .war a tomcat (o semplicemente il riavvio dell'applicazione) non vengono mappati dal primo tentativo. Devo ridistribuire l'app o riavviarla di nuovo fino a quando non vengono mappati definitivamente ... Non ho idea del motivo per cui ciò stia accadendo.Il controller Java spring non viene mappato

Uno dei miei controllori:

@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)); 
    } 

} 

registro Tomcat (quando il controller non è stato mappato):

... 
... 
[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) 
... 
... 

registro Tomcat (quando il controller è stato mappato):

... 
... 
[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 non aspettatevi di trovare una risposta su come risolvere questo problema, dato che questo è un bug piuttosto confuso (beh, almeno per me), ma alcuni idee o indicazioni su cui poter iniziare a guardare sarebbero molto utili. Struttura

--EDIT--

Progetto:

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 ha origine dati e altri r fagioli definiti in esso. (Non dovrebbe influire questo bug)

--EDIT--

Cosa c'è di più, se ho semplicemente il boot questo .war applicazione dal mio computer portatile, utilizzando la linea di comando: mvn spring-boot:run, tutto funziona, i controllori sono sempre essere mappato dal primo tentativo.

risposta

1

soluzione al problema:

La mia applicazione web primavera sta usando alcuni progetti java (vasetti inclusi attraverso Maven) che ho scritto. Il problema era che includevano i jar, che sono usati come le tipiche librerie java, dove in realtà i progetti di avvio a molla. La rimozione di spring-boot dai progetti java, che utilizzavano l'avvio a molla, risolveva questo problema.

0

Una cosa che ho trovato a lavorare in passato con questo tipo di errori è quello di cambiare la granularità della scansione pacchetto:

esempio

@ComponentScan(basePackages={"com.app"}) 

So che è bizzarro ma ha funzionato per me in passato. Non ho idea del perché questo accada però.

+0

Sfortunatamente, questo non sembra funzionare. Ho dimenticato di dire che questa app dipende da un altro progetto con una struttura molto simile. Così ComponentScan assomiglia a questo: '@ComponentScan (basePackages = {" com.app.a. * "," com.app.a.services "})' com.app.a.services è in un altro progetto (file jar incluso attraverso maven depenceny) – CrazySabbath

Problemi correlati