wake-up-neo.com

SpringApplication.run-Hauptmethode

Ich habe in Eclipse ein Projekt mit der Spring Starter-Projektvorlage erstellt.

Es wurde automatisch eine Anwendungsklassendatei erstellt, und dieser Pfad stimmt mit dem Pfad in der POM.xml-Datei überein, sodass alles in Ordnung ist. Hier ist die Application-Klasse:

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {
        //SpringApplication.run(ReconTool.class, args);  
        ReconTool.main(args);
    }
}

Dies ist eine Befehlszeilen-App, die ich gerade baue, und um sie zum Laufen zu bringen, musste ich die SpringApplication.run-Zeile auskommentieren und die Hauptmethode meiner anderen Klasse hinzufügen, um sie auszuführen .. Ich kann es mit Maven bauen und es läuft wie eine Spring-Anwendung.

Ich muss diese Zeile jedoch lieber nicht auskommentieren und das vollständige Frühlingsgerüst verwenden. Wie kann ich das machen?

27
Alexander Mills

Sie müssen Application.run() ausführen, da diese Methode das gesamte Spring Framework startet. Der folgende Code integriert Ihre main() mit Spring Boot.

Application.Java

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

ReconTool.Java

@Component
public class ReconTool implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        main(args);
    }

    public static void main(String[] args) {
        // Recon Logic
    }
}

Warum nicht SpringApplication.run(ReconTool.class, args)

Denn auf diese Weise ist die Feder nicht vollständig konfiguriert (kein Komponentenscan usw.). Es wird nur die in run () definierte Bean erstellt (ReconTool).

Beispielprojekt: https://github.com/mariuszs/spring-run-magic

43
MariuszS

Mit:

@ComponentScan
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);  

        //do your ReconTool stuff
    }
}

wird unter allen Umständen funktionieren. Ob Sie die Anwendung von der IDE oder vom Build-Tool starten möchten.

Verwenden Sie maven einfach mvn spring-boot:run

in gradle wäre es gradle bootRun

Eine Alternative zum Hinzufügen von Code unter der run-Methode besteht in einem Spring Bean, das CommandLineRunner implementiert. Das würde so aussehen:

@Component
public class ReconTool implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
       //implement your business logic here
    }
}

Check out this guide von Spring's offiziellem Guide-Repository.

Die vollständige Spring Boot-Dokumentation finden Sie hier

11
geoand

Eine weitere Möglichkeit ist, die Anwendung zu erweitern (da meine Anwendung das übergeordnete Element erben und anpassen musste). Es ruft den übergeordneten und seinen commandlinerunner automatisch auf.

@SpringBootApplication
public class ChildApplication extends ParentApplication{
    public static void main(String[] args) {
        SpringApplication.run(ChildApplication.class, args);
    }
}
0
RamV