Spring Boot starts loading data CommandLineRunner (transfer)

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... argsthrows 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即可通过运行结果看到参数使用情况了。

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326946264&siteId=291194637