当前位置: 代码网 > it编程>编程语言>Java > springboot的controller中如何获取applicatim.yml的配置值

springboot的controller中如何获取applicatim.yml的配置值

2025年12月03日 Java 我要评论
在spring boot的controller中获取application.yml配置值,主要有以下几种方式:1. 使用@value注解(最常用)application.yml 配置app: nam

在spring boot的controller中获取application.yml配置值,主要有以下几种方式:

1. 使用@value注解(最常用)

application.yml 配置

app:
  name: "我的应用"
  version: "1.0.0"
  max-users: 100
  enabled: true
  timeout: 30000

controller 中使用

@restcontroller
@requestmapping("/api")
public class configcontroller {
    @value("${app.name}")
    private string appname;
    @value("${app.version}")
    private string appversion;
    @value("${app.max-users}")
    private int maxusers;
    @value("${app.enabled}")
    private boolean enabled;
    @value("${app.timeout}")
    private long timeout;
    @getmapping("/config")
    public map<string, object> getconfig() {
        map<string, object> config = new hashmap<>();
        config.put("name", appname);
        config.put("version", appversion);
        config.put("maxusers", maxusers);
        config.put("enabled", enabled);
        config.put("timeout", timeout);
        return config;
    }
}

2. 使用@configurationproperties(推荐用于复杂配置)

创建配置类

@configuration
@configurationproperties(prefix = "app")
@data
public class appconfig {
    private string name;
    private string version;
    private int maxusers;
    private boolean enabled;
    private long timeout;
    private list<string> whitelist;
    private map<string, string> endpoints;
}

在controller中注入使用

@restcontroller
@requestmapping("/api")
public class configcontroller {
    @autowired
    private appconfig appconfig;
    @getmapping("/config")
    public appconfig getconfig() {
        return appconfig;
    }
    @getmapping("/info")
    public string getappinfo() {
        return appconfig.getname() + " v" + appconfig.getversion();
    }
}

3. 使用environment接口

@restcontroller
@requestmapping("/api")
public class configcontroller {
    @autowired
    private environment environment;
    @getmapping("/env-config")
    public map<string, object> getenvconfig() {
        map<string, object> config = new hashmap<>();
        config.put("name", environment.getproperty("app.name"));
        config.put("version", environment.getproperty("app.version"));
        config.put("maxusers", environment.getproperty("app.max-users", integer.class));
        config.put("timeout", environment.getproperty("app.timeout", long.class, 5000l));
        return config;
    }
}

4. 复杂配置示例

application.yml

app:
  name: "用户管理系统"
  version: "2.1.0"
  database:
    url: "jdbc:mysql://localhost:3306/mydb"
    username: "admin"
    pool-size: 20
  security:
    jwt-secret: "my-secret-key"
    token-expire: 3600
    cors-origins:
      - "http://localhost:3000"
      - "https://example.com"
  features:
    enable-cache: true
    enable-notification: false

对应的配置类

@configuration
@configurationproperties(prefix = "app")
@data
public class appconfig {
    private string name;
    private string version;
    private databaseconfig database;
    private securityconfig security;
    private featuresconfig features;
    @data
    public static class databaseconfig {
        private string url;
        private string username;
        private int poolsize;
    }
    @data
    public static class securityconfig {
        private string jwtsecret;
        private int tokenexpire;
        private list<string> corsorigins;
    }
    @data
    public static class featuresconfig {
        private boolean enablecache;
        private boolean enablenotification;
    }
}

controller中使用

@restcontroller
@requestmapping("/api")
public class systemcontroller {
    @autowired
    private appconfig appconfig;
    @getmapping("/system-info")
    public map<string, object> getsysteminfo() {
        return map.of(
            "appname", appconfig.getname(),
            "databaseurl", appconfig.getdatabase().geturl(),
            "corsorigins", appconfig.getsecurity().getcorsorigins(),
            "enablecache", appconfig.getfeatures().isenablecache()
        );
    }
}

5. 带默认值的配置

@restcontroller
@requestmapping("/api")
public class configcontroller {
    // 使用默认值
    @value("${app.unknown-property:default-value}")
    private string unknownproperty;
    @value("${app.retry-count:3}")
    private int retrycount;
    @getmapping("/default-values")
    public map<string, object> getwithdefaults() {
        return map.of(
            "unknownproperty", unknownproperty,
            "retrycount", retrycount
        );
    }
}

主要区别和选择建议

方式

适用场景

优点

缺点

@value

简单的单个配置项

简单直接

配置分散,不易管理

@configurationproperties

复杂的配置组

类型安全,集中管理

需要创建配置类

environment

动态获取配置

灵活,可动态获取

类型转换需要手动处理

推荐使用 @configurationproperties,特别是当配置项较多或有关联时,这样代码更清晰、易于维护。

到此这篇关于springboot的controller中如何获取applicatim.yml的配置值的文章就介绍到这了,更多相关springboot controller applicatim.yml配置值内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com