码迷,mamicode.com
首页 > 移动开发 > 详细

hutool的定时器如何读取application文件

时间:2020-07-22 23:37:14      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:配置   res   依赖注入   项目   err   cond   注入   conf   gap   

结果:创建一个新类来实现ApplicationRunner接口,在这里进行第一次的启动时启动定时器,如此就能使用@Value等注解,将application文件中的内容使用Spring的方式读取到。

 

过程:我需要一个定时器,然后正好项目依赖了hutool,就百度了下如何使用hutool的定时器,之前知道hutool有这个东西,但是没用过。

hutool的定时器使用挺简单的,然后鉴于项目第一次启动的时候就要执行一次定时器,然后我就直接在Spring boot的启动类中,写了个代码:

public static void main(String[] args) {
        SpringApplication.run(App.class, args);
        CronUtil.setMatchSecond(true);
        CronUtil.start();
        new StockPriceTask().stockPrice(); // 手动调用定时器的方法
    }

嗯~ o(* ̄▽ ̄*)o,很简单哦,然后就被这么一个new给坑死了,今天项目要部署,然后这里直接就凉了。

对方要求使用外部配置文件的方法,也就是说我必须得把定时器中用到的一系列值全部放入application文件,然后就出现问题了,我直接new的定时器,导致不是被Spring管理的,没有用到依赖注入。实际上,不管是不是new出来的类实例,把这个定时器的初启动写在这个main方法中就已经凉凉了。因为main方法是一个静态的,你@Autowired进来的对象只能是非静态的,然后main方法不能使用。

后面被这个难到了,没有找对方向,然后正好hutool提供了一个Setting的类,这个玩意还挺强的,之前我用的流读取properties文件,然后项目通过jenkins部署到对方的测试环境的时候发现路径不对,找不到resource下的文件了,然后对方给了个jenkins的权限,钩子也在gitlab上部署好了,我自己就能随便上传代码随便部署,然后就发现hutool的Setting能解决流在本地可以正确读取文件但是部署后路径错误的问题,就直接用的Setting了,悲剧就从这里开始,因为配置挺多的,后面改来改去花了半天时间,从下午3点一直搞到9点半。

最后项目要上线,对方要求外部文件配置的方式,嗯~ o(* ̄▽ ̄*)o,然后就彻底凉了,因为这代表不能写死文件的读取路径了,也就是Setting这种方式就完全不能用。

后面大哥和对方交流过后,知道对方用的是

spring.config.location

这种方式来在项目启动时配置外部文件,然后就找方法解决。

哎,自己太菜了。后面大哥和我交流了一下项目(因为项目技术挺简单的,一直将近一个月了都是我在负责,另外一位大哥负责技术点的攻克),然后就给我整了个类实现ApplicationRunner接口,重写run方法,在该类中注入定时器,然后在run方法中开始调用定时器。代码就变成了这样:

public static void main(String[] args) {
// SpringBoot的启动类
        SpringApplication.run(App.class, args);
    }

然后实现ApplicationRunner的类

@Slf4j
@Component
@RequiredArgsConstructor
public class StartStockPrice implements ApplicationRunner {

    private final StockPriceTask stockPriceTask;

    @Override
    public void run(ApplicationArguments args) {
        CronUtil.setMatchSecond(true);
        CronUtil.start();
        try {
            stockPriceTask.taskStockPrice();
        }catch (Exception e){
            log.error(e.getMessage());
        }
    }
}

如此一来,这个定时器StockPriceTask类就被注入了,因此该类就加上一个@Service注解就可以开始用SpringBoot自带的@Value或者其他一些读取application文件的注解来注入配置属性。

 

其实,这个ApplicationRunner启动类都是比较基础的东西,但是无奈自己太菜了啊。今天菜的把自己笑死。

今天收获还是有一点的,下面再记录一下怎么SpringBoot读取外部配置启动。

hutool的定时器如何读取application文件

标签:配置   res   依赖注入   项目   err   cond   注入   conf   gap   

原文地址:https://www.cnblogs.com/woyujiezhen/p/13363750.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!