spring boot 配置文件和属性注入

这篇具有很好参考价值的文章主要介绍了spring boot 配置文件和属性注入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

配置文件

位置和路径

当我们创建一个 Spring Boot 工程时,默认 resources 目录下就有一个 application.properties 文件,可以在 application.properties 文件中进行项目配置,但是这个文件并非唯一的配置文件,在 Spring Boot 中,一共有 4 个地方可以存放 application.properties 文件。按照下面的顺序,四个配置文件的优先级依次降低

  1. 当前项目根目录下的 config 目录下: config/application.properties
  2. 当前项目的根目录下:application.properties
  3. resources 目录下的 config 目录下:src/main/resources/config/application.properties
  4. resources 目录下 src/main/resources/application.properties 推荐

这四个位置是默认位置,即 Spring Boot 启动,默认会从这四个位置按顺序去查找相关属性并加载。
yaml作为配置文件和properties是一致的。

自定义配置文件

  • spring.config.name
    指定配置文件名,默认的配置文件名是application,可以使用spring.config.name指定自定义文件名,如下示例:

    java -jar myproject.jar --spring.config.name=myproject
    
  • spring.profiles.active
    激活指定的配置文件application-{profile}.properties,指定的配置文件要存放在和application.properties相同的目录
    系统默认加载application-[default].properties配置文件;使用逗号分隔多个profile配置文件;在application配置文件中可以指定待激活的配置文件,示例:

    # 系统会按照顺序加载application-dev.properties、application-test.properties配置文件,后面的配置文件会覆盖前面同名属性配置;
    spring.profiles.active=dev,test
    
  • spring.config.location
    通过 spring.config.location属性来手动的指定配置文件位置,指定完成后,系统就会自动去指定目录下查找application.properties 文件。

    • 多个配置使用逗号分隔
    • 如果指定的是目录要用/结尾
    # 系统就会自动去指定目录下查找`application.properties`或`application.yml`文件,注意路径以 / 结尾
    java -jar properties-0.0.1-SNAPSHOT.jar --spring.config.location=classpath:/xingmu/
    # 如果指定多个配置文件,注意以逗号分割
    

    要特别注意的是,该命令指定的配置文件会使项目默认的application.propertiesapplication.yml文件失效,换句话说该命令会用指定的配置文件替换application.propertiesapplication.yml文件。

  • spring.config.additional-location
    该命令用于追加配置文件。原有的application.properties或application.yml文件均有效。用于和原有配置进行合并

    # 系统就会自动去指定目录下查找`application.properties`或`application.yml`文件,注意路径以 / 结尾
    java -jar properties-0.0.1-SNAPSHOT.jar --spring.config.additional-location=classpath:/xingmu/
    
  • spring.profiles.include

    spring.profiles.active和spring.profiles.include的使用与区别

    指定包含哪些特定配置文件,spring.profiles.active用来指定激活指定的配置文件,而spring.profiles.include可以用来指定激活配置文件还包含哪些配置文件;如:默认配置文件application.properties

    server.port=8003
    # test、prod、publish
    spring.profiles.active=dev
    

    被激活的配置文件是application-dev.properties:

    spring.profiles.include=devDb,devRedis
    

    可以用来指定不同环境之间的切换及不同种类配置的加载。

属性注入

在 resources 下面新建一个 book.properties 文件,内容如下:

book.name=三国演义
book.author=罗贯中
book.id=1
book.tags=小说,演义,历史

项目启动并不会自动的加载 book.properties 该配置文件,如果是在 XML 配置中,可以通过如下方式引用该 properties 文件:


<context:property-placeholder location="classpath:book.properties"/>

在 Java 配置中,可以通过 @PropertySource 来引入配置,这样,当项目启动时,就会自动加载 book.properties 文件。这只是 Spring
中属性注入的一个简单用法,和 Spring Boot 没有任何关系。
@PropertySource默认默认情况下仅仅支持加载外部的、后缀为:properties配置文件,不支持yml、yaml文件。

注意: 在 application.properties 文件中定义属性:按照传统的方式(Spring中的方式),可以直接通过 @Value 注解将这些属性注入到Book 对象中:
注意: Book 对象本身也要交给 Spring 容器去管理,如果 Book 没有交给 Spring 容器,那么 Book 中的属性也无法从 Spring 容器中获取到值。

// classpath:后面不能带有空格
@Component
@PropertySource("classpath:book.properties")
public class Book {
    @Value("${book.id}")
    private Long id;
    @Value("${book.name}")
    private String name;
    @Value("${book.author}")
    private String author;
    @Value("${book.tags}")
    private String[] tags;
    //省略getter/setter
}

Spring Boot 引入了类型安全的属性注入,如果采用 Spring 中的配置方式,当配置的属性非常多的时候,工作量就很大了,而且容易出错。使用类型安全的属性注入,可以有效的解决这个问题。
示例代码如下:


@Component
@PropertySource("classpath:book.properties")
@ConfigurationProperties(prefix = "book")
public class Book {
    private Long id;
    private String name;
    private String author;
    private String[] tags;
    //省略getter/setter
}

添加yaml文件的支持

新建YamlSourceFactory 实现PropertySourceFactory 接口。

import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.core.env.PropertiesPropertySource;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertySourceFactory;
import org.springframework.lang.Nullable;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

public class YamlSourceFactory implements PropertySourceFactory {
    @Override
    public PropertySource<?> createPropertySource(@Nullable String name, EncodedResource resource) throws IOException {
        Properties propertiesFromYaml = loadYamlIntoProperties(resource);
        String sourceName = name != null ? name : resource.getResource().getFilename();
        return new PropertiesPropertySource(sourceName, propertiesFromYaml);
    }

    private Properties loadYamlIntoProperties(EncodedResource resource) throws FileNotFoundException {
        try {
            YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
            factory.setResources(resource.getResource());
            factory.afterPropertiesSet();
            return factory.getObject();
        } catch (IllegalStateException e) {
            // for ignoreResourceNotFound
            Throwable cause = e.getCause();
            if (cause instanceof FileNotFoundException) {
                throw (FileNotFoundException) e.getCause();
            }
            throw e;
        }
    }

}

使用文章来源地址https://www.toymoban.com/news/detail-627870.html


@Component
@PropertySource(value = "classpath:book.yml", factory = YamlSourceFactory.class)
@ConfigurationProperties(prefix = "book")
public class Book {
    private Long id;
    private String name;
    private String author;
    private String[] tags;
    //省略getter/setter
}

到了这里,关于spring boot 配置文件和属性注入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring依赖注入之setter注入与构造器注入以及applicationContext.xml配置文件特殊值处理

    依赖注入之setter注入 在管理bean对象的组件的时候同时给他赋值,就是setter注入,通过setter注入,可以将某些依赖项标记为可选的,因为它们不是在构造对象时立即需要的。这种方式可以减少构造函数的参数数量,使得类的构造函数更加简洁。 注:既然是setter注入,则对象的

    2024年01月25日
    浏览(46)
  • Spring —— Spring Boot 配置文件

    JavaEE传送门 JavaEE Spring —— Bean 作用域和生命周期 Spring —— Spring Boot 创建和使用 如果没有配置信息, Spring Boot 项目就不能连接和此操作数据库, 甚至是不能保存可以用于排查问题的关键日志, 配置文件的作用是非常重要的. 系统使用的配置文件 (系统配置文件), 如端口号的配

    2023年04月09日
    浏览(38)
  • Spring Boot配置文件

    日升时奋斗,日落时自省  目录 1、配置文件作用 2、配置文件格式 2.1、使用注意 3、properties配置文件 3.1、注释中文问题 3.2、properties语法格式 3.3、读取配置文件 3.3.1、Value读取 3.3.2、PropertySource读取 3.3.3、原生方式读取配置文件 3.4、properties缺点分析 4、yml配置文件 4.1、优点

    2024年02月01日
    浏览(37)
  • 【Spring Boot学习一】创建项目 && Spring Boot的配置文件

    目录 一、安装插件 二、创建Spring Boot项目 1、创建项目 1.1 使用IDEA创建  1.2 网页版本创建 2、项目目录介绍与运行 三、Sping Boot的配置文件(重点) 🌷1、.properties配置文件 (1)基础语法:Key = value (2)读取配置⽂件中的内容,@Value 注解使⽤“${}”的格式读取; 🌷2、.y

    2024年02月16日
    浏览(40)
  • Spring Boot的配置文件

    Spring Boot中的配置文件有两种:properties格式和yml格式 一、propertise格式 propertise格式是Springboot默认的配置文件的格式,它才有键值对key=value的方式存储配置信息,有系统key值和自定义key值两类。 系统key值就是Spring boot约定的一些key值,通过设置这些key对应的value值可以配置对应

    2024年02月09日
    浏览(51)
  • Spring Boot读取配置文件

    Spring Boot 是一种用于快速构建基于Spring的应用程序的框架,它提供了很多便利的功能和约定,使开发者可以快速搭建、配置和部署应用程序。在Spring Boot中,读取配置文件是一个非常常见的任务,本文将介绍如何在Spring Boot应用程序中读取配置文件,并使用读取到的配置信息。

    2024年02月07日
    浏览(48)
  • Spring Boot 配置文件和日志

    目录 配置文件格式 properties配置文件说明 1.properties基本语法 2.读取配置文件 3.properties缺点 yml配置文件说明 1.yml基本语法 2.配置不同数据类型 3.字符串特殊情况 4.配置对象 properties和yml对比 日志 日志的使用 日志级别 日志持久化 Lombok Lombok原理解释 Spring中配置文件有很重要的

    2024年01月19日
    浏览(57)
  • Spring Boot配置保存日志文件

    springboot日志配置: springboot默认日志是打印再console中的,不会保存在文件中。我们项目上线肯定要保存日志用于分析的。 一、使用xml配置日志保存(并不需要pom配置slf4j依赖,starter里面已经配置了依赖了) 1、在项目的resources目录下创建一个【logback-spring.xml】日志配置文件

    2024年02月11日
    浏览(43)
  • 【JavaEE】Spring Boot - 配置文件

    【JavaEE】Spring Boot 开发要点总结(2) 所有重要和必要的数据都是在配置文件中配置的 简洁明了,干净利落,修改方便,相比于xml,更有代码的感觉,功能用处也更多更被重视 例如: 数据库的连接时的需要的信息配置(用户名,url,密码) 项目的启动端口是什么(server.po

    2024年02月14日
    浏览(38)
  • Spring Boot 系列2 -- 配置文件

    目录 1. 配置文件的作用 2. 配置文件的格式 3. properties 配置文件说明 3.1 properties 基本语法 3.2 读取配置文件 3.3 properties 缺点 4.yml 配置文件说明 4.1 yml 基本语法 4.2 yml 使用进阶 4.2.1 yml 配置不同数据类型及 null 4.2.2 yml 配置读取 4.2.3 注意事项:value 值加单双引号 4.2.4 配置对象

    2024年02月15日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包