在springboot中,如何读取配置文件中的属性

2022-01-22 0 1,236

摘要:在比较大型的项目的开发中,比较经常修改的属性我们一般都是不会在代码里面写死的,而是将其定义在配置文件中,之后如果修改的话,我们可以直接去配置文件中修改,那么在springboot的项目中,我们应该如何实现这个呢?

本文分享自华为云社区《​ ​springboot读取配置文件中的属性并实现自动注入​​》,作者: 灰小猿 。

我们知道在比较大型的项目的开发中,比较经常修改的属性我们一般都是不会在代码里面写死的,而是将其定义在配置文件中,之后如果修改的话,我们可以直接去配置文件中修改,那么在springboot的项目中,我们应该如何实现这个呢?

接下来我们以一个实例的形式教大家如何读取配置文件中的属性并使用。

以yml中数据库的配置为例,配置文件如下:

配置文件
jdbc:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test
username: root
password: root

(1)使用注解@Value映射
首先第一种方法,使用@Value注解进行映射,这种方法适用于对象的参数比较少的情况,我们可以直接在对象的属性上使用@Value注解,在其中以${}的形式传入配置文件中对应的属性

同时需要在该类的上方使用@Configuration注解,将该类作为配置文件加入,在启动项目的时候实现注入。

实例如下:

@Configuration
public class JdbcProperties {
@Value(“${jdbc.driverClassName}”)
private String driverClassName;
@Value(“${jdbc.url}”)
private String url;
@Value(“${jdbc.username}”)
private String username;
@Value(“${jdbc.password}”)
private String password;
}

这样我们在使用该对象的属性值的时候,可以直接通过调用该对象的属性获取。

(2)使用@ConfigurationProperties映射
第二种方法相对于第一种方法更简单一些,不需要在每一个字段的上面的使用@Value注解,直接使用一个@ConfigurationProperties注解标注在类上即可,在其中传入的参数为在yml配置文件上参数的前缀,但是效果是和第一种是一样的

@ConfigurationProperties注解声明当前类为配置读取类

prefix=”jdbc”表示读取前缀为jdbc的属性

会将配置文件中前缀为prefix的属性赋给类中同名的字段

实例如下:

@ConfigurationProperties(prefix = “jdbc”)
public class JdbcProperties {
private String driverClassName;
private String url;
private String username;
private String password;
}

使用该注解时有一点需要注意: 必须保证属性名称和字段一模一样,且类需要提供字段的setter方法

但是如果只使用@ConfigurationProperties注解是没有效果的,他并不会讲配置文件中的参数和属性匹配。他需要配合其他在启动项目时会生效的注解一起使用才会生效

一种方法是在JdbcProperties类上添加一个@Configuration注解,将其标识为配置类

如下:

@Configuration
@ConfigurationProperties(prefix = “jdbc”)
public class JdbcProperties {
private String driverClassName;
private String url;
private String username;
private String password;
}

或者还有第二种方法:我们还可以在Spring中使用这个配置读取类,通过@EnableConfigurationProperties注解可以将指定的配置读取类的对象加载到Spring容器,也就是说,在其他配置类上使用一个@EnableConfigurationProperties注解,来将配置文件的参数和JdbcProperties类的属性绑定。这样就不需要在JdbcProperties类上使用@Configuration注解了

实例如下:

@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfig {
@Autowired
private JdbcProperties prop;

/**
这种方式不需要@Autowired注入字段,也不需要构造函数注入,
直接在方法中定义配置读取类的形参,Springboot在创建DataSource对象时会自动注入JdbcProperties对象
*/
@Bean
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(prop.getDriverClassName());
dataSource.setUrl(prop.getUrl());
dataSource.setUsername(prop.getUsername());
dataSource.setPassword(prop.getPassword());
return dataSource;
}
}

(3)推荐使用:极简方式 @Bean和@ConfigurationProperties注解一起使用,
对于我个人的习惯而言,在使用的时候,我还是喜欢使用第三种方法,这种方法使用起来最简单,而且也最实用

在一个带@Configuration注解的配置类中,我们可以直接把@ConfigurationProperties(prefix = “jdbc”)注解声明在需要使用的@Bean的方法上,Springboot会自动将配置文件中以prefix开头的属性赋给要创建对象的类的同名字段上,使用前提:要求类该类必须提供了setter方法

使用这种方法的好处就是不要在bean上做任何额外的注解声明。统一将需要进行注入容易或和配置文件参数进行绑定的类放置在一个带@Configuration注解的类中即可!

@Configuration
public class JdbcConfig {
@Bean
@ConfigurationProperties(prefix = “jdbc”)
public JdbcProperties jdbcProperties(){
return new JdbcProperties();
}
}

但是以上的操作,只是将bean注入到了容器中,那么在其他类中使用的话,还是需要在每一个对象上使用@Autowired注解,那么有没有什么方法可以不使用@Autowired注解来声明自动注入呢?

@RequiredArgsConstructor注解实现自动注入
使用@RequiredArgsConstructor注解可以代替@autowired注解实现对象属性的自动注入,

使用场景:需要注入很多的mapper接口或者另外的service接口,这时候就会写很多的@Autowired注解,代码看起来很乱,lombok提供了一个注解:

@RequiredArgsConstructor(onConstructor =@_(@Autowired))

写在类上可以代替@Autowired注解,需要注意的是在注入时需要用final定义,或者使用@notnull注解

@RestController
@RequiredArgsConstructor
public class LoginTest {

// @Autowired
private final LoginProperties loginProperties;

@RequestMapping(“/login01”)
public void loginTest01(){
System.out.println(“进入loginTest01方法~~~”);
String language = loginProperties.getLanguage();
System.out.println(language);
}

}

这样就可以避免写入重复的@Autowired了,但是就是需要注意对象必须是final修饰的才行

总结一下,如果需要将类属性与配置文件中的参数绑定,并且注入到容器中时,推荐使用第三种方法和@RequiredArgsConstructor注解来实现!!!

 

文章来源51CTO博客:https://blog.51cto.com/u_15214399/4962582

收藏 (0) 打赏

感谢您的支持,我们会继续努力的!

打开支付宝/微信/QQ扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. 本站所有教学内容和资源均来源于本站原创和网络收集以及用户自主上传,如有侵权请带证联系本站客服进行处理!邮箱:team@lcwl.fun
2. 对于非本站原创的资源不保证所提供下载资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系本站客服处理,有奖励!
3. 除本站原创教学或资源外其余资源您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 本站原创资源如需商用还请申请商业授权,否则本站有权追究其法律责任!
5. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有学币奖励额外收入!

凌晨资源网 后端开发 在springboot中,如何读取配置文件中的属性 https://www.lingchenw.cn/jishu/1270.html

常见问题
  • 本站所有付费教程均可单独付费或者开会员学习,自己购买或者开了会员就可以学习,来凌晨学院报名学习送会员,并且有讲师一对一辅导培训教学,师生互动化,定期布置作业等
查看详情
  • 本站所有资源版权均属于原作者所有,资源中标注可商用的可以商用的代表是本团队自主研发公布可商用的产品,未标注可商用所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务

学习手机编程软件开发
手机编程软件开发

你知道吗?用手机也能开发制作软件,满足自己的编程心,做属于自己的软件

报名学习
自媒体短视频
副业做自媒体短视频

想做自媒体短视频剪辑给自己多一份副业,只需一部手机你也可以

报名学习
搭建网站必备云互联主机
链未云互联

搭建网站,后台云服务等必备云服务器互联主机,IDC云主机

现在使用
Fa快捷助手
用手点一点就能开发做软件

不用记编程语法,不用一行一行手敲代码,用手点一点就能开发制作软件

点击下载