ApplicatioinRunner vs CommandLineRunner

程序在启动完成的时候可能需要去处理某些业务,Spring Boot程序中可以通过去实现CommandLineRunner和ApplicationRunner接口还完成该操作。

1.CommandLineRunner

1.1简单使用

启动类直接实现CommandLineRunner接口,在重写run方法,在run方法为执行完成前,不可以对外提供服务【spring 容器并未完成初始化】。

一些简单记录无业务影响的操作应该使用异步操作。

/**
 * Application类
 */
@SpringBootApplication
public class DemoApplication implements CommandLineRunner {

	@Resource
	private DemoService deomService;

	public static void main(String[] args) {
        System.out.println("容器开始创建");
        SpringApplication.run(DemoApplication .class, args);
        System.out.println("容器创建完成");
	}

	@Override
	public void run(String... args) throws Exception {
		System.out.println("容器创建完成?,先执行下列操作:");
	    // TODO
        deomService.sayHello();    
	}

}

1.2多个业务顺序执行

@Component
@Order(1)
public class UserRunner implements CommandLineRunner {

    public void run(String... args) throws Exception {
        System.out.println("UserRunner run");

        Thread.sleep(1000);
    }

}


@Component
@Order(2)
public class OrderRunner implements CommandLineRunner {
    
    public void run(String... args) throws Exception {
        System.out.println("OrderRunner run");

        Thread.sleep(1000);
    }

}

2.ApplicationRunner

2.1简单使用

启动类直接实现ApplicationRunner

/**
 * Application类
 */
@SpringBootApplication
public class DemoApplication implements ApplicationRunner {

	@Resource
	private DemoService deomService;

	public static void main(String[] args) {
        System.out.println("容器开始创建");
        SpringApplication.run(DemoApplication .class, args);
        System.out.println("容器创建完成");
	}

	@Override
	 public void run(ApplicationArguments args) throws Exception {
		System.out.println("容器创建完成?,先执行下列操作:");
	    // TODO
        deomService.sayHello();    
	}

}

2.2多个业务顺序执行

@Component
@Order(1)
public class UserRunner implements ApplicationRunner {

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

        Thread.sleep(1000);
    }


}

@Component
@Order(2)
public class OrderRunner implements ApplicationRunner {

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

        Thread.sleep(1000);
    }

}

3.区别

主要不同就是ApplicatioinRunner的run()方法的参数ApplicationArguments可以很方便地获取到命令行参数的值。

浅见 如果出入希望大家留言

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值