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


    结果:创建一个新类来实现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读取外部配置启动。

  • 相关阅读:
    第七届蓝桥杯javaB组真题解析-煤球数目(第一题)
    考生须知
    2016年12月1日
    蓝桥网试题 java 基础练习 矩形面积交
    蓝桥网试题 java 基础练习 矩阵乘法
    蓝桥网试题 java 基础练习 分解质因数
    蓝桥网试题 java 基础练习 字符串对比
    个人银行账户管理程序
    new和delete的三种形式详解
    C++的六个函数
  • 原文地址:https://www.cnblogs.com/woyujiezhen/p/13363750.html
Copyright © 2020-2023  润新知