Spring Boot学习(二)----读取属性文件
一、读取文件属性值
Spring Boot可以对.properties文件,以及.yml文件进行读取其属性值。
在进行读取文件前,我们先搭建一个SpringBoot环境
第一步,建一个springboot项目,
第二步,配置pom.xml文件,并update Maven,注意pom.xml文件中有个文件处理器spring-boot-configuration-processor
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 32 33 34 35 36 37 38 39 40 41 42 | <project xmlns= "http://maven.apache.org/POM/4.0.0" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > <modelVersion>4.0.0</modelVersion> <groupId>com.zk.myspringboot_003</groupId> <artifactId>myspringBoot_003</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> <finalName>myspringboot_003</finalName> </build> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional> true </optional> </dependency> <!-- 继承父包 --> </dependencies> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.3.RELEASE</version> </parent> </project> |
接下来就是我们进行读取properties文件。
读取.properties文件
读取.properties属性文件一共存在三种方法,我们首先在src/main/resources下创建一个属性文件application.properties(springboot默认读取application命名的属性内容),并输入如下属性内容:
1 2 3 4 5 6 7 8 9 10 11 12 | demo.name=zk demo.age=25 #map demo.login[username]=zhangdeshuai demo.login[password]=zhenshuai demo.login[callback]=http: //www.flyat.cc #list demo.urls[0]=http: //ztool.cc demo.urls[1]=http: //ztool.cc/format/js demo.urls[2]=http: //ztool.cc/str2image demo.urls[3]=http: //ztool.cc/json2Entity demo.urls[4]=http: //ztool.cc/ua |
第一种:使用@Value注解进行读取:
第一步,在TestController.java中使用@Value的注解配置demo的属性值。
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 | package com.zk.myspringboot_003; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @Value( "${demo.name}" ) private String name; @Value( "${demo.age}" ) private String age; @RequestMapping( "/demo" ) public String hello() { return "hello," +name+ ",you are " +age+ "demo1" ; } } |
在测试类SpringBootApp中设置启动后,访问http://localhost:8080/demo,执行的结果如下:
第二种:使用Environment进行读取:
TestController.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | package com.zk.myspringboot_003; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @Autowired private Environment environment; @RequestMapping( "/demo2" ) public String getprops(){ String name=environment.getProperty( "demo.name" ); String age=environment.getProperty( "demo.age" ); return "hello," +name+ ".you are " +age+ "demo2" ; } } |
访问http://localhost:8080/demo2,运行结果如下:
第三种:使用@PropertySource进行访问:
第一步:配置一个ConfigBean.java
ConfigBean.java
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package com.zk.myspringboot_003; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "demo" ) @PropertySource(value = "application.properties" ) public class ConfigBean { private String name; private String age; private Map<String, String> login= new HashMap<String,String>(); private List<String> urls= new ArrayList<String>(); public Map<String, String> getLogin() { return login; } public void setLogin(Map<String, String> login) { this .login = login; } public List<String> getUrls() { return urls; } public void setUrls(List<String> urls) { this .urls = urls; } public String getName() { return name; } public void setName(String name) { this .name = name; } public String getAge() { return age; } public void setAge(String age) { this .age = age; } } |
第二步,写TestController.java
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 | package com.zk.myspringboot_003; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @Autowired private ConfigBean configBeanProp; @RequestMapping( "/demo3" ) public String getBean(){ String name=configBeanProp.getName(); String age=configBeanProp.getAge(); List<String> urlslist=configBeanProp.getUrls(); Map<String,String> loginmap=configBeanProp.getLogin(); return "hello," +name+ ".you are " +age+ "demo3" +urlslist.toString()+ "\n" +loginmap. get ( "username" )+ " " +loginmap. get ( "username" )+ "\n" +loginmap. get ( "password" )+ "\n" +loginmap. get ( "callback" ); } } |
访问http://localhost:8080/demo3,结果如下:
运行成功。
注意:我们可以使用@PropertySource(value="application.properties")标签配置不同的properties属性文件,进行文件属性读取。
读取.yml文件
在SpringBoot中,可以使用yml文件代替properties文件,但是yml文件是阶梯呈现的,与properties的key-value格式有所不同。在yml文件中,我们需要注意以下几个点:
1.yml的每一级之间必须换行,且在下一级开始需要进行一个Tab键的缩进。
2.在yml文件中,对应的赋值方式采用key: value格式,在“:”之后必须存在一个空格键的缩进。
3.在yml文件里面所有的配置,相同级别只能出现一次,比如我们使用server这个级别,那么我们在后面进行server级别配置时只能在已使用的server下面进行配置,不能重新开始一个新的同级别server。
接下来就是我们的yml文件读取实例:
同样建立一个Springboot项目,项目结构如下:
pom.xml文件配置与.properties文件相同。
第一步:在resources下配置一个application.yml文件,文件内容如下:
application.yml
1 2 3 4 5 6 7 8 9 10 11 | wq: person: lastName: zk age: 25 boss: true birth: 2020/3/5 maps: {key1: value1,key2: value2} list: [dog,cat,house] dog: name: 旺财 age: 3 |
第二步,配置两个JavaBean,Dog.java和Person.java
Dog.java
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 | package com.zk.myspringboot_004; public class Dog { private String name; private int age; @Override public String toString() { return "Dog{" + "name='" + name + '\ '' + ", age=" + age + '}' ; } public String getName() { return name; } public void setName(String name) { this .name = name; } public int getAge() { return age; } public void setAge( int age) { this .age = age; } } |
Person.java
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | package com.zk.myspringboot_004; import java.util.Date; import java.util.List; import java.util.Map; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component //prefix前缀需要和yml配置文件里的匹配。 @ConfigurationProperties(prefix = "wq.person" ) public class Person { private String lastName; private int age; private boolean boss; private Date birth; private Map<String,String> maps; private List<String> list; private Dog dog; //toString() public String toString() { return "Person{" + "lastName='" + lastName + '\ '' + ", age=" + age + ", boss=" + boss + ", birth=" + birth + ", maps=" + maps + ", list=" + list + ", dog=" + dog + '}' ; } //get set方法 public Dog getDog() { return dog; } public void setDog(Dog dog) { this .dog = dog; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this .lastName = lastName; } public int getAge() { return age; } public void setAge( int age) { this .age = age; } public boolean isBoss() { return boss; } public void setBoss(boolean boss) { this .boss = boss; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this .birth = birth; } public Map<String, String> getMaps() { return maps; } public void setMaps(Map<String, String> maps) { this .maps = maps; } public List<String> getList() { return list; } public void setList(List<String> list) { this .list = list; } } |
第三步,配置一个TestController.java,提供一个demo的RequestMapping。
TestController.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package com.zk.myspringboot_004; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @Autowired Person person; @RequestMapping( "/demo" ) public String hello() { return person.getLastName()+ " " +person.getAge()+ " " +person.getBirth()+ " " +person.getDog()+ " " +person.getList() + "" +person.getMaps(); } } |
最后配置我们的入口程序SpringBootApp.java
SpringBootApp.java
1 2 3 4 5 6 7 8 9 10 11 12 13 | package com.zk.myspringboot_004; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringBootApp{ public static void main(String[]args){ SpringApplication.run(SpringBootApp. class , args); } } |
启动项目后,访问http://localhost:8080/demo,运行结果如下:
访问成功。
二、@Value获取值和@ConfigurationProperties获取值比较
@ConfigurationProperties | @Value | |
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂数据类型 | 支持 | 不支持 |
配置文件yml还是Properties他们都能获取到值
如果只是在某个业务逻辑中获取一下某个配置文件的某项值,使用@Value
如果专门编写了一个javaBean来和配置文件进行映射,就直接使用@ConfigurationProperties
参考网址:https://blog.csdn.net/weixin_33446857/article/details/84932631
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)