spring各个注解执行顺序

2021-06-07  本文已影响0人  风一样的存在

当时想在启动后初始化一个上下文,但是发现后面获取上下文赋值得到的值一直是null。debug发现代码执行顺序有问题,我加了@Oder还是没用,获取的appInfo一直为null。

@Component
@Order(value = 1)
public class UpgradeRunner implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        String path = System.getProperty("user.dir");
        String filePath = path + File.separator + "version.txt";
        //项目启动初始化应用信息
        UpgradeContext.appInfo = JSON.parseObject(FileUtil.readUtf8String(filePath), RunInfo.class);

        IOFileFilter files = FileFilterUtils.and(FileFilterUtils.fileFileFilter(),
                FileFilterUtils.nameFileFilter("version.txt"));
        FileAlterationObserver observer = new FileAlterationObserver(new File(path),files);
        observer.addListener(new FileListener());
        //创建文件变化监听器
        FileAlterationMonitor monitor = new FileAlterationMonitor(TimeUnit.MINUTES.toMillis(2), observer);
        //开始监控文件变化
        monitor.start();
    }
}
@Slf4j
@Service
public class UpgradeService {
    @Autowired
    private AppConfig config;
    @Autowired
    private OkHttpUtil okHttpUtil;

    private String credential;

    private RunInfo appInfo;

    @PostConstruct
    public void init() {
        this.credential = Credentials.basic(config.getTokenUser(), config.getTokenPass(), StandardCharsets.UTF_8);
        this.appInfo = UpgradeContext.appInfo;
    }
}

经过测试:执行顺序@PostConstruct > InitializingBean > ApplicationRunner。当然也可以使用spring监听事件初始化一些操作:

上一篇 下一篇

猜你喜欢

热点阅读