SpringBoot如何读取配置文件(@Value/@ConfigurationProperties/Environment)

[版权申明] 非商业目的注明出处可自由转载
博文地址:https://blog.csdn.net/ShuSheng0007/article/details/117002443
出自:shusheng007

概述

最近工作的重心逐渐由移动开发转到后端了,由于日常主要精力在移动开发上,以至于对后端的很多知识都停留在理论层面上,实践比较少,一旦动手才发现有点眼高手低。于是我将自己学习的过程记录下来,不然过几天就忘了,一来可以作为自己的学习笔记,二来也能帮助待见我的那些程序猿小伙伴们…

由于SpringBoot注解满天飘,所以对于初学者还是比较懵逼的,因为要是你不从根本上理解Spring的原理,就会觉得这玩意很神奇:为啥加个这样的注解就起作用了呢?到此就是程序员二八分界线了,进一步研究的同学升二,满足于当前状态者落八。

今天我们主要总结一下SpringBoot如何读取配置文件的问题。

配置文件类型

SpringBoot 支持两种格式的配置文件,这个相信大家都已经烂熟于心了,这两种格式的文件除了格式上不同,使用上几乎没有差别,喜欢哪种就用哪种吧

下面是同一内容的两种格式,可以感受一下:

  • Property文件
database.username=ss007
database.password=wb123
database.server.ip=192.168.1.1
database.server.port=8000
  • Yml文件
database:
  username: ss007
  password: wb123
  server:
    ip: 192.168.1.1
    port:8000

读取配置文件的三种方式

当我们新建一个SpringBoot的Maven项目时,默认会在src/main/resources路径下生成一个application.properties空配置文件。系统默认就能找到这个文件,神奇吧?因为springboot使用了约定大于配置的思想,很多配置都按照约定配置好了。

那我们如何读取这些配置文件的内容呢?此处总结了三种方式。

使用@Value

@Value("${配置文件中某个键值对的key}")注解添加到你要接收值的字段上即可,如下所示:

@Repository
public class UserModel {
    @Value("${database.username}")
    private String userName;
    
    //不需要setter
}

@Repository 是一种@Component,通过它Spring就扫描到这个类,然后帮助我们生成UserModel的实例对象了

使用Environment

使用Environment对象,这个对象里面有很多获取值的方法,这种方法用的较少。

@Repository
public class UserModel {        
       //使用setter的方式注入Enviroment对象
       private Environment environment;   
       @Autowired
       public void setEnvironment(Environment environment) {
           this.environment = environment;
       }
    
      //通过environment对象获取值
      public String getUserNameByEnv(){
          return environment.getProperty("database.username");
      }
}

使用@ConfigurationProperties

重点是这种方法,既灵活又迷惑。其思想是将配置文件中相关的一组配置映射为一个POJO(plain old java object),更准确的说是映射为一个JavaBean。然后我们就可以通过这个JavaBean来使用配置文件里的值了。

不同版本这个注解的使用方式有一些不同,本文使用的是SpringBoot2.4.5。

  1. 第一步:识别配置文件中那些相关属性组。

例如此例是一组database相关的配置,其下面还有一个子组server。

database.username=ss007
database.password=wb123
database.server.ip=192.168.1.1
database.server.port=8000
  1. 第二步:按照配置文件的结构和命名构建Java类

这里有几个注意点:

  • 字段的命名

Java类字段命名不需要与配置文件完全一样,但也不能随意命名,要符合一定的规则:

例如配置文件中为:username, Java类自动名称可以为:UserName/Username/userName/username/User-Name/user-name等等,但是在Java中一般使用小驼峰格式:userName

  • 内部嵌套类

当配置文件中的属性结构存在层级时,就需要使用嵌套类。例如此处的server。

  • Setter千万不可省略

因为SpringBoot使用setter来将配置文件的值赋值到JavaBean里面的,所以不可省略,否则赋值将失败。

下面的代码为上面属性配置的隐射

public class DatabaseConfig {
    /**
     * 数据库用户名
     */
    private String userName;
    /**
     * 数据库密码
     */
    private String passWord;
    /**
     * 数据库服务器
     */
    private Server server;


    public void setUserName(String userName) {
        this.userName = userName;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public void setServer(Server server) {
        this.server = server;
    }
    ...省略了getter

    public static class Server{
        /**
         * 服务器IP
         */
        private String ip;
        /**
         * 服务器端口号
         */
        private int port;

        public void setIp(String ip) {
            this.ip = ip;
        }

        public void setPort(int port) {
            this.port = port;
        }
        ...省略了getter
    }
}
  1. 第三步:使用@ConfigurationProperties(prefix=“配置属性组名”)注解标记

其中prefix为属性配置文件中那组配置的最外层,此处为database

  1. 第四步:让Spring感知到你这个配置类的存在

完成以上三步后,我们需要让Spring感知到这个类,那样当我们使用的时候,它才能帮我们注入实例。

这里又存在3中方式:

第一种方式:使用@Configuration注解标记你的配置类,此处为DatabaseConfig

第二种方式:使用@ConfigurationPropertiesScan()注解标记你的程序启动类xxxApplication,此处为SpringLearnApplication。

第三种方式:使用@EnableConfigurationProperties({你的配置类.class}) 注解标记你的程序启动类xxxApplication,此处为SpringLearnApplication。

三种方式使用任何一种都可,其中第二种方式最为便捷,相当于SpringBoot自动扫描那些使用@ConfigurationProperties标记的类。

最后的样子为

@Configuration //当使用`@ConfigurationPropertiesScan()`或`@EnableConfigurationProperties({你的配置类.class})` 时,此注解可省略
@ConfigurationProperties(prefix="database")
public class DatabaseConfig {
    ...
}

当想要使用配置文件中的值时,注入DatabaseConfig实例,然后使用其值即可。

总结

三种方式中第三种应该是使用最多的,也最为复杂,你学会了吗?其功能远不止如此,我们下篇接着聊。

最后来个调查吧,你喜欢哪种格式的配置文件?properties 或者yml

文章最后有源码,觉得可以记得star。

GitHub源码: springboot-learn

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Spring Boot 提供了多种读取配置文件的方式,以下是其中几种常用的方式: 1. application.properties/application.yml:在 src/main/resources 目录下创建 application.properties 或 application.yml 文件,可以在其中设置应用程序的配置信息,例如: ``` server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase spring.datasource.username=root spring.datasource.password=123456 ``` 2. @Value 注解:在代码中使用 @Value 注解读取配置信息,例如: ``` @Value("${server.port}") private int serverPort; @Value("${spring.datasource.url}") private String dataSourceUrl; @Value("${spring.datasource.username}") private String dataSourceUsername; @Value("${spring.datasource.password}") private String dataSourcePassword; ``` 3. @ConfigurationProperties 注解:通过 @ConfigurationProperties 注解将配置文件中的属性值注入到 Bean 中,例如: ``` @ConfigurationProperties(prefix = "spring.datasource") public class DataSourceProperties { private String url; private String username; private String password; // getter/setter } ``` 4. Environment 接口:通过 Environment 接口读取配置信息,例如: ``` @Autowired private Environment env; int serverPort = env.getProperty("server.port", Integer.class); String dataSourceUrl = env.getProperty("spring.datasource.url"); String dataSourceUsername = env.getProperty("spring.datasource.username"); String dataSourcePassword = env.getProperty("spring.datasource.password"); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShuSheng007

亲爱的猿猿,难道你又要白嫖?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值