在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
);
}
}主要区别和选择建议
方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 简单的单个配置项 | 简单直接 | 配置分散,不易管理 |
| 复杂的配置组 | 类型安全,集中管理 | 需要创建配置类 |
| 动态获取配置 | 灵活,可动态获取 | 类型转换需要手动处理 |
推荐使用 @configurationproperties,特别是当配置项较多或有关联时,这样代码更清晰、易于维护。
到此这篇关于springboot的controller中如何获取applicatim.yml的配置值的文章就介绍到这了,更多相关springboot controller applicatim.yml配置值内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论