美文网首页分布式springboot
spring boot项目启动时如何初始化你想要的资源?

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

作者: X兄 | 来源:发表于2019-04-19 17:41 被阅读44次

    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()里面的值进行有顺序的初始化资源,你学会了吗?

    相关文章

      网友评论

        本文标题:spring boot项目启动时如何初始化你想要的资源?

        本文链接:https://www.haomeiwen.com/subject/lvscgqtx.html