返回顶部
首页 > 资讯 > 精选 >SpringBoot如何读取外部配置文件
  • 136
分享到

SpringBoot如何读取外部配置文件

2023-06-29 03:06:40 136人浏览 安东尼
摘要

这篇文章将为大家详细讲解有关SpringBoot如何读取外部配置文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.springBoot配置文件SpringBoot使用一个以application命名的

这篇文章将为大家详细讲解有关SpringBoot如何读取外部配置文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

1.springBoot配置文件

SpringBoot使用一个以application命名的配置文件作为默认的全局配置文件。支持properties后缀结尾的配置文件或者以yml/yaml后缀结尾的YAML的文件配置。

以设置应用端口为例

properties文件示例(application.properties):

server.port=80

YAML文件示例(application.yml):

server:  port: 80

在properties和yml/yaml配置文件同时存在的情况下, 在同一目录下,properties配置优先级 > YAML(YML)配置优先级

2.配置文件目录

SpringBoot配置文件可以放置在多种路径下,不同路径下的配置优先级有所不同。

可放置目录(优先级从高到低)

./config/ (当前项目路径config目录下);./ (当前项目路径下);classpath:/config/ (类路径config目录下);classpath:/ (类路径config下).

优先级由高到底,高优先级的配置会覆盖低优先级的配置;

SpringBoot会从这四个位置全部加载配置文件并互补配置;

我们可以从ConfigFileApplicationListener这类便可看出,其中DEFAULT_SEARCH_LOCATIONS属性设置了加载的目录:

private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/";

接着getSearchLocations方法中去逗号解析成Set,其中内部类Loader负责这一配置文件的加载过程,

包括加载profile指定环境的配置,以application+’-’+name格式的拼接加载。

多种目录配置同时存在情况

接下来还是以端口配置为例

在resources/目录下配置文件设置端口为8888;在resources/config目录下配置文件设置端口为9999;在项目路径下配置文件设置端口为6666;在项目路径config目录下配置文件设置端口为7777;

]

最终运行结果:

Tomcat started on port(s): 7777 (Http) with context path '/beedo'
Started BeedoApplication in 4.544 seconds (JVM running for 5.335)

通过控制变量法得以论证
其优先级由高到底,高优先级的配置会覆盖低优先级的配置

3.自定义配置属性

SpringBoot提供了许多的配置,但通常情况我们需要自定义自己的配置应用自己的系统中,如你需要配置一个默认的用户名密码做为系统的登录用。
首先创建一个实体类,作为配置注入用,并使用@ConfigurationProperties注解进行批量注入, 也可以使用Spring底层注解@Value("${user.username}")的方式一个一个注入达到同意的效果

@Component@ConfigurationProperties(prefix = "user")public class Login{    private String username;    private String passWord;    ...}

或者@Value写法

@Componentpublic class Login{    private String username;    private String password;    ...}

配置文件写法

# yml文件写法user:    username: admin    password: 123# properties写法login.username=adminlogin.password=123

编写一个junit测试用例,看看配置的值是否正常注入:

@RunWith(SpringRunner.class)@SpringBootTestpublic class DeployApplicationTests {    @Autowired    private Login login;    @Test    public void contextLoads() {        System.out.println(login);    }}

从输出结果上看,值已正常注入
Login{username=‘admin’, password=‘123’}

@ConfigurationProperties与@Value两种注解对比

比较项@ConfigurationProperties@Value
全量注入支持不支持
松散绑定(Relaxed Binding)支持不支持
SpEL不支持支持
jsR303支持不支持

松散绑定:驼峰命名(userName)、横干拼接(user-name)、下划线(user_name)之间可以互相识别绑定称为做松散绑定
JSR303:通过@Email,@Nullable,@Digits 等等注解进行邮箱、判空、数字格式等等数据的校验,更多相关内容请参考IBM的中文文档:https://www.ibm.com/developerworks/cn/java/j-lo-jsr303/index.html
@ConfigurationProperties通常用于将配置全量注入某个类中;
@Value通常用于注入某一些特定配置值中;

使用@ConfigurationProperties方式可以进行配置文件与实体字段的自动映射,但需要字段必须提供set方法才可以,而使用@Value注解修饰的字段不需要提供set方法

自定义配置提示

在编写配置时,你会发现自定义配置没有提示,让你在使用自定义配置时变的很麻烦,其实SpringBoot早已为我们准备好了提示的需要,只需要用引入相关依赖即可有提示。
在没有加入依赖时idea会有如下提示:

添加依赖,该idea提示便消失,编写自定义配置时也有相应提示:

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-configuration-processor</artifactId>    <optional>true</optional></dependency>

需要运行一下

4.指定配置文件

通常情况下我们将配置配置在application开头的主配置文件中,这样随着项目的增大配置项的增多会使文件变得非常臃肿,其实SpringBoot早已考虑到了该问题,SpringBoot提供了@PropertySource和@ImportResource两个注解用于加载外部配置文件使用。

  • @PropertySource通常用于属性加载配置文件,注意@PropertySource注解不支持加载yaml文件,支持properties文件。

  • @ImportResource通常用于加载Spring的xml配置文件

@PropertySource使用

装配properties配置文件

在sources/config下创建一个yaml文件命名为user.properties内容与上方user的配置一样

Login类可如下写法

@PropertySource(value = {"classpath:config/user.properties"})@Component@ConfigurationProperties(prefix = "user")public class Login{    private String username;    private String password;    ...}

运行一下,同样能达到加载配置效果

同时加载多个配置问题
细心的你,会发现@PropertySource注解中属性value为一个数组,如果同时加载多个配置文件,并且不同配置文件中对同一个属性设置了不同的值,那么Spring会识别哪一个呢?
带着疑问,我们可以通过控制变量法进行测试,具体过程再在赘述。

@PropertySource(value = {"classpath:config/user1.properties","classpath:config/user2.properties"})

结论:Spring加载顺序为从左到右顺序加载,后加载的会覆盖先加载的属性值。

装配yaml配置文件

如果你有强迫症,一定想加载yaml配置文件,那么可以通过PropertySourcesPlaceholderConfigurer类来加载yaml文件,将原来的user.properties改成user.yaml,Bean配置类中加入如下代码,Login配置类和一开始的方式一致。

@Beanpublic static PropertySourcesPlaceholderConfigurer loadProperties() {    PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();    YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();    //yaml.setResources(new FileSystemResource("classpath:config/user.yml"));//File路径引入    yaml.setResources(new ClassPathResource("config/user.yml"));//class路径引入    configurer.setProperties(yaml.getObject());    return configurer;}

运行一下,仍然可以能达到加载配置效果的

@ImportResource使用

SpringBoot提出零xml的配置,因此SpringBoot默认情况下时不会识别项目中Spring的xml配置文件。为了能够加载xml的配置文件,SpringBoot提供了@ImportResource注解该注解可以加载Spring的xml配置文件,通常加于启动类上。

@ImportResource(value = {"classpath:/beans.xml"})@SpringBootApplication(scanBasePackages = {"team.seagull.client"})public class DeployApplication {    public static void main(String[] args) {        SpringApplication.run(DeployApplication.class, args);    }}

其他问题

idea使用.properties文件出现中文乱码问题?
idea对.properties默认编码为GBK,通常我们项目为UTF-8编码,这样程序在读取时就会出现乱码问题;
解决方法:idea 中 打开如下选项File->Sttings->Editor->FileEncodings

将GBK修改为UTF-8并勾选
Transparent native-to ascill conversion(在运行的时候转换成ascii码)

关于“SpringBoot如何读取外部配置文件”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: SpringBoot如何读取外部配置文件

本文链接: https://lsjlt.com/news/322098.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringBoot如何读取外部配置文件
    这篇文章将为大家详细讲解有关SpringBoot如何读取外部配置文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.SpringBoot配置文件SpringBoot使用一个以application命名的...
    99+
    2023-06-29
  • springboot怎么读取外部配置文件
    Spring Boot可以通过使用@PropertySource注解来读取外部配置文件。以下是一种常见的方法:1. 创建一个配置类,...
    99+
    2023-09-25
    springboot
  • SpringBoot读取外部配置文件的方法
    1.SpringBoot配置文件 SpringBoot使用一个以application命名的配置文件作为默认的全局配置文件。支持properties后缀结尾的配置文件或者以yml/y...
    99+
    2024-04-02
  • springboot怎么读取外部文件
    Spring Boot提供了多种方式来读取外部文件,以下是其中几种常用的方式:1. 使用`@Value`注解:可以直接在代码中使用`...
    99+
    2023-09-28
    springboot
  • SpringBoot yml配置文件如何读取
    本篇内容主要讲解“SpringBoot yml配置文件如何读取”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot yml配置文件如何读取”吧!yaml介绍YA...
    99+
    2023-07-04
  • tomcat怎么读取外部配置文件
    Tomcat可以通过以下几种方式读取外部配置文件:1. 使用`context.xml`文件:可以在Tomcat的`conf/Cata...
    99+
    2023-09-28
    tomcat
  • springboot 运行 jar 包读取外部配置文件的问题
    案例:本文主要描述linux系统执行jar包读取jar包同级目录的外部配置文件 方法一:相对路径设置配置文件 (1)在jar包同级目录创建配置文件conf.properties并写入...
    99+
    2024-04-02
  • springboot如何引入外部yml配置文件
    目录springboot引入外部yml配置文件springboot引入多个yml1. 项目内部配置文件2. 外部配置加载顺序springboot引入外部yml配置文件 当需要在spr...
    99+
    2024-04-02
  • springboot怎么读取配置文件
    在Spring Boot中,可以通过`@Value`注解、`Environment`接口、`@ConfigurationProper...
    99+
    2023-10-25
    springboot
  • java springboot中如何读取配置文件的属性
    目录配置文件(1)使用注解@Value映射(2)使用@ConfigurationProperties映射(3)推荐使用:极简方式 @Bean和@ConfigurationProper...
    99+
    2024-04-02
  • SpringBoot外部化如何配置
    这篇文章主要介绍了SpringBoot外部化如何配置的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot外部化如何配置文章都会有所收获,下面我们一起来看看吧。SpringBoot外部化配置(基于2...
    99+
    2023-07-05
  • 如何读取Flex配置文件
    这篇文章主要介绍了如何读取Flex配置文件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Flex在运行时如何读取Flex配置文件Flex简介AdobeFlex是为满足希望开发...
    99+
    2023-06-17
  • java如何读取配置文件
    Java中可以使用java.util.Properties类来读取配置文件。Properties类提供了一些方法来读取和操作属性文件...
    99+
    2023-08-08
    java
  • thinkphp5如何读取配置文件
    本篇内容介绍了“thinkphp5如何读取配置文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在使用ThinkPHP5框架时,我们通常需要...
    99+
    2023-07-05
  • Flex如何动态读取外部XML文件
    这篇文章将为大家详细讲解有关Flex如何动态读取外部XML文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Flex动态读取外部xml文件在Flex中xml文件是使用频率非常高的,因为在Flex中xml文...
    99+
    2023-06-17
  • springboot加载外部配置文件(properties、yml)
    1.前言 通过PropertySourceLoader接口的实现类配合监听器实现加载外部的配置文件,加载properties文件使用PropertiesPropertySourceLoader,加载yml文件使用YamlPropertySo...
    99+
    2023-09-03
    spring boot java 后端
  • 在SpringBoot下如何读取自定义properties配置文件
    这篇文章将为大家详细讲解有关在SpringBoot下如何读取自定义properties配置文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。SpringBoot工程默认读取application.prop...
    99+
    2023-05-30
    spring boot properties
  • SpringBoot 如何从配置文件读取值到对象中
    目录一、实现方式@ConfigurationProperties 注解@Valid注解二、两者区别三、代码演示四、@PropertySource 读取指定配置文件五、@ImportR...
    99+
    2024-04-02
  • springboot如何读取配置文件到静态工具类
    目录springboot读取配置文件到静态工具类我们可以用Environment 来解决将配置文件的值加载到工具类的静态变量中(多环境运行加载)首先创建一个SpringBoot项目创...
    99+
    2024-04-02
  • springboot读取nacos配置文件的实现
    目录首先,Nacos 的配置文件如下 第一种方式来解析第二种方式来解析SpringBoot 注册服务到 Nacos 上,由 Nacos 来做服务的管理。在 Nacos的配置...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作