spring boot learning: command line startup

Keywords: Java Spring snapshot jvm

When using spring boot to build application startup, we start the application through the command line in our work. Sometimes we need some specific parameters to do some initialization operations when the application starts.

spring boot provides two interfaces for users: CommandLineRunner and ApplicationRunner.

1. CommandLineRunner

1.1 statement:

@FunctionalInterface
public interface CommandLineRunner {

    /**
     * Callback used to run the bean.
     * @param args incoming main method arguments
     * @throws Exception on error
     */
    void run(String... args) throws Exception;

}

1.2 use:

package com.example.consoleapplication;

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class TestRunner implements CommandLineRunner {

    @Override
    public void run(String... args) {
        // Do something...
        for(String arg: args){
            System.out.println(arg);
        }
        System.out.print("test command runner");
    }
}

1.3 operation results

Run: java -jar build/libs/consoleapplication-0.0.1-SNAPSHOT.jar -sdfsaf sdfas,
The results are as follows:

2019-03-16 17:31:56.544  INFO 18679 --- [           main] c.e.consoleapplication.DemoApplication   : No active profile set, falling back to default profiles: default
2019-03-16 17:31:57.195  INFO 18679 --- [           main] c.e.consoleapplication.DemoApplication   : Started DemoApplication in 16.172 seconds (JVM running for 16.65)
-sdfsaf
sdfas
test command runner%

2. ApplicationRunner

2.1 statement


/**
 * Interface used to indicate that a bean should <em>run</em> when it is contained within
 * a {@link SpringApplication}. Multiple {@link ApplicationRunner} beans can be defined
 * within the same application context and can be ordered using the {@link Ordered}
 * interface or {@link Order @Order} annotation.
 *
 * @author Phillip Webb
 * @since 1.3.0
 * @see CommandLineRunner
 */
@FunctionalInterface
public interface ApplicationRunner {

    /**
     * Callback used to run the bean.
     * @param args incoming application arguments
     * @throws Exception on error
     */
    void run(ApplicationArguments args) throws Exception;

}

2.2 use

ApplicationRunner and CommandLineRunner There are differences in the use of:

  • CommandLineRunner The parameters are only divided according to the space.
  • ApplicationRunner According to whether it matches --key=value To parse the parameters,

    • Match, then optional Parameters, availablegetOptionValuesGets the parameter value.
    • No match is non optional Parameters.
package com.example.consoleapplication;

import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import org.springframework.boot.ApplicationArguments;

@Component
public class TestApplicationRunner implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        // Do something...
        System.out.println("option arg names" + args.getOptionNames());
        System.out.println("non option+" +  args.getNonOptionArgs());
    }
}

2.3 operation results

Run the command java -jar build/libs/consoleapplication-0.0.1-SNAPSHOT.jar -non1 non2 --option=1, and the result is:

2019-03-16 18:08:08.528  INFO 19778 --- [           main] c.e.consoleapplication.DemoApplication   : No active profile set, falling back to default profiles: default
2019-03-16 18:08:09.166  INFO 19778 --- [           main] c.e.consoleapplication.DemoApplication   : Started DemoApplication in 16.059 seconds (JVM running for 16.56)
test
option arg names[option]
non option+[-non1, non2]-non1
non2
--option=1
test%

As you can see, the optional parameter name has option, and the non optional parameters have - non1 and non2

3. summary

Both CommandLineRunner and ApplicationRunner can achieve special logic by obtaining the values we need according to the parameters when the command-line application is started. However, they are different. It is recommended to use the optional parameter of ApplicationRunner to facilitate extension.

4. Reference documents

https://docs.spring.io/spring...

Posted by rivasivan on Wed, 04 Dec 2019 15:59:04 -0800