javaeclipsespringspring-boot

SpringApplication.run main method


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 POM.xml file, so all is well. Here is the Application class:

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {

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

This is a command line app that I am building and in order to get it to run I had to comment out the SpringApplication.run line and just add the main method from my other class to run. Other than this quick jerry-rig, I can build it using Maven and it runs as a Spring application, sort of.

I'd rather, however, not have to comment out that line, and use the full Spring framework. How can I do this?


Solution

  • You need to run SpringApplication.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