springboot之一:配置文件(内外部配置优先顺序+properties、xml、yaml基础语法+profile动态切换配置、激活方式)

这篇具有很好参考价值的文章主要介绍了springboot之一:配置文件(内外部配置优先顺序+properties、xml、yaml基础语法+profile动态切换配置、激活方式)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

配置的概念:

Spring Boot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。

注意配置文件的命名必须是application开头。

优先顺序:

在同一级目录下优先级为:properties > yml > yaml

内部配置优先顺序:

  1. file:../config/ :当前项目下的/config目录下直接放的配置文件

  2. file:../config/xxx/:当前项目下的/config目录下的子路径下放的配置文件

  3. file:../ :当前项目的根目录中的配置文件

  4. classpath:/config/:classpath的/config目录的配置文件

  5. classpath:/ :classpath的根目录的配置文件

java和resources的文件会被打包到classes的目录

properties和yml实际上会被打包到classpath路径下

即优先级顺序如图:

springboot之一:配置文件(内外部配置优先顺序+properties、xml、yaml基础语法+profile动态切换配置、激活方式),springboot入门,spring boot,后端,java,spring

外部配置优先顺序:

https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config

properties、xml、yml格式比对:

properties:

server.port=8080
server.address=127.0.0.1

xml:

<server>
    <port>8080</port>
    <address>127.0.0.1</address>
</server>

yml:

server:
    port:8080
    address:127.0.0.1

Yaml(yml):

  • 大小写有区别
  • 数据前必须有空格(空格数目无所谓)作为分隔符,否则不识别该数据。
  • 缩进的空格数目不重要,但是相同层级的元素要左对齐。
  • 注释的话快捷键也是ctrl+/,是#+空格。
  • 参数引用的话用${}包裹起来即可。

对象(map):键值对的集合

person:
    name: zhangsan

# 行内写法
person: {name: zhangsan}

数组

address:
    - beijing
    - shanghai
# 行内写法

address: [beijing,shanghai]

 纯量:单个的、不可再分的值。一般都是字符串

msg1: 'hello \n world' # 单引忽略转义字符
msg2: "hello \n world" # 双引识别转义字符

读取配置内容:

@Value

application.yml的对象,用到几个,就要注入几个。

application.yml中

server:
  port: 8082

name: abc

Person:
  name: zhangsan
  age: 20

Student:
  name: ${name} # 占位符,表示abc那个name会传输到这里

address:
  - beijing
  - shanghai

msg1: 'hello \n world'  # 不会识别转义字符
msg2: "hello \n world"  # 会识别转义字符

HelloController中

package com.example.springini.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @Value("${name}")
    //和application.yml的键值对的键要同名,与下一行的私有成员名字无关
    private String nname;

    @Value("${Person.name}")
    private String name2;

    @Value("${Person.age}")
    private int age;

    @Value("${Student.name}")
    private String name3;

    @Value("${address[0]}")
    private String addr;

    @Value("${msg1}")
    private String msg11;

    @Value("${msg2}")
    private String msg22;


    @RequestMapping("/hello2")
    public String hello2()
    {
        System.out.println(nname);
        System.out.println(name2);
        System.out.println(name3);
        System.out.println(age);
        return "hello springboot";
    }

    @RequestMapping("/hello")
    public String hello()
    {
        System.out.println(addr);
        System.out.println(msg11);
        System.out.println(msg22);
        return "hello springboot";
    }
}

@Autowired+Environment

将application.yml一次性作为一个对象全都注入。

HelloController中

package com.example.springini.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController_by_environment {
    @Autowired
    private Environment env;

    @RequestMapping("/hello")
    public void hello()
    {
        System.out.println(env.getProperty("name"));
        System.out.println(env.getProperty("Person.name"));
        System.out.println(env.getProperty("address[0]"));
        System.out.println(env.getProperty("msg1"));
        System.out.println(env.getProperty("msg2"));
    }

}

@Autowired+ConfigurationProperties

将配置内容与对象相互绑定。

新建Person类中

package com.example.springini;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component  //表示这个Person类被识别成Bean

@ConfigurationProperties(prefix = "person")
//如果不指定prefix为person,那么它不一定找到配置文件的person底下的两个字段name和age
//而可能去找到单独的两个字段name和age。

public class Person {
    private String name;//命名必须和yml文件中的键值对的键保持一致
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

HelloController中

package com.example.springini.controller;

import com.example.springini.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController_by_ConfigurationProperties {
    @Autowired
    private Person p;

    @RequestMapping("/hello")
    public void hello()
    {
        System.out.println(p.getName()+" : "+p.getAge());
    }

}

profile(动态配置切换):

我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的。

配置方式:

多profile文件方式

  • application-dev.properties/yml  开发环境
  • application-test.properties/yml  测试环境
  • application-pro.properties/yml   生产环境

yml多文档方式

在yml中使用----分隔不同配置

激活方式:

配置文件

在配置文件中配置:spring.profiles.active=dev

虞拟机参数

在VM options指定:-Dspring.profiles.active=dev

命令行参数

java-jar xxx.jar --spring.profiles.active=dev文章来源地址https://www.toymoban.com/news/detail-691325.html

到了这里,关于springboot之一:配置文件(内外部配置优先顺序+properties、xml、yaml基础语法+profile动态切换配置、激活方式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • SpringBoot 配置文件加载优先级

    最近在使用k8s部署项目的时候,发现Dockerfile文件中的命令后面跟的参数,无法覆盖nacos中的参数,今天有时间正好来整理一下Springboot配置的加载顺序 整理加载顺序第一个肯定看官方文档:https://docs.spring.io/spring-boot/docs/2.2.9.RELEASE/reference/htmlsingle/#boot-features-external-config 看不懂我们直

    2024年02月02日
    浏览(30)
  • 10SpringBoot 静态资源访问 11Springboot的默认配置文件和外部配置文件及加载顺序

            做web开发的时候,我们往往会有很多静态资源,如html、图片、css等。那如何向前端返回静态资源呢?        以前做过web开发的同学应该知道,我们以前创建的web工程下面会有一个webapp的目录,我们只要把静态资源放在该目录下就可以直接访问。        但是,基

    2023年04月08日
    浏览(45)
  • Springboot读取外部配置文件,项目部署时配置读取不到问题

    需求: 最近项目部署,但是每个地方都有个别地方配置的差异,我们每次打包后再进行修改极度不方便,这里将有关的配置都抽取出来,放在jar包外进行配置,这样以后更新时只需要将jar包更换然后重启即可,配置读取外部的固定配置文件。 SpringBoot 配置 springboot默认配置的

    2024年02月07日
    浏览(39)
  • Docker 部署SpringBoot项目,使用外部配置文件启动项目

    一、Springboot项目引入配置文件的方式: 二、docker启动SpringBoot项目饮用外部部署文件

    2024年02月09日
    浏览(36)
  • SpringBoot启动过程探究及配置文件优先级解析

    如果项目依赖中存在org.springframework.web.reactive.DispatcherHandler,并且不存在org.springframework.web.servlet.DispatcherServlet,那么应用类型为WebApplicationType.REACTIVE 如果项目依赖中不存在org.springframework.web.reactive.DispatcherHandler,也不存在org.springframework.web.servlet.DispatcherServlet,那么应用类型为

    2024年02月09日
    浏览(34)
  • SpringBoot外部化配置

    Spring Boot允许外部化项目配置,以便您可以在不同的环境中使用相同的应用程序代码。您可以使用各种外部配置源,包括Java属性文件、YAML文件、环境变量和命令行参数。 属性值可以通过使用@Value注释直接注入到bean中,通过Spring的环境抽象进行访问,或者通过@ConfigurationProp

    2024年03月09日
    浏览(49)
  • springboot-配置优先级

    类型 1.properties(三者同时存在,优先级最高) 2.yml 3.yaml(最低) 除此之外,可以在启动配置处修改 在jar包中修改配置属性 1.pom文件需要导入打包的插件 2.使用package命令 3.用打开目录的方式打开 4.在存放jar包的文件夹下打开命令行 5.java -jar jar包名,就能启动springboot项目 6.jav

    2024年02月12日
    浏览(33)
  • SpringBoot项目配置方式及优先级

    说明:SpringBoot支持以下五种方式配置方式,例如将项目的Tomcat端口从8080,更改为9000,可以使用如下方式配置 在启动窗口,鼠标右键,选择“Edit Configurations”,在弹出来的窗口中,在Program arguments,里面填“–server.port=9000”,配置格式为两个小横杠(–)开头 这种方式,可

    2024年02月08日
    浏览(32)
  • SpringBoot配置外部Tomcat项目启动流程源码分析

    SpringBoot应用默认以Jar包方式并且使用内置Servlet容器(默认Tomcat),该种方式虽然简单但是默认不支持JSP并且优化容器比较复杂。故而我们可以使用习惯的外置Tomcat方式并将项目打War包。 ① 同样使用Spring Initializer方式创建项目 ② 打包方式选择\\\"war\\\" ③ 选择添加的模块 ④ 创建的

    2024年02月04日
    浏览(29)
  • nacos配置文件优先级

    当前配置文件如下: 优先级:userservice-dev.yml(当前环境配置) userservice.yml(nacos上的) application.yml(本地的) 扩展配置(extension-configs) 共享配置(shared-configs) 同为扩展配置,存在如下优先级关系:extension-configs[3] extension-configs[2] extension-configs[1] extension-configs[0] 同为共享配置

    2024年02月12日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包