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   疯狂的妞妞  阅读(2433)  评论(0编辑  收藏  举报

(评论功能已被禁用)
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示