前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBootRunner简单实践

SpringBootRunner简单实践

原创
作者头像
技术路漫漫
修改2020-06-22 10:42:22
4610
修改2020-06-22 10:42:22
举报
文章被收录于专栏:技术路漫漫

本文演示了SpringBoot基于CommandLineRunner及ApplicationRunner的启动参数读取模式

CommandLineRunner

CommandLineRunner与ApplicationRunner的区别只是run方法的参数差异,这两个runner都主要用户类似开机启动的场景,也就是在服务启动完成,所有bean初始化完毕后,回调runner接口的run方法,完成资源初始化等操作,例如redis中缓存初始化等。

下面是个cmdrunner示例:

代码语言:txt
复制
@Component
@Order(1)
@Slf4j
public class CmdRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        log.info("在全部bean初始化完成后调用");
        log.info("可通过CommandLineRunner实现类来进行资源初始化等操作");
        //打印 program args
        for (String arg : args) {
            log.info(arg);
        }
        // 打印vm options
        log.info(System.getProperty("vmarg"));
    }
}

ApplicationRunner

applicationrunner可以更结构化的读取参数,而不需要自行基于string值进行解析:

代码语言:txt
复制
@Component
@Order(2)
@Slf4j
public class AppRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        log.info("基于Order第二优先级启动");
        log.info("与CommandLineRunner区别是获取参数的方式不一样,也就是run方法的参数不一样");
        //获取并打印option args,例如 --parg=p1
        args.getOptionNames().forEach(name -> {
            log.info("{}:{}", name, args.getOptionValues(name));
        });
        log.info("NonOptionArgs:{}", args.getNonOptionArgs());
    }
}

同时,有多个runner时,可通过@Order注解来制定启动顺序。

启动参数运行验证

如果功能idea,可以在 edit configurations中,分别配置vm optinos 和 program arguments,具体如下:

代码语言:txt
复制
vm options:-Dvmarg=v1
program arguments:--parg=p1 --parg=p2 p3

同样,也可以在命令行执行并传递启动参数,具体如下:

代码语言:txt
复制
java -jar hiboot-1.0-SNAPSHOT.jar -Dvmarg=v1 --parg=p1 --parg=p2 p3

运行后,控制台输入内容如下

代码语言:txt
复制
Started RunnerApplication in 1.432 seconds (JVM running for 2.097)
在全部bean初始化完成后调用
可通过CommandLineRunner实现类来进行资源初始化等操作
--parg=p1
--parg=p2
p3
v1
基于Order第二优先级启动
与CommandLineRunner区别是获取参数的方式不一样,也就是run方法的参数不一样
parg:[p1, p2]
NonOptionArgs:[p3]
SourceArgs:--parg=p1

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CommandLineRunner
  • ApplicationRunner
  • 启动参数运行验证
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档