实如今项目启动后或是生成对象后完成某些执行的功能实现CommandLineRunner接口和注解@PostConstruct

  在项目中咱们有时候须要实现项目启动后就执行的功能,好比将热点数据存入redis中。html

方式一:定义一个类实现CommandLineRunner接口,实现功能的代码在run方法中。cnblogs中参考java

补充:SpringBoot在项目启动后会遍历全部实现CommandLineRunner的实体类并执行run方法,若是须要按照必定的顺序去执行,那么就须要在实体类上使用一个@Order注解(或者实现Order接口)来代表顺序。redis

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class RedisDataRunner implements CommandLineRunner {
    @Autowired
    private SetRedisData redisData;

    @Override
    public void run(String... strings) throws Exception {
        redisData.setOrgData();
    }
}
View Code

 

方法二:在方法中增长注解@PostConstruct,修饰一个非静态的void()方法。csdn中参考连接spring

@PostConstruct注解的方法会在依赖注入完成后被自动调用:Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)ide

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

@Component
public class RedisDataRunner {

    @Autowired
    private SetRedisData redisData;

    public static final ExecutorService pool = Executors.newFixedThreadPool(10);

    @PostConstruct
    public void init() {
        
        pool.execute(new Runnable() {
            @Override
            public void run() {
                redisData.setOrgData();
            }
        });
    }
}
View Code