关于springboot中的自定义配置项

 更新时间:2023年07月13日 09:41:46   作者:是馄饨呀  
这篇文章主要介绍了关于springboot中的自定义配置项,在项目开发的过程中,经常需要自定义系统业务方面的配置文件及配置项,Spring Boot提供了@value注解、@ConfigurationProperties注解和Environment接口等3种方式自定义配置项,需要的朋友可以参考下

自定义配置项

在项目开发的过程中,经常需要自定义系统业务方面的配置文件及配置项,Spring Boot提供了@value注解、@ConfigurationProperties注解和Environment接口等3种方式自定义配置项。

@value

在实际项目中,经常需要在配置文件中定义一些简单的配置项,Spring Boot提供@Value注解来设置简单的配置项,默认读取application.properties文件中的配置属性。

我们在application.properties配置文件下自定义配置属性。

在这里插入图片描述

然后在使用的位置调用@Value注解来获取配置项的值,如下所示:

@Value("${com.jingt.name.firstName}")
    private String firstName;
    @Value("${com.jingt.name.secondName}")
    private String secondName;
    public String testValue(){
        return firstName + "|" + secondName;
    }
@Autowired
private HelloServices helloServices;
 @Test
    void testValue() {
        System.out.println(helloServices.testValue());
    }

在这里插入图片描述

注意:

  1. 使用@Value注解时,所在类必须被Spring容器管理,也就是使用@Component@Controller@Service等注解定义的类。
  2. @Value需要传入完整的配置项的Key值。
  3. @Value注解默认读取application配置文件,如果需要使用其他的配置文件,可以通过@PropertySource注解指定对应的配置文件。

在启动类上加注解@PropertySource

@SpringBootApplication
@PropertySource(value = {"classpath:application_test.properties"})
public class HelloworldApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloworldApplication.class, args);
    }
}

在application_test.properties 配置文件中加入

com.jingt.name.firstName=guo1
com.jingt.name.thirdName=jingt1
@Value("${com.jingt.name.firstName}")
private String firstName;
@Value("${com.jingt.name.thirdName}")
private String secondName;
public String testValue(){
    return firstName + "|" + secondName;
}

把secondName改为thirdName,firstName从guo改为guo1

在这里插入图片描述

会发现thirdName也已经获取到了,firstName还是为guo,这是因为application.properties配置文件加载的优先级的原因,application.properties会覆盖application_test.properties对应文件中的值。

Environment接口

Environment是Spring为运行环境提供的高度抽象的接口,它会自动获取系统加载的全部配置项,包括命令行参数,系统属性,系统环境,随机数,配置文件等。使用时无须其他的额外配置,只要在使用的类中注入Environment即可。

在application.properties文件中增加自定义配置项

com.jingt.name.firstName=guo
com.jingt.name.secondName=jingt

Environment读取的是系统中所有的配置。我们既可以在application.properties中设置自定义的配置项,又可以在自定义配置文件中添加配置项。

Environment对象注入,获取系统配置

   @Autowired
    private Environment env;
    @Test
    void getEnv(){
        System.out.println(env.getProperty("com.jingt.name.firstName"));
        System.out.println(env.getProperty("com.jingt.name.secondName"));
    }

引入的是import org.springframework.core.env.Environment;,不要引入错了。

在这里插入图片描述

使用Environment时还需要注意以下两点:

使用Environment无须指定配置文件,其获取的是系统加载的全部配置文件中的配置项。需要注意配置文件的编码格式,默认为ISO8859-1。

@ConfigurationProperties

在实际项目开发中,需要注入的配置项非常多时,@value和Environment两种方法就会比较烦琐。这时可以使用注解@ConfigurationProperties将配置项和实体Bean关联起来,实现配置项和实体类字段的关联,读取配置文件数据。

在resources下创建自定义的website.properties配置文件,增加配置属性。

com.jingt.resource.name=jingt
com.jingt.resource.website=com.jingt.com
com.jingt.resource.language=java

创建一个配置类

在这里插入图片描述

@Configuration
@ConfigurationProperties(prefix = "com.jingt.resource")
@PropertySource(value = "classpath:website.properties")
public class ResourceConfig {
    private String name;
    private String website;
    private String language;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getWebsite() {
        return website;
    }
    public void setWebsite(String website) {
        this.website = website;
    }
    public String getLanguage() {
        return language;
    }
    public void setLanguage(String language) {
        this.language = language;
    }
}

我们使用了@Configuration注解、@ConfigurationProperties和@PropertySource三个注解来定义WebSiteProperties实体类:

  • @Configuration定义此类为配置类,用于构建bean定义并初始化到Spring容器。
  • @ConfigurationProperties(prefix = “com.weiz.resource”)绑定配置项,其中prefix表示所绑定的配置项名的前缀。
  • @PropertySource(value = “classpath:website.properties”)指定读取的配置文件及其路径。@PropertySource不支持引入YML文件。

通过上面的WebSiteProperties类即可读取全部对应的配置项。

在单元测试中,我们测试是否可以通过

@Autowired
    private ResourceConfig config;
    @Test
    void getResourceConfig(){
        System.out.println(config.getName());
        System.out.println(config.getWebsite());
        System.out.println(config.getLanguage());
    }

在这里插入图片描述

  1. 使用YML文件时注意空格和格式缩进。
  2. Properties文件默认使用的是ISO8859-1编码格式,容易出现乱码问题。如果含有中文,加入spring.http.encoding.charset=UTF-8配置即可。
  3. Properties配置的优先级高于YML文件。因为YML文件的加载顺序先于Properties文件,如果两个文件存在相同的配置,后面加载的Properties中的配置会覆盖前面YML中的配置。
  4. @PropertySource注解默认只会加载Properties文件,YML文件不能使用此注解。
  5. 简单值推荐使用@Value,复杂对象推荐使用@ConfigurationProperties。
  6. 只有Spring容器中的组件才能使用容器提供的各类方法,所以,配置读取类需要增加@Component注解才能加入Spring容器中。

到此这篇关于关于springboot中的自定义配置项的文章就介绍到这了,更多相关springboot自定义配置项内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • AndroidQ沙盒机制之分区存储适配

    AndroidQ沙盒机制之分区存储适配

    这篇文章主要介绍了AndroidQ沙盒机制之分区存储适配,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Lombok使用@Tolerate实现冲突兼容问题

    Lombok使用@Tolerate实现冲突兼容问题

    这篇文章主要介绍了Lombok使用@Tolerate实现冲突兼容问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 1小时快速上手RabbitMQ(简介及安装过程)

    1小时快速上手RabbitMQ(简介及安装过程)

    RabbitMQ简称MQ全称是Message Queue(消息队列),是在消息的传输过程中保存消息的容器,多用于分布式系统之间进行通信,本文给大家讲解了RabbitMQ简介与安装,结合实例代码给大家介绍的非常详细,需要的朋友跟随小编一起看看吧
    2023-01-01
  • 快速解决idea @Autowired报红线问题

    快速解决idea @Autowired报红线问题

    这篇文章主要介绍了快速解决idea @Autowired报红线问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • springboot实现在工具类(util)中调用注入service层方法

    springboot实现在工具类(util)中调用注入service层方法

    这篇文章主要介绍了springboot实现在工具类(util)中调用注入service层方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 深入理解注解与自定义注解的一些概念

    深入理解注解与自定义注解的一些概念

    今天给大家带来的文章是注解的相关知识,本文围绕着注解与自定义注解的一些概念展开,文中详细介绍了这些知识,需要的朋友可以参考下
    2021-06-06
  • struts2中常用constant命令配置方法

    struts2中常用constant命令配置方法

    这篇文章主要介绍了struts2中常用constant命令配置方法,需要的朋友可以参考下
    2016-09-09
  • 浅析Java中的WeakHashMap

    浅析Java中的WeakHashMap

    这篇文章主要介绍了浅析Java中的WeakHashMap,WeakHashMap其实和HashMap大多数行为是一样的,只是WeakHashMap不会阻止GC回收key对象,那么WeakHashMap是怎么做到的呢,这就是我们研究的主要问题,需要的朋友可以参考下
    2023-09-09
  • 详解Java策略模式

    详解Java策略模式

    今天给大家带来的是关于Java的相关知识,文章围绕着Java策略模式展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • SpringBoot连接MySql数据库的原理及代码示例

    SpringBoot连接MySql数据库的原理及代码示例

    SpringBoot是一款流行的Java开发框架,它可以轻松地连接各种类型的数据库,包括关系型数据库和非关系型数据库,本文将介绍SpringBoot是如何连接数据库的,包括其原理和代码示例,需要的朋友可以参考下
    2023-07-07

最新评论