SpringApplication.run main method

前端 未结 3 1231
自闭症患者
自闭症患者 2020-12-24 10:52

I created a project in Eclipse using the Spring Starter project template.

It automatically created an Application class file, and that path matches the path in the P

相关标签:
3条回答
  • 2020-12-24 11:24

    You need to run Application.run() because this method starts whole Spring Framework. Code below integrates your main() with Spring Boot.

    Application.java

    @SpringBootApplication
    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
        }
    }
    

    Why not SpringApplication.run(ReconTool.class, args)

    Because this way spring is not fully configured (no component scan etc.). Only bean defined in run() is created (ReconTool).

    Example project: https://github.com/mariuszs/spring-run-magic

    0 讨论(0)
  • 2020-12-24 11:27

    Using:

    @ComponentScan
    @EnableAutoConfiguration
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);  
    
            //do your ReconTool stuff
        }
    }
    

    will work in all circumstances. Whether you want to launch the application from the IDE, or the build tool.

    Using maven just use mvn spring-boot:run

    while in gradle it would be gradle bootRun

    An alternative to adding code under the run method, is to have a Spring Bean that implements CommandLineRunner. That would look like:

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

    Check out this guide from Spring's official guide repository.

    The full Spring Boot documentation can be found here

    0 讨论(0)
  • 2020-12-24 11:46

    One more way is to extend the application (as my application was to inherit and customize the parent). It invokes the parent and its commandlinerunner automatically.

    @SpringBootApplication
    public class ChildApplication extends ParentApplication{
        public static void main(String[] args) {
            SpringApplication.run(ChildApplication.class, args);
        }
    }
    
    0 讨论(0)
提交回复
热议问题