2017-03-13 2 views
0

Ich starte einen Spring Boot Rest Service, der je nach Distribution verschiedene Pakete laden kann. Dies bedeutet manchmal, dass die Distribution einige Gläser enthält, in denen bestimmte REST-Controller sind, manchmal sind diese Controller nicht da.Wie man den Import/Laden des Restcontrollers programmatisch erzwingt

So wie ich Spring-Boot sagen kann, wo die Controller mit einer Konfigurationsdatei zu finden. Jetzt sende ich diese Information durch Anmerkungen, die mich zwingen, eine "Hauptleitung" pro Verteilung zu erstellen. Ich möchte einen eindeutigen main definieren, der die in einer Datei definierten Controller importiert. Mit anderen Worten möchte ich manuell die @Import Annotation zuzugreifen, als unten im sniped dargestellt:

@Configuration 
@PropertySource("conf.cfg") 
@Import(value = {RestContorller1.class, RestContorller2.class}) 
@EnableAutoConfiguration 
@ConfigurationProperties 
@SpringBootApplication 
@RestController 
@EnableSwagger2 
public class Application { 

    public static void main(String[] args) { 

     String confFile = Const.DEFAULT_CONFIGURATION_FILE; 

     if(args.length>0) 
      confFile= args[0]; 
     System.setProperty("spring.config.name",confFile); 
     Boolean hasStarted = DataProcessingCore.start(confFile); 
     if(hasStarted) { 
      SpringApplication springApp = new SpringApplication(Application.class); 
      try { 
       springApp.setDefaultProperties(Utils.createPropertyFiles(confFile)); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      springApp.addInitializers(); 
      springApp.run(args); 


     } 

    } 
} 

Antwort

0

Wenn ich Sie corretly verstehen, Ihre Controller befinden sich in einem JAR importiert von maven/gradle zu Ihrem Hauptprojekt/s.

Um auto-configuration wie Federverschluß zu schaffen ist, dass in gleicher Weise verwendet werden können, um Ihre Controller zu importieren, wenn das Glas in dem Classpath ist, können Sie Feder sagen Sie Ihren kundenspezifischen configuration auf Start-up zu finden.

Ich schrieb ein einfaches Beispiel für diese hier: Creating your own auto-configuration

In pricipal Sie eine feder Boot-Anwendung erstellen (ohne die Feder Boot Maven Plugin !! es für den Classpath und Verpackung wichtig ist). und erstellen Sie eine Datei mit dem Namen spring.factories (Sie finden den tatsächlichen Inhalt in der Anleitung, die ich verlinkt), die jede Spring-Boot-Anwendung, die diese Jar zu laden Ihre Konfiguration, die eine @ComponentScan für Ihre Controller oder setzen Sie die @Bean manuell tun.

Dazu müssen Sie nicht @Import tun und die Controller werden dynamisch geladen.

Verwandte Themen