今天这篇文章主要来和大家分享一下,在springboot中,如何读取配置文件中的属性, 我们知道在比较大型的项目的开发中,比较经常修改的属性我们一般都是不会在代码里面写死的,而是将其定义在配置文件中,之后如果修改的话,我们可以直接去配置文件中修改,那么在springboot的项目中,我们应该如何实现这个呢? 接下来我们以一个实例的形式教大家如何读取配置文件中的属性并使用。 以yml中数据库的配置为例,配置文件如下:配置文件jdbc:driverClassName:com。mysql。jdbc。Driverurl:jdbc:mysql:127。0。0。1:3306testusername:rootpassword:root(1)使用注解Value映射 首先第一种方法,使用Value注解进行映射,这种方法适用于对象的参数比较少的情况,我们可以直接在对象的属性上使用Value注解,在其中以{}的形式传入配置文件中对应的属性, 同时需要在该类的上方使用Configuration注解,将该类作为配置文件加入,在启动项目的时候实现注入。 实例如下:ConfigurationpublicclassJdbcProperties{Value({jdbc。driverClassName})privateStringdriverClassName;Value({jdbc。url})privateStringurl;Value({jdbc。username})privateStringusername;Value({jdbc。password})privateStringpassword;} 这样我们在使用该对象的属性值的时候,可以直接通过调用该对象的属性获取。(2)使用ConfigurationProperties映射 第二种方法相对于第一种方法更简单一些,不需要在每一个字段的上面的使用Value注解,直接使用一个ConfigurationProperties注解标注在类上即可,在其中传入的参数为在yml配置文件上参数的前缀,但是效果是和第一种是一样的,ConfigurationProperties注解声明当前类为配置读取类 prefixjdbc表示读取前缀为jdbc的属性 会将配置文件中前缀为prefix的属性赋给类中同名的字段 实例如下:ConfigurationProperties(prefixjdbc)publicclassJdbcProperties{privateStringdriverClassName;privateStringurl;privateStringusername;privateStringpassword;} 使用该注解时有一点需要注意:必须保证属性名称和字段一模一样,且类需要提供字段的setter方法 但是如果只使用ConfigurationProperties注解是没有效果的,他并不会讲配置文件中的参数和属性匹配。他需要配合其他在启动项目时会生效的注解一起使用才会生效, 一种方法是在JdbcProperties类上添加一个Configuration注解,将其标识为配置类, 如下:ConfigurationConfigurationProperties(prefixjdbc)publicclassJdbcProperties{privateStringdriverClassName;privateStringurl;privateStringusername;privateStringpassword;} 或者还有第二种方法:我们还可以在Spring中使用这个配置读取类,通过EnableConfigurationProperties注解可以将指定的配置读取类的对象加载到Spring容器,也就是说,在其他配置类上使用一个EnableConfigurationProperties注解,来将配置文件的参数和JdbcProperties类的属性绑定。这样就不需要在JdbcProperties类上使用Configuration注解了, 实例如下:ConfigurationEnableConfigurationProperties(JdbcProperties。class)publicclassJdbcConfig{AutowiredprivateJdbcPropertiesprop;这种方式不需要Autowired注入字段,也不需要构造函数注入,直接在方法中定义配置读取类的形参,Springboot在创建DataSource对象时会自动注入JdbcProperties对象BeanpublicDataSourcedataSource(){DruidDataSourcedataSourcenewDruidDataSource();dataSource。setDriverClassName(prop。getDriverClassName());dataSource。setUrl(prop。getUrl());dataSource。setUsername(prop。getUsername());dataSource。setPassword(prop。getPassword());returndataSource;}}(3)推荐使用:极简方式Bean和ConfigurationProperties注解一起使用, 对于我个人的习惯而言,在使用的时候,我还是喜欢使用第三种方法,这种方法使用起来最简单,而且也最实用, 在一个带Configuration注解的配置类中,我们可以直接把ConfigurationProperties(prefixjdbc)注解声明在需要使用的Bean的方法上,Springboot会自动将配置文件中以prefix开头的属性赋给要创建对象的类的同名字段上,使用前提:要求类该类必须提供了setter方法 使用这种方法的好处就是不要在bean上做任何额外的注解声明。统一将需要进行注入容易或和配置文件参数进行绑定的类放置在一个带Configuration注解的类中即可!ConfigurationpublicclassJdbcConfig{BeanConfigurationProperties(prefixjdbc)publicJdbcPropertiesjdbcProperties(){returnnewJdbcProperties();}} 但是以上的操作,只是将bean注入到了容器中,那么在其他类中使用的话,还是需要在每一个对象上使用Autowired注解,那么有没有什么方法可以不使用Autowired注解来声明自动注入呢?RequiredArgsConstructor注解实现自动注入 使用RequiredArgsConstructor注解可以代替autowired注解实现对象属性的自动注入, 使用场景:需要注入很多的mapper接口或者另外的service接口,这时候就会写很多的Autowired注解,代码看起来很乱,lombok提供了一个注解: RequiredArgsConstructor(onConstructor(Autowired)) 写在类上可以代替Autowired注解,需要注意的是在注入时需要用final定义,或者使用notnull注解RestControllerRequiredArgsConstructorpublicclassLoginTest{AutowiredprivatefinalLoginPropertiesloginProperties;RequestMapping(login01)publicvoidloginTest01(){System。out。println(进入loginTest01方法);StringlanguageloginProperties。getLanguage();System。out。println(language);}} 这样就可以避免写入重复的Autowired了,但是就是需要注意对象必须是final修饰的才行, 总结一下,如果需要将类属性与配置文件中的参数绑定,并且注入到容器中时,推荐使用第三种方法和RequiredArgsConstructor注解来实现!!! 原文地址:https:bbs。huaweicloud。comblogs324165?utmsource51ctoutmmediumbbsexutmcampaignotherutmcontentcontent 原文作者:灰小猿