如何更优雅地获取springbootyml中的值
前⾔
偶然看到国外论坛有⼈在吐槽同事从配置⽂件获取值的⽅式,因此查阅了相关资料发现确实有更便于管理更优雅的获取⽅式。
github demo地址:
1.什么是yml⽂件
下⾯是⼀个⾮常基本的yml⽂件:
server:
url: localhost
myapp:
name: MyApplication
threadCount: 4
...
等同于以下的application.properties⽂件:
server.url=localhost
<
demo中的yml⽂件如下:
server:
url:
app:
name: MyApplicationtornadoes in alabama
threadCount: 10
users:
- Jacob
- James
访问yml属性的⼀种⽅法是使⽤@Value("$ {property}")注释,但是随着配置树形结构以及数量的增加,代码可读性也随之降低,更不利于bean的管理。笔者发现另⼀种优雅的⽅法可以确保强类型bean的管理以及更⽅便的验证我们的程序配置。
为了实现这⼀点,我们将创建⼀个@ConfigurationProperties类ServerProperties,它映射⼀组相关的属性:
import lombok.Data;
import org.t.properties.ConfigurationProperties;
import java.util.ArrayList;
matlab中rgb是什么意思import java.util.List;
/**
* @program: simple-demo
* @description: 映射属性 (server节点)
* @author: CaoTing
* @date: 2019/6/3
**/
@Data
@ConfigurationProperties("server")
public class ServerProperties {
private String url;
private final App app = new App();
public App getApp() {
return app;
}
public static class App {
private String name;
private String threadCount;
private List<String> users = new ArrayList<>();
/
/ TODO getter and setter
}
}
请注意,我们可以创建⼀个或多个@ConfigurationProperties类。
定义我们的springboot 注册配置类ApplicationConfig:
import org.t.properties.EnableConfigurationProperties;
import t.annotation.Configuration;
/**
* @program: simple-demo
* @description: 注册所有映射属性类 { }中⽤逗号分隔即可注册多个属性类
* @author: CaoTing
网络爬虫的基本流程
* @date: 2019/6/3
**/
@Configuration
@EnableConfigurationProperties({ServerProperties.class})
public class ApplicationConfig {
}
这⾥已经提到了要在@EnableConfigurationProperties中注册的属性类列表。
3.访问yml属性
现在可以通过使⽤创建的@ConfigurationProperties bean来访问yml属性。可以像任何常规的Spring bean⼀样注⼊这些属性bean,测试类如下:
import ldemo.application.YmlValueApplication;
import fig.ServerProperties;php是最好的语言笑话
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.st.context.SpringBootTest;
import st.context.junit4.SpringJUnit4ClassRunner;
/**
* @program: simple-demo
* @description: 单元测试类
* @author: CaoTing
* @date: 2019/6/3
**/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = YmlValueApplication.class)
public class AppYmlValueTest {
@Autowired
private ServerProperties config;
@Test
public void printConfigs() {
System.out.Url());
System.out.App().getName());
System.out.App().getThreadCount());
System.out.App().getUsers());
}
}
测试结果如下:
4.总结
欢迎移步github上⼿测试哦,地址在⽂⾸。有帮助的话点个赞吧,笔芯。转载需附上原⽂链接。
5.补充
因为有⼩伙伴不太清楚具体⽤途。笔者补充⼀下两者的优缺点吧。
Spring Boot通过ConfigurationProperties注解从配置⽂件中获取属性。从上⾯的例⼦可以看出ConfigurationProperties注解可以通过设置prefix指定需要批量导⼊的数据。⽀持获取字⾯值,集合,Map,对象等复杂数据。ConfigurationProperties注解还有其他特点呢?它和Spring的Value注解⼜有什么区别呢?
⼀)ConfigurationProperties和@Value优缺点
ConfigurationProperties注解的优缺点
⼀、可以从配置⽂件中批量注⼊属性;
⼆、⽀持获取复杂的数据类型;
三、对属性名匹配的要求较低,⽐如user-name,user_name,userName,USER_NAME都可以取值;
四、⽀持JAVA的JSR303数据校验;
五、缺点是不⽀持SpEL表达式;
六、确保强类型bean的管理,更⽅便的验证程序配置;
Value注解的优缺点正好相反,它只能⼀个个配置注⼊值;不⽀持数组、集合等复杂的数据类型;不⽀持数据校验;对属性名匹配有严格的要求。最⼤的特点是⽀持SpEL表达式,使其拥有更丰富的功能。
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,
谢谢⼤家对的⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论