SpringBoot(三)环境隔离/外部化配置/单元测试/可观测性/生命周期

目录

[一 环境隔离](#一 环境隔离)

[1 定义环境:dev(开发)test(测试)prod(生产)](#1 定义环境:dev(开发)test(测试)prod(生产))

[2 定义环境下生效:](#2 定义环境下生效:)

[3 激活指定环境:](#3 激活指定环境:)

[4 profile分组](#4 profile分组)

[二 外部化配置](#二 外部化配置)

[三 单元测试](#三 单元测试)

[四 可观测性](#四 可观测性)

[五 生命周期](#五 生命周期)


一 环境隔离

在Spring框架中,环境隔离(Environment Isolation)是指通过配置和代码管理不同运行环境(如开发、测试、生产)的差异,确保应用在不同环境下能够无缝切换且互不干扰。以下是Spring中实现环境隔离的核心机制及实践方式

1 定义环境:dev(开发)test(测试)prod(生产)

2 定义环境下生效:

  • 1 组件的生效:组件加上@Profile("dev")
  • 2 生效哪些配置:application-{环境标识}.properties

3 激活指定环境:

  • 1 配置文件中指定
XML 复制代码
#激活配置
spring.profiles.active=dev
  • 2 命令行激活

java -jar xxx.jar --spring.properties.active=dev

4 profile分组

XML 复制代码
#分组激活
spring.profiles.group.hhhh[0]=dev
spring.profiles.group.hhhh[1]=test
spring.profiles.group.hhhh[2]=prod

spring.profiles.active=hhhh

二 外部化配置

外部化配置(Externalized Configuration)是一种将应用程序的配置信息从代码中分离出来,存储在代码之外的位置的设计模式。其核心目的是提高应用的灵活性、安全性和可维护性,使配置能够在不同环境(如开发、测试、生产)中无缝切换,而无需修改或重新编译代码

++激活优先,外部优先。两个一人占一个激活优先。++

三 单元测试

相关注解

断言机制

断言机制是编程中用于验证程序在运行时的某些条件是否满足的一种调试和测试工具。其核心思想是:在代码中插入检查点,若条件为假(False),则抛出错误或终止程序,从而帮助开发者快速定位逻辑错误。

举例说明:

java 复制代码
package org.example.springmvc;

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@Slf4j
@SpringBootTest
public class UnitTest {
    @DisplayName("测试1")
    @Test
    public void test01() {
        String str = "Hello World";
        Assertions.assertEquals("HelloWorld!", str, "测试失败");
    }
}

四 可观测性

Spring Boot 的可观测性(Observability)是指通过收集和分析应用的运行时数据(如日志、指标、追踪信息等),帮助开发者监控、调试和优化应用程序的能力。Spring Boot 提供了丰富的工具和集成支持,使得构建可观测的微服务或单体应用变得更加简单。

依赖配置:

配置文件:

XML 复制代码
# 将所有端点全部暴露
management.endpoints.web.exposure.include=*

实现效果:

五 生命周期

Spring Boot 应用的生命周期由启动、运行和关闭三个阶段构成,每个阶段通过事件机制和扩展点提供高度可定制性。开发者可通过监听事件、自定义 Bean 生命周期方法及利用 Runner 接口,精确控制应用的初始化、运行逻辑和优雅关闭行为,确保应用的健壮性与可维护性。

流程图

XML 复制代码
graph TD
    A[启动] --> B[加载配置与环境]
    B --> C[创建应用上下文]
    C --> D[刷新上下文: 加载Bean, 启动服务器]
    D --> E[执行Runners]
    E --> F[运行]
    F --> G[接收关闭信号]
    G --> H[销毁Bean, 关闭服务器]
    H --> I[退出]
相关推荐
蛋蛋的就会顺顺的2 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
余槐i2 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
需要8263 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡3 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
凤山老林4 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
伯恩bourne5 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
张彦峰ZYF5 小时前
停顿短不等于延迟低:G1、ZGC 与低延迟服务的目标分野、代价账本与选型标定
后端·回收暂停、应用停止总时长·到达安全点、分配停滞·屏障吃吞吐、并发线程吃核心·并发窗口吃堆余量·分区式靠挑回收集兑现目标·染色指针式不支持压缩引用
silvamux_5 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
pride.li5 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
省钱兄--zs5 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构