编写一个读取类,来读取配置文件的配置

前言

项目中我们可以通过@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;
}

结果:

报错,ExceptionCould 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文件),会更加方便一些。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值