tutorial starter springbootapplication commandlinerunner applicationrunner java eclipse spring spring-boot

java - starter - SpringApplication.run método principal



spring boot tutorial (3)

Creé un proyecto en Eclipse usando la plantilla de proyecto Spring Starter.

Creó automáticamente un archivo de clase de aplicación, y esa ruta coincide con la ruta en el archivo POM.xml, por lo que todo está bien. Aquí está la clase de aplicación:

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

Esta es una aplicación de línea de comandos que estoy creando y para poder ejecutarla, tuve que comentar la línea SpringApplication.run y simplemente agregar el método principal de mi otra clase para ejecutar. Aparte de este Jerry-rig rápido, puedo construirlo usando Maven y funciona como una aplicación Spring, más o menos.

Sin embargo, prefiero no tener que comentar esa línea y utilizar el marco completo de Spring. ¿Cómo puedo hacer esto?


Debe ejecutar Application.run() porque este método inicia todo Spring Framework. El código a continuación integra tu main() con 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 } }

¿Por qué no SpringApplication.run(ReconTool.class, args)

Porque de esta manera el resorte no está completamente configurado (sin exploración de componentes, etc.). Solo se crea el bean definido en run () (ReconTool).

Proyecto de ejemplo: https://github.com/mariuszs/spring-run-magic


Una forma más es extender la aplicación (ya que mi aplicación era heredar y personalizar el padre). Invoca al padre y su comandolinerunner automáticamente.

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


Utilizando:

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

Funcionará en todas las circunstancias. Si desea iniciar la aplicación desde el IDE o la herramienta de compilación.

Usando maven solo usa mvn spring-boot:run

Mientras que en Gradle sería gradle bootRun

Una alternativa a agregar código bajo el método de ejecución, es tener un Spring Bean que implemente CommandLineRunner . Eso se vería así:

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

Echa un vistazo a this guía del repositorio de guías oficiales de Spring.

La documentación completa de Spring Boot se puede encontrar here