前言
项目中我们可以通过@Value()来将配置文件中的配置数值加载到我们的变量中,我们也可以编写一个配置文件读取类,专门用来读取我们配置文件中的配置,进行代码的统一管理和规划。下面通过配置文件读取类来实现读取配置。
一、直接读取application.yml
application.yml:
server:
port: 8080
spring:
application:
name: CONNECTION
fruit:
name:
apple:
price: 12.5
配置文件读取类:
@Data
@Component
@PropertySource(value = "classpath:application.yml") //指定配置文件的位置
public class DataProperties {
@Value("${server.port}")
private int port;
@Value("${spring.application.name}")
private String name;
@Value("${fruit.name.apple.price}")
private double aPrice;
}
测试:
@RestController
@Slf4j
public class FileTestCOntroller {
@Autowired
private DataProperties dataProperties;
@RequestMapping("/data")
public void testData(){
double aPrice = dataProperties.getAPrice();
log.info("{}",aPrice);
int port = dataProperties.getPort();
log.info("{}",port);
String name = dataProperties.getName();
log.info(name);
}
}
结果:
原因:我的CONNECTION模块中引入了api-common模块,springboot自动读取了api-common模块中相同的配置:
解决方法:只能将api-common模块的配置注释掉。或者两个模块不要有相同的配置名称。
二、另开一个yml配置文件:
application-data.yml:
serverPC:
num: 666
summer:
application:
name: summer
配置读取类:
@Data
@Component
@PropertySource(value = "classpath:application-data.yml") //指定配置文件路径
public class DataProperties {
@Value("${serverPC.num}")
private int num;
@Value("${summer.application.name}")
private String name;
}
结果:
报错,Exception:Could not resolve placeholder 'serverPC.num' in value "${serverPC.num}"
解决方法:需要在主配置文件,即application.yml中加上:
spring:
profiles:
active: data
最终结果:
注意要点:
- 这是springboot的一个多环境配置,通过spring.profiles.active=data(这里的data是application-data.yml中的data,有文件格式要求),就可以切换到application-data.yml中进行配置的读取。
- 如果data配置文件中的配置与主配置文件中的配置相同,比如主配置文件中我设置端口port=8080,data配置文件中端口配置为port=666,则模块的端口会变成666。
- 主配置文件中有data配置文件中没有的配置,主配置文件中的配置也会被读取使用。
三、另开一个properties文件
主配置文件为application.yml,此时建立data.properties配置文件如下:
serverPC.num=8080
summer.application.name=summer
配置文件类的注解修改:
@PropertySource(value = "classpath:data.properties")
其他与(二)中不变,程序能够运行,不会报错。不用配置 profiles: active: data 就能读取得到。
总结
- 通过一个配置读取文件类,读取配置文件中的配置,并且将这个配置读取文件类注入到容器中,就能在其他地方使用且读取到想要的配置。
- 建议当你的主配置文件是yml格式的时候,用来被读取的配置文件使用properties格式,即(三、另开一个properties文件),会更加方便一些。