Spring Boot学习笔记----读取配置文件 爱被打了一巴掌 2022-06-04 06:06 186阅读 0赞 Springboot默认配置信息,都放置在application.properties文件中,位于工程目录的src/main/resource下。 ![这里写图片描述][SouthEast] 本文记录两种方法 (1)如何获取默认配置信息 (2)如何获取自定义配置信息 常见问题 (1)Spring Boot Annotion processor not found in classpath (2)Re-run Spring Boot Configuration Annotation Processor to update generated metadata ## 如何获取默认配置信息 ## 配置信息可以通过@Value与属性变量进行绑定。 例如,在application.properties文件中定义如下变量 Test.fileName="1.txt" path=C:/output fileNum=1 我们在Controller中,进行变量绑定,然后打印内容。核心代码如下 import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class ConfigController { Logger logger= LoggerFactory.getLogger(ConfigController.class); @Value("${Test.fileName}") private String name; @Value("${path}") private String path; @Value("${fileNum}") private int num; @RequestMapping("/getConfig") public void getConfig(){ logger.info("fileName="+name); logger.info("path="+path); logger.info("fileNum="+num); } } 执行结果如下 2017-12-06 11:06:34.461 INFO 9504 --- [nio-8080-exec-6] com.gemalto.configtest.ConfigController : fileName="1.txt" 2017-12-06 11:06:34.461 INFO 9504 --- [nio-8080-exec-6] com.gemalto.configtest.ConfigController : path=C:/output 2017-12-06 11:06:34.461 INFO 9504 --- [nio-8080-exec-6] com.gemalto.configtest.ConfigController : fileNum=1 如果配置具有相同的prefix,那么可以使用@ConfigurationProperties(prefix=”my”)进行简化绑定。 例如,我们在application.properties中添加 my.name=breakloop1 my.age=10 my.location=BJ1 读取时,我们创建配置类MyConfigController2。 @RestController @ConfigurationProperties(prefix="my") public class MyConfigController2 { Logger logger= LoggerFactory.getLogger(MyConfigController2.class); private String name; private int age; private String location; public String getName() { return name; } public int getAge() { return age; } public String getLocation() { return location; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public void setLocation(String location) { this.location = location; } @RequestMapping("/getMyConfig2") public void getMyConfig(){ logger.info("my name is "+name+", "+ age +" years old, "+location); } } 执行结果如下: 2017-12-06 12:12:03.387 INFO 8504 --- [nio-8080-exec-6] c.g.configtest.MyConfigController2 : my name is breakloop1, 10 years old, BJ1 如果不想使用@Value进行绑定,这里需要注意以下几点: (1)属性变量名称,需要跟配置中的名称一致 (2)需要提供getter和setter ## 如何获取自定义配置信息 ## 通常,将自定义配置文件也放置在src/main/resource下。当然也可以创建子目录保存不同的配置,便于管理。 例如,我们在src/main/resource下创建custom目录,并添加my.properties文件,文件内容如下 my.name=breakloop my.age=1 my.location=BJ 读取配置信息时,需要使用@PropertySource(“classpath:custom/my.properties”)来绑定配置文件。 这里需要强调的是,网上很多版本都是使用@ConfigurationProperties进行绑定的。绑定格式如下 @ConfigurationProperties(location="classpath:custom/my.properties") 但在Spring boot1.5.1之后,就废除了location参数,转而使用@PropertySource指定配置文件路径。 核心代码如下: @RestController @PropertySource("classpath:custom/my.properties") public class MyConfigController { Logger logger= LoggerFactory.getLogger(MyConfigController.class); @Value("${my.name}") private String name; @Value("${my.age}") private int age; @Value("${my.location}") private String location; @RequestMapping("/getMyConfig") public void getMyConfig(){ logger.info("my name is "+name+", "+age+" years old, "+location); } } 执行结果如下: 2017-12-06 11:29:16.024 INFO 9256 --- [nio-8080-exec-5] c.gemalto.configtest.MyConfigController : my name is breakloop, 1 years old, BJ ## 常见问题处理 ## (1)Spring Boot Annotion processor not found in classpath 需要在pom中添加dependences <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> (2)Re-run Spring Boot Configuration Annotation Processor to update generated metadata 该提示,不影响代码执行。只是提醒用户,进行必要的重新编译。再当文件进行了有效的更新时,该提示也会消失。 [SouthEast]: /images/20220604/9055298b35424331a0544dfdd8622f82.png
还没有评论,来说两句吧...