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

目录
  • 配置文件
    • (1)使用注解@Value映射
    • (2)使用@ConfigurationProperties映射
    • (3)推荐使用:极简方式 @Bean和@ConfigurationProperties注解一起使用,
  • @RequiredArgsConstructor注解实现自动注入
  • 总结

我们知道在比较大型的项目的开发中,比较经常修改的属性我们一般都是不会在代码里面写死的,而是将其定义在配置文件中,之后如果修改的话,我们可以直接去配置文件中修改,那么在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注解来实现!!!

到此这篇关于java springboot中如何读取配置文件的属性的文章就介绍到这了,更多相关java springboot读取文件属性内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot读取外部配置文件的方法

    1.SpringBoot配置文件 SpringBoot使用一个以application命名的配置文件作为默认的全局配置文件.支持properties后缀结尾的配置文件或者以yml/yaml后缀结尾的YAML的文件配置. 以设置应用端口为例 properties文件示例(application.properties): server.port=80 YAML文件示例(application.yml): server: port: 80 在properties和yml/yaml配置文件同时存在的情况

  • SpringBoot 如何从配置文件读取值到对象中

    目录 一.实现方式 @ConfigurationProperties 注解 @Valid注解 二.两者区别 三.代码演示 四.@PropertySource 读取指定配置文件 五.@ImportResource:导入Spring配置文件 六.思维导图 一.实现方式 @ConfigurationProperties 注解 (最好加上前缀prefix="person",标明是和配置文件中哪个开头的属性匹配) 推荐使用用在类上,从配置文件读取属性值,放到对象里面,复杂的结构也适用例如map,

  • springboot如何读取配置文件到静态工具类

    目录 springboot读取配置文件到静态工具类 我们可以用Environment 来解决 将配置文件的值加载到工具类的静态变量中(多环境运行加载) 首先创建一个SpringBoot项目 创建配置文件 创建实体类 springboot读取配置文件到静态工具类 通常我们读取配置文件可以用@Value注解和@Configuration,@ConfigurationProperties(prefix = "xxx")等注解,但是这种方式是无法把配置读取到静态变量的,如果我们想在项目初始化时

  • Springboot单元测试无法读取配置文件的解决方案

    目录 单元测试无法读取配置文件 深渊巨坑 单元测试加载配置文件启动异常 最初以为是配置文件路径写错了 最后确认是因为xml配置问题 单元测试无法读取配置文件 首先,测试类要加注解 表示该类是一个测试类,默认会加载resource文件夹下的配置文件. 如果想要指定配置文件: @TestPropertySource("classpath:pay.properties") 深渊巨坑 spring boot 2,在进行单元测试的时候,不支持.yml文件!!!至文章日期,还未解决. 用yml文件

  • Springboot 读取 yml 配置文件里的参数值

    目录 方式一 方式二 总结 方式一 1.yml配置 yml配置(示例): api: mes: MES_SOCKET: http://192.168.99.140:8081 2.读取 代码如下(示例): package com.jack.modules.wms.api.common.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; impor

  • java springboot中如何读取配置文件的属性

    目录 配置文件 (1)使用注解@Value映射 (2)使用@ConfigurationProperties映射 (3)推荐使用:极简方式 @Bean和@ConfigurationProperties注解一起使用, @RequiredArgsConstructor注解实现自动注入 总结 我们知道在比较大型的项目的开发中,比较经常修改的属性我们一般都是不会在代码里面写死的,而是将其定义在配置文件中,之后如果修改的话,我们可以直接去配置文件中修改,那么在springboot的项目中,我们应该如何实现这

  • SpringBoot加载读取配置文件过程详细分析

    目录 配置文件的读取顺序 多坏境的配置文件 个性化配置 自定义配置文件名称和路径 加载yml文件 springboot默认读取的配置文件名字是:“application.properties”和“application.yml”,默认读取四个位置的文件:根目录下.根目录的config目录下.classpath目录下.classpath目录里的config目录下: 配置文件的读取顺序 根目录/config/application.properties 根目录/config/application.

  • Java SpringBoot 中的操作事务

    目录 1.编程式事务 1.1 TransactionTemplate 使用 1.2 TransactionManager 使用 2.声明式事务 总结 前言: 在 Spring Boot 中操作事务有两种方式:编程式事务或声明式事务,接下来我们一起来看二者的具体实现. 1.编程式事务 在 Spring Boot 中实现编程式事务又有两种实现方法: 使用 TransactionTemplate 对象实现编程式事务: 使用更加底层的 TransactionManager 对象实现编程式事务. 它们的具

  • Java中spring读取配置文件的几种方法示例

    Spring读取配置XML文件分三步: 一.新建一个Java Bean: package springdemo; public class HelloBean { private String helloWorld; public String getHelloWorld() { return helloWorld; } public void setHelloWorld(String helloWorld) { this.helloWorld = helloWorld; } } 二.构建一个配

  • java maven项目如何读取配置文件信息

    目录 maven项目读取配置文件信息 主类 配置文件 pom文件 控制台运行 jar命令运行 maven工程读取resources配置文件的正确姿势 maven项目读取配置文件信息 目录结构 主类 App.java package com.tomy.hive; import java.io.*; import java.util.Properties; /** * Hello world! * */ public class App { private static String JDBC_UR

  • @PropertySource 无法读取配置文件的属性值解决方案

    原来Person类这样写: 只写了@PropertySource注解 @Component @PropertySource(value = {"classpath:person.properties"}) public class Person { private String lastName; private int age; private boolean boss; private Date birth; private Map<String,Object> map

  • 四种引用类型在JAVA Springboot中的使用详解

    目录 概念介绍 01.  强引用 02.  软引用 03.  弱引用 04.  虚引用 对象可达性 Springboot源码中的使用 总结 概念介绍 不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响. 01.  强引用 这个就是我们创建的普通对象了~ 当该对象被显示地赋值为 null 时,或者没有被其他存活的对象继续引用时,它就会成为垃圾收集器的目标,等待被收回 02.  软引用 软引用( SoftReference ) , 当内存不足 时会被回收 比如

  • 四种引用类型在JAVA Springboot中的使用详解

    目录 概念介绍 01.  强引用 02.  软引用 03.  弱引用 04.  虚引用 对象可达性 Springboot源码中的使用 总结 概念介绍 不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响. 01.  强引用 这个就是我们创建的普通对象了~ 当该对象被显示地赋值为 null 时,或者没有被其他存活的对象继续引用时,它就会成为垃圾收集器的目标,等待被收回 02.  软引用 软引用( SoftReference ) , 当内存不足 时会被回收 比如

  • springboot读取配置文件中的参数具体步骤

    springBoot是java开发中会经常用到的框架,那么在实际项目中项目配置了springBoot框架,应该如何在项目中读取配置文件中的参数呢? 1.打开eclipse开发工具软件. 2.在项目中确保pom.xml文件已引用了[spring-boot-starter-web]jar包. 因为springBoot启动的时候会自动去获取项目中在resources文件录目下的名为application.properties参数配置文件. 3.在项目中的src/main/resource文件录目下创建

随机推荐