分布式springboot

spring boot项目启动时如何初始化你想要的资源?

2019-04-19  本文已影响44人  X兄

spring boot项目启动时如何初始化你想要的资源?

我们在实际的开发当中,不同的项目会有不同的需求,有时候我们在启动项目的时候需要做一些初始化的操作,那么你知道怎么更加便捷的去初始化这些资源呢?

首先,我们在spring boot的启动类上,加上两句话,使项目在启动的时候控制台会输出信息,我们看看项目的启动顺序是什么?

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        System.out.println("start");
        SpringApplication.run(DemoApplication.class, args);
        System.out.println("Has already started;");
    }
}

然后我们创建一个类RunnerLoading实现CommandLineRunner接口:

@Component
public class RunnerLoading implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("When will I start to implement it?");
    }
}

现在开始启动项目,看看会出现什么结果呢?

image.png
根据控制台的打印信息我们可以看出 CommandLineRunner 中的方法会在 Spring Boot 容器加载之后,在项目启动完成之前执行

如果我们在启动容器的时候需要初始化很多资源,并且初始化资源相互之间有序,那如何保证不同的 CommandLineRunner 的执行顺序呢?那就是使用 @Order 注解。
我们再创建两个类进行测试:

@Component
@Order(1)
public class Runner1 implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("我应该是初始化资源第一名");
    }
}
@Component
@Order(2)
public class Runner2 implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("我应该是初始化资源第二名");
    }
}

启动项目,看看执行结果:

image.png
通过控制台的输出我们发现,添加 @Order 注解的实现类要先执行,并且@Order()里面的值越小启动越早,可以修改@Order()里面的值进行有顺序的初始化资源,你学会了吗?
上一篇下一篇

猜你喜欢

热点阅读