SpringBoot概述SpringBoot基础配置yml的使用多环境启动

news2025/1/24 17:47:20

在这里插入图片描述

🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
c语言
数据结构
javaEE
操作系统

石可破也,而不可夺坚;丹可磨也,而不可夺赤。


SpringBoot简介

  • 一、 SpringBoot概述
    • 1.1 起步依赖
    • 1.2 辅助功能
    • 1.3 SpringBoot程序启动
  • 二、 SpringBoot基础配置
    • 2.1 配置文件格式
      • 2.1.1 自动提示功能消失解决方案
    • 2.2 yaml
      • 2.2.1 yaml语法规则
      • 2.2.2 yaml数据读取方式
        • 2.2.2.1 使用`@Value`读取单个数据,属性名引用方式:${一级属性名.二级属性名......}
        • 2.2.2.2 封装全部数据到`Environment`对象
        • 2.2.2.3 自定义对象封装指定数据
        • 2.2.2.4 自定义对象封装指定数据警告解决方案
    • 2.3 多环境启动
      • 2.3.1 yml文件多环境启动方式
      • 2.3.2 application.properties文件多环境启动
      • 2.3.3 多环境命令行启动参数设置
      • 2.3.3 多环境开发兼容问题(Maven与boot)
    • 2.4配置文件分类

一、 SpringBoot概述

1.1 起步依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.14</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>springboot_quick_start</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot_quick_start</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

  • 根据spring-boot-starter-web可以得到它对应的配置:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.7.14</version>
  </parent>
  <artifactId>spring-boot-starter-parent</artifactId>
  <packaging>pom</packaging>
</project>
  • 这个配置类又继承了dependencies
      1. 各种properties信息:
 <properties>
     <activemq.version>5.16.6</activemq.version>
 ...
</properties>
    • 2.各种依赖管理:
<dependencies>
<dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-amqp</artifactId>
        <version>${activemq.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-blueprint</artifactId>
        <version>${activemq.version}</version>
      </dependency>
      ...
</dependencies>
  • starter
    • SpringBoot中常见项目名称,定义了当前项目使用的所有项目目标,已达到减少依赖配置的目的
  • parent
    • 所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的
    • spring-boot-starter-parent(2.5.0)与spring-boot-starter-parent(2.4.6)共计57处坐标版本不同
  • 实际开发
    • 使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供
    • 如发生坐标错误,再指定version(要小心版本冲突)

1.2 辅助功能

  • 内置服务器,根据spring-boot-starter-web依赖,可以内置一个tomcat服务器
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 内置了tomcat服务器
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <version>2.7.14</version>
      <scope>compile</scope>
</dependency>

1.3 SpringBoot程序启动

  • 启动方式
@SpringBootApplication
public class SpringbootQuickStartApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootQuickStartApplication.class, args);
    }
}
  • SpringBoot在创建项目时,采用jar的打包方式
  • SpringBoot的引导类是项目的入口,运行main方法就可以启动项目
  • 将tomcat服务器换为jetty服务器:
  • 在原有的服务器启动类下使用exclusion排除掉Tomcat依赖:
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
     <exclusions>
         <exclusion>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-tomcat</artifactId>
         </exclusion>
     </exclusions>
</dependency>
  • 添加Jetty服务器的依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
  • 启动SpringBoot项目

在这里插入图片描述


  • Jetty比Tomcat更轻量级,可扩展性更强(相较于Tomcat),谷歌应用引擎(GAE)已经全面切换为Jetty

二、 SpringBoot基础配置

2.1 配置文件格式

  • SpringBoot提供了多种属性配置方式(选用不同的配置文件)
  • 配置文件名必须是application开头的,否则可能不生效
    • application.properties
server.port=80
    • application.yml
server:
  port: 81
    • application.yaml
server:
  port: 82

注意:port:后一定要加空格

  • 当这三个配置文件都配置时,默认使用顺序是application.properties优先级最高,其次是application.yml,最低优先级是application.yaml,一般写项目时用的配置文件是application.yml

2.1.1 自动提示功能消失解决方案

在使用以.yml.yaml为后缀名的配置文件时,可能会出现自动提示功能消失的问题
解决步骤如下:


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


2.2 yaml

  • YAML (YAML Ain’t Markup Language),一种数据序列化格式
  • 优点:
    • 容易阅读
    • 容易与脚本语言交互
    • 以数据为核心,重数据轻格式
  • YAML文件扩展名
    • .yml(主流)
    • .yaml

2.2.1 yaml语法规则

  • 大小写敏感
  • 属性层级关系使用多行描述,每行结尾使用冒号结束
  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
  • 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
  • #表示注释

2.2.2 yaml数据读取方式

2.2.2.1 使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名…}

lesson: SpringBoot

server:
  port: 80

books:
  name:
  subject:
    - Java
    - 操作系统
    - 网络
@RestController
@RequestMapping("/books")
public class BookController {

    @Value("${lesson}")
    private String lesson;

    @Value("${books.subject[0]}")
    private String subject_0;
}

2.2.2.2 封装全部数据到Environment对象

@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    private Environment environment;

    @Autowired
    private Books books;
    @GetMapping("/{id}")
    public String getById(@PathVariable Integer id) {
        System.out.println(lesson);
        System.out.println(subject_0);
        System.out.println(environment.getProperty("lesson"));
        System.out.println(environment.getProperty("books"));
        System.out.println(books);
        return "hello,spring boot!";
    }
}

2.2.2.3 自定义对象封装指定数据

@Component
@ConfigurationProperties(prefix = "books")
public class Books {
    private String name;
    private String[] subject[];
}

2.2.2.4 自定义对象封装指定数据警告解决方案

在使用自定义对象封装指定数据时,可能会遇到警告信息:


在这里插入图片描述


  • 在pom.xml文件中添加如下依赖即可:
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-configuration-processor</artifactId>
     <optional>true</optional>
</dependency>

2.3 多环境启动

2.3.1 yml文件多环境启动方式

# 设置启用的环境
spring:
  profiles:
    active: pro
---
# 开发
spring:
  profiles: dev
server:
  port: 80
---
# 生产
spring:
  profiles: pro
server:
  port: 81
---
# 测试
spring:
  profiles: test
server:
  port: 82

2.3.2 application.properties文件多环境启动

    • 主启动配置文件application.properties
      • spring.profiles.active=dev
    • 环境分类配置文件application-dev.properties
      • server.port=8080
    • 环境分类配置文件application-pro.properties
    • server.port=8081
    • 环境分类配置文件application-test.properties
    • server.port=8082

2.3.3 多环境命令行启动参数设置

  • 带参数启动SpringBoot
java -jar springboot.jar --spring.profiles.active=test
  • 可通过命令行修改参数
  • 修改端口:
java -jar springboot.jar --spring.profiles.active=test --server.port=88
  • 参数加载优先级顺序(从上到下优先级递增)
  • 可参考官网https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config

在这里插入图片描述


2.3.3 多环境开发兼容问题(Maven与boot)

  • Maven中设置多环境属性
    <!--开发环境-->
    <profiles>
        <profile>
            <id>dev</id>
            <properties>
            <prfile.active>dev</prfile.active>
            </properties>
        </profile>
        <!--生产环境-->
        <profile>
            <id>pro</id>
            <properties>
                <prfile.active>pro</prfile.active>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <!--测试环境-->
        <profile>
            <id>test</id>
            <properties>
                <prfile.active>test</prfile.active>
            </properties>
        </profile>
    </profiles>
  • SpringBoot中引用Maven属性
# 设置启用的环境
spring:
  profiles:
    active: ${prfile.active}

---
# 开发
spring:
  profiles: dev
server:
  port: 80
---
# 生产
spring:
  profiles: pro
server:
  port: 81
---
# 测试
spring:
  profiles: test
server:
  port: 82
  • Maven指令执行完毕后,生成了对应的包,其中类参与编译,但是配置文件并没有编译,而是复制到包中
  • 解决思路:对于源码中非java类的操作要求加载Maven对应的属性,解析${}占位符
<build>
      <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <useDefaultDelimiters>true</useDefaultDelimiters>
                </configuration>
            </plugin>
        </plugins>
    </build>

2.4配置文件分类

  • SpringBoot中4级配置文件
    • 1级:file:config/appication.yml(最高)
    • 2级:file:application.yml
    • 3级:classpath:config/application.yml
    • 4级:classpath:application.yml (最低)
  • 作用:
    • 1级与2级留做系统打包后设置通用属性
    • 3级与4级用于系统开发阶段设置统用属性

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

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

相关文章

【项目】瑞吉外卖 - 项目开发Day1:开发环境搭建

目录 1、搭建Maven项目 step1&#xff1a;右键New新建一个Module step2&#xff1a;导入SpringBoot配置文件application.yml&#xff0c;设置pom.xml文件中的依赖 &#xff08;1&#xff09;pom.xml代码 &#xff08;2&#xff09;application.yml代码 step3&#xff1…

06-Numpy基础-线性代数

线性代数&#xff08;如矩阵乘法、矩阵分解、行列式以及其他方阵数学等&#xff09;是任何数组库的重要组成部分。 NumPy提供了一个用于矩阵乘法的dot函数&#xff08;既是一个数组方法也是numpy命名空间中的一个函数&#xff09; x.dot(y)等价于np.dot(x, y) 符&#xff08;…

c++,标准库std中全局函数 _Destroy_in_place(...)的分析

&#xff08;1&#xff09;该函数的定义和位置如下&#xff1a; 可见&#xff0c;传入形参为某种类型的引用&#xff0c;该函数会执行形参的析构函数&#xff0c;还可以有效解决数组的连续析构。很强大的函数。 &#xff08;2&#xff09;疑问是&#xff0c;若形参是指针类型…

房屋结构健康监测,科技助力让建筑更安全

房屋建筑是人们赖以生存的场所&#xff0c;然而当前我国许多房屋已经达到了使用寿命的中期&#xff0c;房屋的安全系数逐年降低&#xff0c;风险也随着时间的推移而累积。长期以来&#xff0c;我国的房屋普遍存在寿命短、隐患多的问题&#xff0c;“重建设&#xff0c;轻管理”…

34、springboot切换内嵌Web服务器(Tomcat服务器)与 生成SSL证书来把项目访路径从 HTTP 配置成 HTTPS

知识点1&#xff1a;springboot切换内嵌Web服务器&#xff08;Tomcat服务器&#xff09; 知识点2&#xff1a;生成SSL证书来把项目访路径从 HTTP 配置成 HTTPS ★ Spring Boot默认的Web服务器&#xff08;Tomcat&#xff09; ▲ 基于Servlet的应用&#xff08;使用Spring MV…

【Unity学习笔记】DOTween(1)基础介绍

本文中大部分内容学习来自DOTween官方文档 文章目录 什么是DOTween&#xff1f;DOSetOnTweenerSequenceTweenNested tween 初始化使用方式 什么是DOTween&#xff1f; DOTween是一个动画插件&#xff0c;Tween是补间的意思。这个插件以下简称DOT&#xff0c;DOT很方便使用&…

Shell 编程快速入门 之 字符串

目录 字符串 String 字符串定义 单引号字符串 双引号字符串 反引号字符串 字符串拼接 字符串长度 字符串比较 与-eq的区别 子字符串 字符串切片 “切片步长” 遍历字符串 翻转字符串 用反向遍历来实现 调用外部命令rev实现 替换与删除字符 替换字符 删除字符…

Vue2向Vue3过度核心技术快速入门

目录 1 为什么要学习Vue2 什么是Vue1.1 什么是构建用户界面1.2 什么是渐进式1.3 什么是框架总结&#xff1a;什么是Vue&#xff1f; 3 创建Vue实例4 插值表达式 {{}}4.1 作用&#xff1a;利用表达式进行插值&#xff0c;渲染到页面中4.2 语法4.3 错误用法4.4 总结 5 响应式特性…

Kali Linux 2023.3 发布

Offective Security 发布了 Kali Linux 2023.3&#xff0c;这是其渗透测试和数字取证平台的最新版本。 Kali Linux 2023.3 中的新工具 除了对当前工具的更新之外&#xff0c;新版本的 Kali 通常还会引入新的工具。 这次&#xff0c;他们是&#xff1a; Calico – 云原生网络…

【CSS 画个梯形】

使用clip-path: polygon画梯形 clip-path: polygon使用方式如下&#xff1a; 效果实现 clip-path: polygon 是CSS的属性之一&#xff0c;用于裁剪元素的形状。它可以通过定义一个具有多边形顶点坐标的值来创建一个多边形的裁剪区域&#xff0c;从而实现元素的非矩形裁剪效果。…

安卓系列机型永久去除data分区加密 详细步骤解析

安卓机型玩机搞机刷写第三方twrp存储出现乱码 存储不显示等情况都是没有解密data分区的原因。用户需要在twrp里格式化data分区重启后存储显示正常。那么这个操作后你的数据分区就会呗彻底清除。 今天主要解析下如何操作可以永久解密data分区。其实data分区加密原则上也是厂商为…

Git基础——基本的 Git本地操作

本文涵盖了你在使用Git的绝大多数时间里会用到的所有基础命令。学完之后&#xff0c;你应该能够配置并初始化Git仓库、开始或停止跟踪文件、暂存或者提交更改。我们也会讲授如何让Git忽略某些文件和文件模式&#xff0c;如何简单快速地撤销错误操作&#xff0c;如何浏览项目版本…

系统学习Linux-keepalived

目录 keepalived双机热备 keepalivedlvs&#xff08;DR&#xff09; 1.实验环境 先配置主调度器 web节点配置 keepalived双机热备 web服务器安装nginx和keepalived 配置好这些可以进行漂移了 复制keepalived.conf 进行修改web1为主web2为从优先级设置好 #we…

WPF网格拖动自动布局效果

WPF网格拖动自动布局效果 使用Canvas和鼠标相关事件实现如下的效果: XAML代码: <Window x:Class="CanvasTest.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:

WebGL 缓冲区对象介绍,创建并使用缓冲区,使用缓冲区对象向顶点着色器传入多个顶点数据的所有步骤

目录 使用缓冲区对象 使用缓冲区对象向顶点着色器传入多个顶点的数据&#xff0c;需要遵循以下五个步骤。 创建缓冲区对象&#xff08;gl.createBuffer&#xff08;&#xff09;&#xff09; gl.createBuffer&#xff08;&#xff09;的函数规范 gl.deleteBuffer &#…

[管理与领导-46]:IT基层管理者 - 8项核心技能 - 1 - 目标管理

目录 前言&#xff1a; 一、什么是目标管理 二、管理目标的维度 2.1 个人目标维度 2.2 绩效评估的维度 三、目标的分解 四、目标制定的SMART原则 五、目标管理的误解 六、目标管理的注意事项 七、目标无法实现的因素 前言&#xff1a; 管理者存在的价值就是制定目标…

React Diff算法

文章目录 React Diff算法一、它的作用是什么&#xff1f;二、React的Diff算法1.了解一下什么是调和&#xff1f;2.react的diff算法3.React Diff的三大策略4.tree diff&#xff1a;1、如果DOM节点出现了跨层级操作&#xff0c;Diff会怎么办? 5. component diff&#xff1a;6. e…

maven工程的目录结构

https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html maven工程的目录结构&#xff1a; 在maven工程的根目录下面&#xff0c;是pom.xml文件。此外&#xff0c;还有README.txt、LICENSE.txt等文本文件&#xff0c;便于用户能够…

Jenkins 详细安装流程及填坑记录「图文」

目录 一、前言 二、环境准备 三、安装步骤 1、安装jdk 2、安装jenkins 3、配置修改 4、jenkins启动 四、登录jenkins 一、前言 省流&#xff1a;本文仅记录Jenkins详细安装过程&#xff0c;以及安装过程中经常遇到的问题。 二、环境准备 Linux系统&#xff1a;CentOS…

spdlog输出日志等级控制由set_level运行时和#define SPDLOG_ACTIVE_LEVEL编译时共同控制

spdlog输出日志等级控制由set_level运行时和#define SPDLOG_ACTIVE_LEVEL编译时共同控制 common.h中 spdlog.h中 控制log活跃级别是INFO