springboot2 - 自定义yml参数配置

备选方案

如果在业务代码中无法使用下面这种方式,万般无奈下的最后的选择,就是从 Environment 对象直接获取参数。

Maven依赖

<!--使用 @ConfigurationProperties 的情况下可以阻止Idea报错,只是起到辅助作用-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>

yml配置

首先要确定需要配置哪些参数。

server:
  port: 7081
  servlet:
    context-path: /sea
# ……………………………………………………………………………………

# 以下为自定义的参数配置
boot-quartz:
  triggerAfterStart: true
  defaultJobGroup: "DEFAULT"
  defaultTriggerGroup: "DEFAULT"
  minJobTimeMs: 30000

参数配置对象实体类

声明一个对象,字段名与 yml 属性名保持一致。

下面是一份实际使用的代码样例,

需要注意的是@ConfigurationProperties 注解,prefix 值对应于 yml 文件中的一级属性名。

这是一个 @Component 类,会被扫描到 spring 容器中,在需要用到参数的地方,使用 @Resource 注解引用即可。

package cn.seaboot.admin.quartz.core;

import org.quartz.utils.Key;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * quartz 二次封装参数列表
 *
 * @author Mr.css
 * @version 2020-07-27 10:32
 */
@Component
@ConfigurationProperties(prefix = "boot-quartz")
public class QuartzProperties {
    /**
     * 默认任务分组名称
     */
    private String defaultJobGroup = Key.DEFAULT_GROUP;

    /**
     * 默认触发器分组名称
     */
    private String defaultTriggerGroup = Key.DEFAULT_GROUP;

    /**
     * 最小任务毫秒值,
     * <p>
     * 任务启动时间与当前时间非常接近的情况下,可能还没启动就已经过期了
     * 如果小于此阈值,会直接触发,
     * <p>
     * 如果是短时间的计划任务,有很多的办法可以实现,没必要使用quartz。
     */
    private int minJobTimeMs = 30000;

    /**
     * 项目启动之后,是否立即执行一次任务,
     * 计划任务中注意加入当前时间的判断,避免出现任务执行周期与预期不符的情况
     */
    private boolean triggerAfterStart;

    public String getDefaultJobGroup() {
        return defaultJobGroup;
    }

    public void setDefaultJobGroup(String defaultJobGroup) {
        this.defaultJobGroup = defaultJobGroup;
    }

    public String getDefaultTriggerGroup() {
        return defaultTriggerGroup;
    }

    public void setDefaultTriggerGroup(String defaultTriggerGroup) {
        this.defaultTriggerGroup = defaultTriggerGroup;
    }

    public int getMinJobTimeMs() {
        return minJobTimeMs;
    }

    public void setMinJobTimeMs(int minJobTimeMs) {
        this.minJobTimeMs = minJobTimeMs;
    }

    public boolean isTriggerAfterStart() {
        return triggerAfterStart;
    }

    public void setTriggerAfterStart(boolean triggerAfterStart) {
        this.triggerAfterStart = triggerAfterStart;
    }

    @Override
    public String toString() {
        return "QuartzConstant{" +
                "defaultJobGroup='" + defaultJobGroup + '\'' +
                ", defaultTriggerGroup='" + defaultTriggerGroup + '\'' +
                ", minJobTimeMs=" + minJobTimeMs +
                ", triggerAfterStart=" + triggerAfterStart +
                '}';
    }
}

posted on 2018-08-02 11:05  疯狂的妞妞  阅读(2430)  评论(0编辑  收藏  举报

导航