SpringBoot核心配置全面总结

news2025/1/17 21:40:19

 

目录

1、application. properties核心文件

2、 application.yml配置文件(推荐配置风格) 

3、SpringBoot多环境配置

4、SpringBoot自定义配置

1)@Value注解

2) @ConfigurationProperties

5. 远程配置中心(目前生产常用的方式)


Spring Boot的核心配置文件用于配置Spring Boot程序,文件名字必须以application开始。这个既是底层源码的强制要求,也是SpringBoot的一种代码规约,有助于在开发层面利于代码规范管理。

说明:以下内容接着i前面的SpringBootCase项目就行演示。

1、application. properties核心文件

格式:以键值对的方式进行配置,key=value
示例:name=xintu

我们修改application.properties配置文件。比如修改默认tomcat端口号及项目上下文件根。

# 设置内嵌Tomcat端口号
server.port=8888
# 设置项目上下文根路径,这个在请求的时候需要用到
server.servlet.context-path=/springbootcase

配置完毕之后,启动测试。

浏览器输入地址:http://localhost:8888/springbootcase/hello?name=lw , 页面验证结果如下。

 

 

2、 application.yml配置文件(推荐配置风格) 

yml 是一种 yaml 格式的配置文件,主要采用一定的空格、换行等格式排版进行配置。格式如下,

key: 空格+value, 表示一对键值对。

配置YNML时,需要注意以下4点:

1)以空格的缩进来控制层级关系。
2)只要是左对齐的一列数据,都是属于同一层级。
3)空格必须有。
4)属性和值对大小写敏感。 

server:
  port: 8888 # 设置内嵌Tomcat端口号
  servlet:
    context-path: /SpringBootCase # 设置项目上下文根路径,这个在请求访问的时候需要用到

特点:与 application. properties 相比,yaml更能直观地被计算机识别,而且容易被人类阅读。 yaml 类似于 xml,但是语法比xml 简洁很多,值与前面的冒号配置项必须要有一个空格, yml 后缀也可以使用 yaml 后缀。当两种格式配置文件同时存在,使用的是 .properties 配置文件,为了演示yml,可以先将其改名,重新运行SpringbootApplication,查看启动的端口及上下文根。

我们在后面的学习过程中,均使用 .yml格式 。如果想改.properties形式也可以,按照自己喜欢的风格 或 团队约定即可。

3、SpringBoot多环境配置

在实际开发的过程中,我们的项目会经历很多的阶段,开发、测试、上线,  尤其时很大厂,在进行一些重要需求迭代时,还会包括预发、灰度等。每个阶段的配置会因应用所依赖的环境不同而不同,例如:数据库配置、缓存配置、依赖第三方配置等,那么这个时候为了方便配置在不同的环境之间切换,SpringBoot提供了多环境profile配置功能。

命名格式:application-环境标识.yml(或 .properties)。

下面我们为每个环境创建3个配置文件,分别命名为:application-dev.yml(开发环境)、application-dev.yml(测试环境)、application-dev.yml(生产环境)。

 各配置文件内容如下,

1) application-dev.yml

#开发环境
server:
  port: 8881 # 设置内嵌Tomcat端口号
  servlet:
    context-path: /springbootcase1 # 设置项目上下文根路径,这个在请求访问的时候需要用到

2) application-test.yml

#测试环境
server:
  port: 8883 # 设置内嵌Tomcat端口号
  servlet:
    context-path: /springbootcase3 # 设置项目上下文根路径,这个在请求访问的时候需要用到

3) application-prod.yml

#生产环境
server:
  port: 8882 # 设置内嵌Tomcat端口号
  servlet:
    context-path: /springbootcase2 # 设置项目上下文根路径,这个在请求访问的时候需要用到

4)总配置文件application.yml进行环境的激活

spring:
  profiles:
      active: test #激活对应环境配置,以测试环境为例
#server:
#  port: 8888 # 设置内嵌Tomcat端口号
#  servlet:
#    context-path: /springbootcase # 设置项目上下文根路径,这个在请求访问的时候需要用到

说明:除此之外,还可以使用maven编译打包的方式配置profile。通常这种情况比较少见,需要根据各公司环境情况而定。

启动并测试验证如下,

浏览器输入: http://localhost:8883/springbootcase3/hello?name=lw, 结果如下,

 

 

4、SpringBoot自定义配置

在SpringBoot核心配置文件中,除以上使用内置的配置项之外,我们还可以在自定义配置,然后采用注解方式去读取配置。

1)@Value注解

步骤1:在核心配置文件applicatin.yml中,添加两个自定义配置项test.site和test.user。在IDEA中可以看到这两个属性不能被SpringBoot识别,背景是红色的。

 

步骤2:在SpringbootApplication中定义属性,并使用@Value注解或者自定义配置值,并对其方法进行测试 。

package com.xintu.demo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class SpringbootApplication {

	@Value("${test.site}") //获取自定义属性test.site
	private String site;

	@Value("${test.user}")  //获取自定义属性test.user
	private String user;
	public static void main(String[] args) {
		SpringApplication.run(SpringbootApplication.class, args);
	}

	@GetMapping("/hello")
	public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
		return String.format("欢迎 %s 来到<a href=\"http://www.35xintu.com\">35新途</a>!", name);
	}

	@GetMapping("/value")
	public String testValue() { //测试@Value注解
		return String.format("欢迎 %s 来到<a href=\"http://www.35xintu.com\">%s</a>!" , user,site);
	}

}

步骤3: 重新启动后,在浏览器中进行测试验证: http://localhost:8888/springbootcase/value。

 

2) @ConfigurationProperties

将整个文件映射成一个对象,用于自定义配置项比较多的情况。

步骤1:在 com.xintu.demo.config 包下创建 XinTuConfigInfo  类,并为该类加上@Component和@ConfigurationProperties注解,prefix可以不指定,如果不指定,那么会去配置文件中寻找与该类的属性名一致的配置,prefix的作用可以区分同名配置。

package com.xintu.demo.config;

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

@Component
@ConfigurationProperties(prefix = "test")
public class XinTuConfigInfo {
    private String site;
    private String user;

    public String getSite() {
        return site;
    }

    public void setSite(String site) {
        this.site = site;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }
}

步骤2: 在SpringbootApplication中注入XinTuConfigInfo 配置类。

package com.xintu.demo;

import com.xintu.demo.config.XinTuConfigInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class SpringbootApplication {

	@Autowired
	private XinTuConfigInfo configInfo; //测试@ConfigurationProperties

	@Value("${test.site}")
	private String site;

	@Value("${test.user}")
	private String user;
	public static void main(String[] args) {
		SpringApplication.run(SpringbootApplication.class, args);
	}

	@GetMapping("/hello")
	public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
		return String.format("欢迎 %s 来到<a href=\"http://www.35xintu.com\">35新途</a>!", name);
	}

	@GetMapping("/value")
	public String testValue() { //测试 @Value 注解
		return String.format("欢迎 %s 来到<a href=\"http://www.35xintu.com\">%s</a>!" , user,site);
	}

	@GetMapping("/config")
	public String config() { //测试 @ConfigurationProperties 注解
		return String.format("欢迎 %s 来到<a href=\"http://www.35xintu.com\">%s</a>!" , configInfo.getUser(),configInfo.getSite());
	}

}

步骤3:重新启动并在浏览器中进行测试。

 

5. 远程配置中心(目前生产常用的方式)

1)配置中心流程图

 

主要包含两大核心内容:

① 远程配置中心负责属性键值的新增、变更、发布等操作。

② 业务应用端,则通过配置远程配置中心地址获取自己锁需要的配置数据。 另外通过客户端监听的方式,近实时地获取远端配置的修改或删除。

2)开源配置中心对比(按开源时间顺序)

目前市面上用的比较多的配置中心有:Disconf、Spring Cloud Config、Apollo、Nacos。

① Disconf

2014年7月百度开源的配置管理中心,同样具备配置的管理能力,不过目前已经不维护了。

②  Spring Cloud Config

2014年9月开源,Spring Cloud 生态组件,可以和Spring Cloud体系无缝整合。

③ Apollo

2016年5月,携程开源的配置管理中心,具备规范的权限、流程治理等特性。

④ Nacos

2018年6月,阿里开源的配置中心,也可以做DNS和RPC的服务发现。

以上各配置服务在配置管理领域的概念和原理基本相同,但是也存在一些不同的点。另外也有一些内部私有配置中心,比如京东的DUCC,美团的MCC等,设计思路基本大同小异,感兴趣的可以自己深入研究。

以上!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/473993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

http协议(一)/应用层

学习目标&#xff1a;⭐理解应用层的作用&#xff0c;理解协议&#xff0c;理解序列化和反序列化&#xff0c;并且实现网络版计算器⭐HTTP协议。⭐手写一个简单的http协议。 应用层 我们写的一个个解决实际问题, 满足我们日常需求的网络程序, 都是在应用层。 协议/序列化与反…

第三节:支持向量机分类预测

0、介绍 监督学习&#xff08;英语&#xff1a;Supervised learning&#xff09;是机器学习中最为常见、应用最为广泛的分支之一。本次实验将带你了解监督学习中运用十分广泛的支持向量机&#xff0c;并学会使用 scikit-learn 来构建预测模型&#xff0c;用于解决实际问题。 知…

都什么年代了,还在用Excel和ACCESS做应用系统?快来学Eversheet

表格用的越久&#xff0c;就越头疼 稍微有规模的企业&#xff0c;各种表格都会多如牛毛&#xff0c;一堆堆的&#xff0c;有时候这里一张&#xff0c;那里一张&#xff0c;容易整乱&#xff0c;更容易丢失。不管你是用WPS还是用Excel&#xff0c;有些问题你还是依旧解决不了。…

【VM服务管家】VM4.x算法模块开发_4.1 开发配置类

目录 4.1.1 算法开发&#xff1a;算法模块的开发流程4.1.2 参数操作&#xff1a;获取与设置模块参数的方法4.1.3 文件交互&#xff1a;文件交互操作的配置方法4.1.4 输出显示&#xff1a;设置输出并显示在VM界面的方法4.1.5 模板配置&#xff1a;模板配置界面的实现方法4.1.6 命…

中文译英文 模型

Helsinki-NLP/opus-mt-zh-en Hugging FaceWe’re on a journey to advance and democratize artificial intelligence through open source and open science.https://huggingface.co/Helsinki-NLP/opus-mt-zh-en?text%E6%88%91%E5%8F%AB%E6%B2%83%E5%B0%94%E5%A4%AB%E5%86%8…

【Java入门合集】第一章Java概述

【Java入门合集】第一章Java概述 博主&#xff1a;命运之光 专栏&#xff1a;JAVA入门 学习目标 1.理解JVM、JRE、JDK的概念&#xff1b; 2.掌握Java开发环境的搭建,环境变量的配置&#xff1b; 3.掌握Java程序的编写、编译和运行&#xff1b; 4.学会编写第一个Java程序&#x…

Python 科研绘图可视化(后处理)Matplotlib - RGBAxes

Introduction 科研可视化是将数据和信息转化为可视化形式的过程&#xff0c;旨在通过图形化展示数据和信息&#xff0c;使得科研工作者能够更好地理解和分析数据&#xff0c;并从中发现新的知识和洞见。科研可视化可以应用于各种领域&#xff0c;如生物学、物理学、计算机科学…

一文带你入门C++类和对象【十万字详解,一篇足够了】

本文字数较多&#xff0c;建议电脑端访问。不多废话&#xff0c;正文开始 文章目录 ———————————————【类和对象 筑基篇】 ———————————————一、前言二、面向过程与面向对象三、结构体与类1、C中结构体的变化2、C中结构体的具体使用3、结构体 --&…

3.6 Linux shell脚本编程(概念、变量、语句)

目录 shell脚本概述 shell脚本编写步骤 第一个shell脚本文件 shell脚本变量 变量的介绍 变量的作用 变量的命名要求 变量的分类 用户自定义变量 取值 用户自定义变量-数组 只读变量 位置变量与预定义变量 环境变量 shell语句 shell程序 说明性语句&#xff08…

MATLAB连续时间信号的实现和时域基本运算(八)

1、实验目的&#xff1a; 1&#xff09;熟悉常用连续时间信号的实现方法&#xff1b; 2&#xff09;掌握连续时间信号的时域基本运算&#xff1b; 3&#xff09;掌握实现基本函数及其运算的函数的使用方法&#xff1b; 4&#xff09;加深对信号基本运算的理解。 2、实验内容&am…

【VM服务管家】VM4.0平台SDK_2.4 结果获取类

目录 2.4.1 数据结果&#xff1a;通过流程输出或模块输出获取数据结果的方法2.4.2 流程运行&#xff1a;所有流程运行结束的回调方法2.4.3 模块回调&#xff1a;所有模块运行结束的回调方法2.4.4 加密狗回调&#xff1a;获取加密狗状态的回调方法2.4.5 方案加载&#xff1a;方案…

STM32物联网实战开发(4)——基本定时器

我使用的是正点原子的阿波罗F429开发板&#xff0c;他有14个定时器&#xff0c;本次实验使用STM32F429的基本定时器6作定时&#xff0c;在中断中每隔1秒翻转LED电平状态。 1.CubeMX初始化定时器 先开启定时器6 再对定时器6的参数进行配置&#xff0c;将定时器6定时时间配置为…

记一次SSRF漏洞的学习和利用

导语&#xff1a;本文主要记录一次我们在复盘嘶吼网站渗透报告时遇到的一个SSRF漏洞。 1.前言 本文主要记录一次我们在复盘嘶吼网站渗透报告时遇到的一个SSRF漏洞。此漏洞并结合腾讯云的API接口&#xff0c;可以获取大量嘶吼服务器的敏感信息。利用这些敏感信息&#xff0c;又…

阿里测试8年,肝到P8只剩他了····

在阿里工作了8年&#xff0c;工作压力大&#xff0c;节奏快&#xff0c;但是从技术上确实得到了成长&#xff0c;尤其是当你维护与大促相关的系统的时候&#xff0c;熬到P7也费了不少心思&#xff0c;小编也是个爱学习的人&#xff0c;把这几年的工作经验整理成了一份完整的笔记…

玩转ChatGPT提示词 持续更新·······

导语&#xff1a; 众所周知&#xff0c;在AI的世界里&#xff0c;提示词就是和AI沟通语言的桥梁&#xff0c;提示关键词常用于AI对话及AI绘画等相关场景&#xff0c;通过准确的使用关键词&#xff0c;你就能更好的让AI辅助自己的工作&#xff0c;其中的成分重要性不言而喻&…

黑客教程,从零基础入门到精通

学前感言: 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答. 4.遇到实在搞不懂的,可以先放放,以后再来解决. …

c++标准模板(STL)(std::array)(三)

定义于头文件 <array> template< class T, std::size_t N > struct array;(C11 起 std::array 是封装固定大小数组的容器。 此容器是一个聚合类型&#xff0c;其语义等同于保有一个 C 风格数组 T[N] 作为其唯一非静态数据成员的结构体。不同于 C 风格数组…

C#非常实用的技巧

1、解压和压缩 .NET Framework 4.5以上版本&#xff1a; string zipFilePath "C:\path\to\file.zip";string destFolder "C:\path\to\destination\folder";using (var archive ZipFile.OpenRead(zipFilePath)){foreach (var entry in archive.Entries…

【Python】【进阶篇】14、Django创建第一个项目

目录 Django创建第一个项目1. 第一个项目BookStore1) BookStore项目创建 2. Django项目配置文件1) manage.py文件2) __init__.py文件3) settings.py文件4) urls.py文件5) wsgi.py文件 Django创建第一个项目 在上一章中&#xff0c;我们完成了开发环境的搭建工作。 本章我们将学…

网络安全基础入门学习路线

在大多数的思维里总觉得学习网络安全得先收集资料、学习编程、学习计算机基础&#xff0c;这样不是不可以&#xff0c;但是这样学效率太低了&#xff01; 你要知道网络安全是一门技术&#xff0c;任何技术的学习一定是以实践为主的。也就是说很多的理论知识其实是可以在实践中…