2013-06-13 5 views
6

Ho un'applicazione Web in esecuzione in Tomcat e utilizzo di Spring MVC per definire controller e mapping. Ho la seguente classe:Applicazione Web MVC di primavera - abilitazione/disabilitazione del controller dalla proprietà

@Controller("api.test") 
public class TestController { 

     @RequestMapping(value = "/test", method = RequestMethod.GET) 
     public @ResponseBody String test(HttpServletRequest httpRequest, HttpServletResponse httpResponse) { 
      // body 
     } 
} 

vorrei fare questo controller e la ".../test" percorso disponibile in base a una proprietà definita da qualche parte (ad esempio file). Se la proprietà è, diciamo, false, vorrei che l'app si comportasse come se quel percorso non esistesse e, se fosse vero, si comportasse normalmente. Come posso fare questo? Grazie.

risposta

12

Se si utilizza Primavera 3.1+, rendere il controller disponibile solo nel profilo di prova:

@Profile("test") 
class TestController { 
    ... 
} 

quindi attivare tale profilo da esempio passando la seguente proprietà di sistema all'avvio di Tomcat:

-Dspring.profiles.active=test 

Per disabilitare il controller è sufficiente omettere il profilo specificato.

+0

Sì, questo funziona correttamente. Grazie. –

2

Un altro modo per farlo, potrebbe essere un modo più semplice per farlo, è utilizzare l'annotazione @ConditionalOnProperty con il RestController/Controller.

@RestController("api.test") 
    @ConditionalOnProperty(name = "testcontroller.enabled", havingValue = "true") 
public class TestController { 

     @RequestMapping(value = "/test", method = RequestMethod.GET) 
     public String test(HttpServletRequest httpRequest, HttpServletResponse httpResponse) { 
      // body 
     } 
} 

proprietà qui testcontroller.enabled nelle proprietà YML dire, se non impostato su true, il fagiolo TestController non viene mai creato.

Suggerimento: Suggerisco di utilizzare RestController anziché Controller poiché ha @ResponseBody aggiunto per impostazione predefinita. È possibile utilizzare @ConditionalOnExpression per arrivare alla stessa soluzione, ma è un po 'più lento a causa della valutazione SpEL.