Spring Boot part16-Profile环境隔离
什么是Profiles
介绍
随着软件开发变得越来越复杂,应用程序往往需要在不同的环境中运行,比如开发、测试、生产等。每个环境可能对配置有不同的需求。手动管理这些差异化的配置不仅容易出错,而且效率低下。为了解决这个问题,Spring框架引入了Profiles的概念,它允许开发者根据不同的环境来激活特定的配置设置。
Spring Profiles
是Spring框架提供的一种机制,用来解决多环境配置问题。通过定义不同的profiles,可以在同一套代码库中针对不同的运行时环境(如开发、测试、生产)指定不同的配置属性,这样就提供了一种方式允许我们指定在特定环境下只加载对应的程序配置,每一种环境配置对应一个
Profile,只有当前 Profile 处于激活状态时,才会将该 Profile
所对应的配置和 Bean 加载到 Spring
程序中。这样做的好处是能够保持代码的一致性,同时又能灵活地适应各种环境的变化。
Spring Profiles
就是针对应用程序,不同环境需要不同配置加载的一种解决方案。
Profile 的概念其实很早在 Spring...
快速上手H2数据库进行开发
前言
H2 是一个用 Java
编写的开源关系数据库,特别适合作为嵌入式数据库和内存数据库使用。
针对其特性,我不会太深入讲解什么其他跟原理和很细节方面的东西,本文旨在让大家快速理解什么是内存数据库以及如何使用内存数据库快速进行开发。
什么是内存数据库
内存数据库(In-Memory
Database,IMDB)是一种将数据完全存储在计算机内存中的数据库系统。与传统磁盘数据库不同,它跳过了磁盘
I/O
操作,直接通过内存读写数据,因此具备毫秒级响应速度和高并发处理能力。其核心优势在于:
速度优势:内存访问速度(纳秒级)比磁盘(毫秒级)快
3-4 个数量级,适合实时分析、高频交易等场景。
架构简化:无需复杂的磁盘缓存机制,数据结构设计更贴近内存特性(如哈希表、索引树)。
内存计算融合:数据与计算逻辑在内存中直接交互,减少数据搬运开销。
数据存储与持久化
主要存储在内存:数据加载到内存中运行,减少...
Spring Boot part15-SpringApplication的基础特性及其原理
SpringApplication的基础特性
在 Spring Boot 生态中,SpringApplication
是启动应用的核心类,它封装了繁杂的启动流程,让开发者能以简洁方式启动应用,同时还提供了丰富可扩展点,助力定制化需求实现。
在这里我会先讲基础特性,然后会再将一些 SpringApplication
的基础原理
自定义 banner
什么是 banner
banner 是 Spring Boot
应用启动时,在控制台打印的一段字符图案或文字信息,默认是 Spring Boot
标志性图案。它虽不影响应用功能,却能成为应用独特
“名片”,用于展示团队文化、应用名称等个性化内容。
image-20250613165542529
这个就是 banner
这个东西是可以自定义的
如何自定义 banner
在类路径(一般是 src/main/resources 目录)下添加
banner.txt 文件,Spring Boot 启动时会自动加载该文件内容作为
banner 显示。可借助在线工具(如文中提到的 Spring Boot...
关于C#中的委托机制的讲解
C# 委托机制深度解析与实战指南
一、委托的本质与核心概念
委托(Delegate) 是 C#
中实现回调机制的核心特性,本质上是一种引用方法的类型安全对象。与 C++
函数指针相比,委托具有以下优势:
类型安全:委托实例必须匹配方法的签名(参数类型、返回类型)
面向对象封装:委托是派生自System.Delegate的类实例
多播能力:一个委托实例可引用多个方法
跨应用域调用:支持在不同应用域间传递方法引用
委托的核心组成部分:
签名定义:指定参数列表和返回类型
目标方法:委托引用的具体方法(静态方法或实例方法)
调用逻辑:通过委托实例调用时执行目标方法
二、委托的基础用法详解
1. 委托的声明与类型匹配规则
1234567891011// 声明一个返回int、接收两个int参数的委托public delegate int MathOperation(int a, int b);// 符合该委托签名的方法public static int Add(int x, int y) => x + y;public static...
使用MapStruct进行对象转换,及其中对象转换注解的使用
理解 @Mapper 注解的核心功能
@Mapper 注解是现代 Java
开发中用于简化对象转换的重要工具,最著名的实现是 MapStruct 框架,它是
Java
中最流行的对象映射框架。它的设计理念是通过编译时代码生成来替代传统的反射机制,从而实现高性能的对象映射转换。
所以,我们从 MapStruct 使用来讲 @Mapper
注解的使用及其对象转换方案。
MapStruct
是一个代码生成器,它的主要功能是在编译时根据注解配置自动生成高性能的映射实现代码,避免了手写转换代码的繁琐和运行时反射的性能损耗。这个工具基于“约定优于配置”的原则,极大地简化了
Java Bean 类型之间的映射实现过程。
在多层架构的应用中,经常需要在不同的对象模型之间进行转换,例如在持久层的实体和传输层的
DTO(Data Transfer
Object,数据传输对象)之间。手动编写这种映射代码是一项繁琐且容易出错的任务。MapStruct通过自动化的方式解决了这个问题,它可以在编译时生成映射代码,从而保证了高性能、快速的开发反馈以及严格的错误检查。
@Mapper...
三大自动注入相关注解的分析和对比
自动注入相关注解
@Autowired
在使用Spring进行项目开发的时候,会大量使用到自动装配,那自动装配是什么呢?简单来说:Spring
利用依赖注入(DI)功能,完成SpringIOC容器中各个组件之间的依赖关系赋值管理。
@Autowired
是一个Spring框架的原生注解,它可以对类成员变量、方法及构造函数进行标注,让
spring 完成 bean 自动装配的工作,是 Spring
框架中用于实现依赖注入(Dependency Injection, DI)
的关键注解
自动将容器中已创建的 Bean 注入到当前 Bean 的字段、构造方法或
setter 方法中
避免手动创建对象,实现松耦合的组件协作
遵循 “控制反转(IoC)” 原则,让容器管理对象生命周期
使用@Autowired 时候,容器启动的扫描流程如下:
Spring容器在启动时会自动扫描并管理所有带有
@Component、@Service、@Repository
和 @Controller...
Spring Boot part14-数据访问之整合SSM场景及其自动配置原理
Spring Boot 3 整合 SSM
场景进行数据访问
熟悉 SSM 框架
SSM 框架简介
SSM 框架是 Spring、Spring MVC 和 MyBatis 三个框架的整合,是 Java
企业级开发中经典的技术栈组合。其中:
Spring
提供了依赖注入(DI)和面向切面编程(AOP)等核心功能,用于管理对象生命周期和业务逻辑分层
Spring MVC 是基于 MVC 设计模式的 Web
框架,负责处理 Web 请求和响应
MyBatis 是持久层框架,用于实现数据库操作的 ORM
映射
Spring Boot 3 整合 SSM 的优势很明显
Spring Boot 3 对 SSM 框架的整合带来了以下核心优势:
自动化配置:通过 Starter 依赖自动配置
Spring、Spring MVC 和 MyBatis 的基础环境
简化部署:内置 Tomcat 等容器,可直接打包为可执行
JAR
性能优化:基于 Spring 6 的响应式编程模型,支持
Reactive Stream
微服务支持:天然适配...
Spring Boot part13-全面接管Spring MVC
全面接管 SpringMVC 的思路
SpringBoot 默认配置好了 SpringMVC 的所有常⽤特性。
在 SpringBoot 中,全面接管 SpringMVC
配置的思路是通过禁用默认配置并完全自定义所有 MVC
行为。这是一个高级用法,适用于需要对 SpringMVC 进行深度定制的场景。
全面接管 SpringMVC 的核心步骤如下:
创建一个配置类,实现WebMvcConfigurer接口
使用@EnableWebMvc注解禁用 SpringBoot 的默认 MVC
配置
重写WebMvcConfigurer接口中的方法来定义所有需要的 MVC
行为,WebMvcConfigurer组件定义MVC的底层行为
回忆一下配置类的三种自定义方式
全自动
直接编写控制器逻辑
全部使用自动配置默认效果
手自一体
@Configuration + 配置 WebMvcConfigurer +
配置...
Spring Boot part12-嵌入式容器
前言
Spring Boot
的目标是构建“非常容易创建、独立、产品级别的基于Spring的应用”。这些应用是“立即可运行的”。在这个过程中,完全没有代码生成,不需要配置任何特殊的XML配置,为了这个目标,Spring
Boot 在 Spring 4.0
框架之上提供了很多特性,帮助应用以“约定优于配置”“开箱即用”的方式来启动应用并运行上下文。
Spring Boot 同样改变了一个传统的 Web
应用服务的启动流程和部署方式。通过自动配置机制,Spring Boot
提供了一个嵌入式的运行时容器环境,并使用代码注解的方式在代码中将 URL
服务地址映射到 Controller 的方法完成服务映射。
所以,开发者不再需要关心传统容器(如
Tomcat)中web.xml的配置,同时实现容器的具体技术都是可替换及可更改的,这些技术以插件化的Starter组件方式在运行时加载到
Spring...
Butterfly主题常见的标签外挂
引用自官方文档,自己总结速查或者其他使用
Gallery 相册图库
相册组
123456<div class="gallery-group-main">{% galleryGroup 'somePic' '这是 somePic 相册,什么都存' '/gallery/SomePic' '/gallery/images/cover.png' %}{% galleryGroup 'draw' '这是 draw 相册,主要存我的画' '/gallery/draw' '/gallery/images/1.jpg' %}{% galleryGroup 'cover' '这是 cover 相册,主要存文章封面' '/gallery/cover' ...
为typora更换更新版本的mermaid避免图表无法加载
Typora 是一款广受欢迎的 Markdown 编辑器,它集成了 Mermaid
库,方便用户绘制各类基础图表,如流程图、甘特图、饼图等。然而,Typora 与
Mermaid 独立维护,这就导致 Typora 中集成的 Mermaid
版本可能并非最新,进而无法支持最新的图表类型和特性。比如在撰写本文时,截至
Mermaid 的最新版本 8.5.1 支持 ER 图,在 Markdown 中输入如下代码:
查看你的 typora 中的 mermaid 版本
12```mermaidinfo
info
1234erDiagram CUSTOMER }|..|{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER : id (PK)
erDiagram CUSTOMER }|..|{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER : id...
君と彼女と彼女の恋全周目攻略指南
游戏重要注意事项
存档备份提示:2 周目终点时会删除存档,需提前备份。
XP
系统存档位置:C:\Documents and Settings (UserName)\Application Data\Nitroplus\ 君と彼女と彼女の恋
Vista、Win7
及以上系统存档位置:C:\Users (UserName)\AppData\Roaming\Nitroplus\ 君と彼女と彼女の恋
3 周目解锁条件:需要游戏包装中附带的 8 位序列号(如
34302111)。
谜题解答要点:3
周目循环路线中的谜题答案需记录美雪对话内容,答案因 PC 环境而异。
1 周目特殊操作:在手机中输入 080 9184 6920
可解锁所有 CG、音乐、场景,但会导致无法继续游戏。
一周目:美雪路线
关键选择分支
flowchart TD A["查看通话记录"] --> B["哔哩哔哩"] B --> C["做朋友"] C -->...
深入探索C#事件机制
什么是事件
在软件开发中,事件是一种用于在对象之间传递信息的机制。当一个对象的状态发生变化时,它可以通过触发事件来通知其他对象。事件机制广泛应用于GUI编程、游戏开发、网络编程等领域。
事件的基本概念和语法
委托与事件的关系
在C#中,事件是基于委托实现的。委托是一种类型安全的函数指针,用于引用具有特定签名的方法。事件通过委托来管理其订阅者,并在事件触发时调用这些订阅者的方法。
事件的声明与使用
声明事件的语法如下:
123456789101112public class Publisher{ public delegate void NotifyEventHandler(object sender, EventArgs e); public event NotifyEventHandler Notify; public void RaiseEvent() { if (Notify != null) { Notify(this,...















