springboot读取配置文件的三种方式,springboot读取配置文件参数
00-1010模式一:@Value模式二: @ConfigurationProperties @ Value和@ configuration properties比较模式三:@PropertySource模式四:使用工具类获取值in。不注射的yml。
00-1010基本类型属性注入,直接在字段中添加@Value(${xxx.xxx} )即可。注意这里用的是$而不是#。@ value注入属性,一般其他属性没有关系。
配置文件
用户:姓名:玛纳霏年龄: 19岁性别:男
00-1010概况
@ RestControllerpublic class ConfigPropertiesController { @ Value( $ { user . name } )私有字符串名称;@Value(${user.age} )私有整数年龄;@Value(${user.sex} )私有字符串性别;@GetMapping(/user )公共字符串getUser(){ return { name : name ,age: age ,sex: sex }}JavaBean
/* * *将配置文件中配置的每个属性的值映射到该组件* @ConfigurationProperties:告诉SpringBoot将该类中的所有属性与配置文件中的相关配置绑定;* prefix=person :配置文件中下面所有的属性都是一一映射的*只有这个组件是容器中的组件,容器提供的@ConfigurationProperties函数才能*/@ component @ configuration properties(prefix= person )@ data public class person { private string last name;私有整数年龄;私布尔boss私人出生日期;私有映射字符串、对象映射。私有ListObject列表;私狗狗;}@Dataclass Dog {私有字符串名称;私有整数年龄;}控制器层
@ RestControllerpublic class Person controller { @ auto wired private Person Person;@ get mapping(/Person )public Person get Person(){ return Person;}}运行结果如下
我们可以导入配置文件处理器,稍后会提示您编写配置。
依赖性groupIdorg.springframework.boot/groupId artifactId spring-boot-configuration-processor/artifactId option true/optional/dependency
00-1010 @ configuration properties @ value函数在配置文件中逐个指定松散绑定(松散语法)。不支持SpEL。不支持JSR303数据验证。不支持复杂类型封装。不支持配置文件yml和属性。他们可以得到价值。
如果我们只是需要在一些业务逻辑中获取配置文件中的一个值,那么使用@ value
如果我们编写一个javaBean来映射配置文件,我们将
直接使用@ConfigurationProperties;
方式三: @PropertySource
配置文件
person.lastName=chenperson.age=22person.boss=falseperson.birth=2017/12/12person.map1.k1=v1person.map1.k2=v2person.map2[k1]=v1person.map2[k2]=v2person.list[0]=zhangperson.list[1]=wangperson.list2=zhao,qian,sun,liperson.dog.name=小狗person.dog.age=12
JavaBean
@Component@ConfigurationProperties(prefix = "person")//如果只有一个主配置类文件,@PropertySource可以不写@PropertySource("classpath:person.properties")@Datapublic class Person { private String lastName; private Integer age; private Boolean boss; private Date birth; private Map<String, Object> map1; private Map<String, Object> map2; private List<Object> list; private List<Object> list2; private Dog dog;}@Dataclass Dog { private String name; private Integer age;}
测试同方式二
方式四: 使用工具类 无需注入获取.yml中的值
新建 BeanConfiguration 类,用于项目启动构造我们的工具类
@Configuration@Slf4jpublic class BeanConfiguration { @Bean public YamlConfigurerUtil ymlConfigurerUtil() { //1:加载配置文件 Resource app = new ClassPathResource("application.yml"); Resource appDev = new ClassPathResource("application-dev.yml"); Resource appProd = new ClassPathResource("application-prod.yml"); YamlPropertiesFactoryBean yamlPropertiesFactoryBean = new YamlPropertiesFactoryBean(); // 2:将加载的配置文件交给 YamlPropertiesFactoryBean yamlPropertiesFactoryBean.setResources(app); // 3:将yml转换成 key:val Properties properties = yamlPropertiesFactoryBean.getObject(); String active = null; if (properties != null) { active = properties.getProperty("spring.profiles.active"); } if (StringUtils.isEmpty(active)) { log.error("未找到spring.profiles.active配置!"); } else { //判断当前配置是什么环境 if ("dev".equals(active)) { yamlPropertiesFactoryBean.setResources(app, appDev); } else if ("prod".equals(active)) { yamlPropertiesFactoryBean.setResources(app, appProd); } } // 4: 将Properties 通过构造方法交给我们写的工具类 return new YamlConfigurerUtil(yamlPropertiesFactoryBean.getObject()); }}
工具类实现
public class YamlConfigurerUtil { private static Properties ymlProperties = new Properties(); public YamlConfigurerUtil(Properties properties) { ymlProperties = properties; } public static String getStrYmlVal(String key) { return ymlProperties.getProperty(key); } public static Integer getIntegerYmlVal(String key) { return Integer.valueOf(ymlProperties.getProperty(key)); }}
调用示例
@RestControllerpublic class PersonController { @GetMapping("/msg") public String getMessage() { return YamlConfigurerUtil.getStrYmlVal("person.lastName"); }}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。