1. Overview
In this quick tutorial, we’ll explore how to create a simple console-based application using Spring Boot.
2. Maven Dependencies
Our project relies on the spring-boot parent:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> </parent>
The initial dependency required is:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>
3. Console Application
Our console application consists of a single class: SpringBootConsoleApplication.java – this is the main class for out Spring Boot console application.
We’re using Spring’s @SpringBootApplication annotation on our main class to enable auto-configuration.
This class also implements Spring’s CommandLineRunner interface. CommandLineRunner is a simple Spring Boot interface with a run method. Spring Boot will automatically call the run method of all beans implementing this interface after the application context has been loaded.
Here is our console application:
@SpringBootApplication public class SpringBootConsoleApplication implements CommandLineRunner { private static Logger LOG = LoggerFactory .getLogger(SpringBootConsoleApplication.class); public static void main(String[] args) { LOG.info("STARTING THE APPLICATION"); SpringApplication.run(SpringBootConsoleApplication.class, args); LOG.info("APPLICATION FINISHED"); } @Override public void run(String... args) { LOG.info("EXECUTING : command line runner"); for (int i = 0; i < args.length; ++i) { LOG.info("args[{}]: {}", i, args[i]); } } }
We should also specify the spring.main.web-application-type=NONE Spring property. This property will explicitly inform Spring that this isn’t a web application.
When we execute SpringBootConsoleApplication, we can see the following logged:
00:48:51.888 [main] INFO c.b.s.SpringBootConsoleApplication - STARTING THE APPLICATION 00:48:52.752 [main] INFO c.b.s.SpringBootConsoleApplication - No active profile set, falling back to default profiles: default 00:48:52.851 [main] INFO o.s.c.a.AnnotationConfigApplicationContext - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@6497b078: startup date [Sat Jun 16 00:48:52 IST 2018]; root of context hierarchy 00:48:53.832 [main] INFO o.s.j.e.a.AnnotationMBeanExporter - Registering beans for JMX exposure on startup 00:48:53.854 [main] INFO c.b.s.SpringBootConsoleApplication - EXECUTING : command line runner 00:48:53.854 [main] INFO c.b.s.SpringBootConsoleApplication - args[0]: Hello World! 00:48:53.860 [main] INFO c.b.s.SpringBootConsoleApplication - Started SpringBootConsoleApplication in 1.633 seconds (JVM running for 2.373) 00:48:53.860 [main] INFO c.b.s.SpringBootConsoleApplication - APPLICATION FINISHED 00:48:53.868 [Thread-2] INFO o.s.c.a.AnnotationConfigApplicationContext - Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@6497b078: startup date [Sat Jun 16 00:48:52 IST 2018]; root of context hierarchy 00:48:53.870 [Thread-2] INFO o.s.j.e.a.AnnotationMBeanExporter - Unregistering JMX-exposed beans on shutdown
Notice that the run method is called after application context is loaded but before execution of the main method is complete.
Most console applications will only have a single class that implements CommandLineRunner. If your application has multiple classes that implement CommandLineRunner, the order of execution can be specified using Spring’s @Order annotation.
4. Conclusion
In this article, we’ve summarized how to create a simple console-based application using Spring Boot.
The full source code of our examples here is, as always, over on GitHub.