In practical applications, we will have the requirement to load some data or do some things when the project service starts . In order to solve such a problem, Spring Boot provides us with a method by implementing the interface CommandLineRunner .
It's very simple, only one class is needed, no other configuration is required. Create a class that implements the interface com.kfit.runner.CommandLineRunner
package com.kfit.runner;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
/**
* Service start execution
*
* @author Angel(QQ:412887952)
*/
@Component
publicclassMyStartupRunner1implementsCommandLineRunner {
@Override
publicvoid run(String... args) throws Exception {
System.out.println( ">>>>>>>>>>>>>>> Service start execution, perform operations such as loading data <<<<<<<<<<<<<<" );
}
}
After a Spring Boot application starts, it traverses instances of the CommandLineRunner interface and runs their run methods. You can also use the @Order annotation (or implement the Order interface) to specify the running order of all CommandLineRunner instances.
As follows we use the @Order annotation to define the execution order.
package com.kfit.runner;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
/**
* 服务启动执行
*
* @author Angel(QQ:412887952)
*/
@Component
@Order(value=2)
publicclassMyStartupRunner1implementsCommandLineRunner {
@Override
publicvoid run(String... args) throws Exception {
System.out.println(">>>>>>>>>>>>>>>服务启动执行,执行加载数据等操作 11111111 <<<<<<<<<<<<<");
}
}
package com.kfit.runner;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
/**
* 服务启动执行
*
* @author Angel(QQ:412887952)
*/
@Component
@Order(value=1)
publicclassMyStartupRunner2implementsCommandLineRunner {
@Override
publicvoid run(String... args) throws Exception {
System.out.println(">>>>>>>>>>>>>>>服务启动执行,执行加载数据等操作 22222222 <<<<<<<<<<<<<");
}
}
启动程序后,控制台输出结果为:
>>>>>>>>>>>>>>>服务启动执行,执行加载数据等操作 22222222 <<<<<<<<<<<<<
>>>>>>>>>>>>>>>服务启动执行,执行加载数据等操作 11111111 <<<<<<<<<<<<<
根据控制台结果可判断,@Order 注解的执行优先级是按value值从小到大顺序。
@Override
publicvoid run(String... args) throws Exception {
System.out.println(Arrays.asList(args));
System.out.println(">>>>>>>>>>>>>>>服务启动执行,执行加载数据等操作11111111<<<<<<<<<<<<<");
}
这里的args就是程序启动的时候进行设置的:
SpringApplication.run(App.class, new String[]{"hello,","林峰"});
这里为了做演示,配置为固定值了,其实直接接收main中的args即可,那么在运行的时候,进行配置即可。
题外话:
eclipse中给java应用传args参数的方法如下:
1、先写好Java代码,比如文件名为IntArrqy.java;
2、在工具栏或菜单上点run as下边有个Run Configuration;
3、在弹出窗口点选第二个标签arguments;
4、把你想输入的参数写在program argumenst就可以了,多个参数使用空格隔开。
完成后点run即可通过运行结果看到参数使用情况了。