SpringBoot初始化完成后执行特定任务

前言

以下特定任务有两种实现方法:
1.ApplicationRunner 接口;
2.CommandLineRunner 接口;

下面开始正题咯!这里我们要先介绍两个接口:ApplicationRunnerCommandLineRunner 接口。

接口介绍

ApplicationRunner 接口

ApplicationRunner接口是Spring Boot框架中的一个接口,用于在Spring Boot应用程序启动后执行一些自定义逻辑。具体来说,它提供了一个run方法,该方法在应用程序启动时被调用,并且在CommandLineRunner接口的run方法之前被调用,可以用于执行某些需要在Spring上下文被完全创建之前完成的操作。

与CommandLineRunner类似,ApplicationRunner也是一个函数式接口,它可以通过Lambda表达式或方法引用来实现。

下面是一个使用ApplicationRunner的示例,它将在应用程序启动后打印一条消息:

@Component
public class MyApplicationRunner implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("MyApplicationRunner started.");
    }
}

当应用程序启动时,run方法将会被执行,并输出一条消息。
PS:MyApplicationRunner类需要被声明为一个Spring组件,这可以通过在类上添加@Component注解来实现。

ApplicationRunner 接口的ApplicationArguments参数

ApplicationArguments参数在ApplicationRunner的run方法中被传递,用于获取应用程序运行时传递的命令行参数。

ApplicationArguments提供了一种方便的方式来访问和解析命令行参数。它包含了以下几种主要的方法:

getOptionNames():返回所有的选项名称。
getOptionValues(String name):返回指定选项名称的值列表。
getNonOptionArgs():返回所有非选项参数的列表。
这些方法使您能够获取命令行中传递的选项(如–name=value)的名称和值,以及非选项参数(不带任何前缀的参数)。通过使用ApplicationArguments,您可以轻松地处理应用程序启动时传递的命令行参数,并根据需要进行必要的处理。

下面是一个示例,展示了如何使用ApplicationArguments获取和处理命令行参数:

@Component
public class MyApplicationRunner implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("Options: " + args.getOptionNames());
        System.out.println("Value of 'name' option: " + args.getOptionValues("name"));
        System.out.println("Non-option args: " + args.getNonOptionArgs());
    }
}

假设应用程序通过命令行启动,并传递了以下参数:–name=John Doe nonOption1 nonOption2,上述代码将输出以下内容:

Options: [name]
Value of 'name' option: [John Doe]
Non-option args: [nonOption1, nonOption2]

CommandLineRunner 接口

CommandLineRunner接口是Spring Boot中的一个接口,用于在Spring Boot应用程序启动时执行一些自定义逻辑。具体来说,CommandLineRunner提供了一个run方法,在应用程序启动后被调用,并且可以用于执行某些需要在Spring上下文被完全创建之前完成的操作。该接口通常用于处理命令行参数和执行一些初始化任务。

CommandLineRunner是一个函数式接口,它只定义了一个方法:

void run(String... args) throws Exception;

当应用程序启动时,Spring Boot会解析命令行传递的参数,并将它们作为字符串数组传递给run方法。您可以在该方法中执行任何您需要的逻辑,例如解析命令行参数、初始化组件或者准备一些资源等等。

以下是一个使用CommandLineRunner的示例,通过在MyCommandRunner类中实现该接口来打印应用程序启动时传递的所有命令行参数:

@Component
public class MyCommandRunner implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        System.out.println("Command line args: " + Arrays.toString(args));
    }
}

当应用程序启动时,run方法将会被执行,并输出所有传递给应用程序的命令行参数。请注意,MyCommandRunner类需要被声明为一个Spring组件,这可以通过在类上添加@Component注解来实现。

CommandLineRunner 接口的String参数

在CommandLineRunner的run方法中,参数args是一个字符串数组,用于接收命令行传递的参数。

当应用程序启动时,可以通过命令行传递一些参数给应用程序。例如,通过在命令行中输入java -jar myapp.jar --name=John --age=25,将在args参数中接收到以下值:

args[0] = "--name=John"
args[1] = "--age=25"

您可以使用args数组来获取和处理这些命令行参数。通常,命令行参数由选项和选项值组成,可以使用=符号分隔。您可以使用字符串操作方法,例如split或者正则表达式,来进一步解析这些参数的名称和值。

以下是一个示例,展示了如何使用args参数获取和处理命令行参数:

@Component
public class MyCommandRunner implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        for (String arg : args) {
            if (arg.startsWith("--name=")) {
                String name = arg.substring("--name=".length());
                System.out.println("Name: " + name);
            } else if (arg.startsWith("--age=")) {
                String age = arg.substring("--age=".length());
                System.out.println("Age: " + age);
            }
        }
    }
}

在上述示例中,我们遍历了args数组中的每个参数。如果参数以–name=开头,则提取出名称部分,并打印出来。如果参数以–age=开头,则提取出年龄部分,并打印出来。

当应用程序启动时,如果传递了命令行参数–name=John --age=25,则上述代码将输出以下内容:

Name: John
Age: 25

通过解析args参数,您可以根据需要执行相应的逻辑和处理命令行参数。注意,如果需要对参数进行更复杂的解析和处理,可以使用一些开源库,如Apache Commons CLI或Picocli等。

CommandLineRunner 和 ApplicationRunner 的区别

CommandLineRunner和ApplicationRunner都是在Spring Boot应用程序启动时执行自定义逻辑的接口。两者都提供了一个run方法,在应用程序启动后被调用,并且可以用于执行某些需要在Spring上下文被完全创建之前完成的操作。

它们的主要区别在于run方法中传递的参数类型不同。对于CommandLineRunner,run方法接收一个字符串数组作为参数,该数组包含了命令行传递的参数。而对于ApplicationRunner,run方法接收一个ApplicationArguments对象作为参数,该对象包含了应用程序启动时传递的所有参数,以及一些有用的方法来处理这些参数。

另一个不同的地方在于,ApplicationRunner支持更复杂的参数类型,例如非标准的参数格式、多值参数、可选参数等等。ApplicationArguments对象中包含了一些有用的方法,如getOptionValues、getNonOptionArgs、containsOption等等,可以帮助您处理这些复杂的参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只会写BUG的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值