【Spring实战】16 Profile

文章目录

    • 1. 定义
    • 2. 使用
      • 2.1 定义 Profile
      • 2.2 激活 Profile
    • 3. 演示
      • 3.1 properties文件
      • 3.2 打印日志
      • 3.3 启动服务&验证
      • 3.4 修改 active
      • 3.5 重启服务&验证
    • 4. 应用场景
      • 4.1 数据库配置
      • 4.2 日志配置
    • 5. 代码详细
    • 总结

Spring 框架提供了一种强大的机制,允许在不同的环境中以不同的方式配置和管理应用程序。这个机制就是 Spring 的 Profile。通过使用 Profile,我们可以根据应用程序运行的环境,动态地选择不同的配置信息,从而实现更灵活和可配置的应用程序。本文将对 Spring 中的 Profile 的概念、用法以及实际应用场景进行介绍。

1. 定义

Spring Profile 是一种在不同环境中提供不同配置的机制。通过定义不同的 Profile,我们可以在不同的部署环境中轻松切换配置,而无需修改应用程序的源代码。每个 Profile 可以包含特定于该环境的 bean 定义、属性文件等。

在这里插入图片描述

2. 使用

2.1 定义 Profile

在 Spring 中,我们可以使用 @Profile 注解来定义 Profile。示例:

@Configuration
@Profile("dev")
public class DevConfig {// 开发环境的一些列配置// 例如:将SQL文格式化并打印
}

2.2 激活 Profile

有几种方式可以激活 Profile:

  • application.propertiesapplication.yml 中设置 spring.profiles.active 属性

    spring.profiles.active=dev
    
  • 在启动应用程序时通过命令行参数激活 Profile

    java -jar koala.jar --spring.profiles.active=dev
    
  • 在启动程序之前通过环境变量的设定来激活 Profile

    export SPRING_PROFILES_ACTIVE=dev
    

3. 演示

3.1 properties文件

application.properties 中通过 Profile 的设定,来动态调整日志的输出级别

application.properties

spring.profiles.active=dev

application-dev.properties

logging.level.root=INFO

application-test.properties

logging.level.root=WARN

3.2 打印日志

IndexController

package com.cheney.koala.controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("index")
public class IndexController {private static final Logger logger = LoggerFactory.getLogger(IndexController.class);@GetMappingpublic String index(Model model) {logger.debug("【Debug】- Hello.");logger.info("【Info】- Hello.");logger.warn("【Warn】- Hello.");logger.error("【Error】- Hello.");model.addAttribute("msg", "Welcome to Koala System.");return "index";}
}

3.3 启动服务&验证

在这里插入图片描述

3.4 修改 active

application.properties

spring.profiles.active=test

3.5 重启服务&验证

在这里插入图片描述

这样,我们就可以使用 Profile 动态的对日志级别进行了配置

4. 应用场景

4.1 数据库配置

在不同的环境中,数据库连接信息可能不同。通过使用 Profile,可以为每个环境定义不同的数据源配置。

@Configuration
@Profile("dev")
public class DevDatabaseConfig {// 开发环境的一些列配置
}@Configuration
@Profile("test")
public class TestDatabaseConfig {// 测试环境的一些列配置// 例如 使用特定的测试数据库
}

4.2 日志配置

不同环境可能需要不同级别的日志记录。通过使用 Profile,我们可以定义不同的日志配置。

@Configuration
@Profile("dev")
public class DevLoggingConfig {// 开发环境的日志配置
}@Configuration
@Profile("test")
public class TestLoggingConfig {// 测试环境的日志配置
}

5. 代码详细

https://github.com/cheney09/spring-practical-combat/tree/main/16/koala

在这里插入图片描述

总结

Spring Profile 为我们提供了一种简单而强大的方式,以不同的方式配置应用程序,从而满足不同环境的需求。通过合理使用 Profile,我们能够提高应用程序的灵活性和可维护性,同时更容易实现自动化部署和测试。在实际应用中,合理定义和使用 Profile 将成为提高开发效率的重要手段。

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

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

相关文章

Linux:20个linux常用命令

20个linux常用命令 1. ls:列出文件list 2. cd:切换目录change directory 3. cp:复制copy 4. mv:移动move 5. rm:移除,删除remove 6. mkdir:创建文件夹make directory 7. rmdir:移除&…

docker 在线安装mysql 8.0.21版本

1、拉取mysql 8.0.21版本镜像 2、查看镜像 docker images 3、在宿主机 /usr/local/mysql 下的 conf 文件夹下,创建 my.cnf 文件,并编辑内容 [mysql] default-character-setutf8 [client] port3306 default-character-setutf8 [mysqld] port3306 se…

Omnifocus - Reference Manual for V4 - 1

1, Welcome to OmniFocus OmniFocus 4 以你的任务大纲为中心,为你所有的 Apple 设备带来一致的体验,并针对每种设备类型进行了优化。 Centered around your task outline, OmniFocus 4 brings a consistent experience, optimized for each device type,…

JavaScript 关键特性

生活中,条件与我们息息相关。举几个例子:如果这周放假,那么我就要出去玩;如果明天不下雨,我就和小花出去踢足球;如果我饿了,我要么吃饭,要么吃面,要么就忍着。同样的&…

普中STM32-PZ6806L 使用FlyMcu串口烧录程序

简介 我的串口下载电路坏掉了, 所以研究了下如何通过USB转TTL进行程序的下载, 为后续Bootloader部分做准备;连接 我的板几乎是十年前买的, 所以电路与现有网上的资料有些差异, 所以仅供参考 USB 转 TTL线 与开发板 连接, 如图图中 ①, 需要去掉第一个…

YOLOv8训练损失、mAP画图功能 | 支持多结果对比,多结果绘在一个图片(科研必备)

一、本文介绍 本文给大家带来的是YOLOv8系列的绘图功能,我将向大家介绍YOLO系列的绘图功能。我们在进行实验时,经常需要比较多个结果,针对这一问题,我写了点代码来解决这个问题,它可以根据训练结果绘制损失(loss)和mA…

python实现平滑线性滤波器——数字图像处理

原理: 平滑线性滤波器是一种在图像处理中广泛使用的工具,主要用于降低图像噪声或模糊细节。这些滤波器的核心原理基于对图像中每个像素及其邻域像素的线性组合。 邻域平均: 平滑线性滤波器通过对目标像素及其周围邻域像素的强度值取平均来工…

Openwrt修改Dropbear ssh root密码

使用ssh工具连接路由器 输入:passwd root 输入新密码 重复新密码 设置完成 rootImmortalWrt:~# passwd root Changing password for root New password:

dll文件和exe文件的区别和关系

dll文件 DLL(Dynamic Link Library)文件为动态链接库文件,又称"应用程序拓展",是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件&…

知识笔记(六十四)———Vue 3中toRaw和markRaw的使用

Vue 3的响应性系统 在Vue 3中,响应性系统是构建动态Web应用程序的关键部分。Vue使用响应性系统来跟踪依赖关系,使数据更改能够自动更新视图。这使得Vue应用程序在数据变化时能够高效地更新DOM。Vue 3引入了新的Proxy对象来替代Vue 2中的Object.definePro…

Linux 磁盘管理

Linux 磁盘管理好坏直接关系到整个系统的性能问题。 Linux 磁盘管理常用三个命令为 df、du 和 fdisk。 df(英文全称:disk free):列出文件系统的整体磁盘使用量du(英文全称:disk used)&#xf…

【前缀和】【分类讨论】【二分查找】2983:回文串重新排列查询

作者推荐 【动态规划】【字符串】C算法:正则表达式匹配 本文涉及的基础知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 二分查找算法合集 回文串重新排列查询 给你一个长度为 偶数 n ,下标从 0 开始的字符…

QT上位机开发(绘图软件)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 稍微复杂一点的软件,一般都是带有绘图功能。绘图的意义,不仅仅是像CAD一样,可以进行模型的设计、比对和调试。它…

[ABC283Ex] Popcount Sum

我的社区http://qm.qq.com/cgi-bin/qm/qr?_wv1027&k3svdDJTlkD76TRRShbxYCYK1zK1c8cyF&authKeyv1pxp6rS8AA4SRy7bflJl9LIwp8d5v0HOudw%2BDxHiWDRqZ1LzjeoBJH1Z1EXnl35&noverify0&group_code546881376 [ABC283Ex] Popcount Sum 题面翻译 记 popcount ( n )…

爬虫实战-微博评论爬取

简介 最近在做NLP方面的研究,以前一直在做CV方面。最近由于chatgpt,所以对NLP就非常感兴趣。索性就开始研究起来了。 其实我们都知道,无论是CV方向还是NLP方向的模型实现,都是离不开数据的。哪怕是再先进的代码,都是…

187.【2023年华为OD机试真题(C卷)】阿里巴巴找黄金宝箱(I)(贪心算法-JavaPythonC++JS实现)

请到本专栏顶置查阅最新的华为OD机试宝典 点击跳转到本专栏-算法之翼:华为OD机试 🚀你的旅程将在这里启航!本专栏所有题目均包含优质解题思路,高质量解题代码,详细代码讲解,助你深入学习,深度掌握! 文章目录 【2023年华为OD机试真题(C卷)】阿里巴巴找黄金宝箱(…

数据结构--队列【详解】~(˶‾᷄ꈊ‾᷅˵)~

目录 队列定义: 队列的声明与头文件的包含: 队列的声明: 头文件的包含: 队列的基本操作: 初始化队列 : 摧毁队列: 入队列: 出队列: 返回队头数据: 返回队尾数据&#xff1…

MyBatis-mapper.xml配置

1、配置获取添加对象的ID <!-- 配置我们的添加方法&#xff0c;获取到新增加了一个monster对象的iduseGeneratedKeys"true" 意思是需要获取新加对象的主键值keyProperty"monster_id" 表示将获取到的id值赋值给Monster对象的monster_id属性 --><…

Node.js使用jemalloc内存分配器显著减少内存使用

前言 Node.js 默认使用的是 ptmalloc(glibc) 内存分配器&#xff0c;而&#xff1a; 在服务端领域「不会选择默认的 malloc」是一个常识。&#xff08; 来源 &#xff09; ptmalloc 的分配效率较低&#xff08; 来源 &#xff09;&#xff0c;对于 长时间、多核 / 多线程 运行…

算法训练day56|动态规划part16

583. 两个字符串的删除操作 逆向思路&#xff1a;求最长公共子序列&#xff0c;在用总长度-2*公共子序列长度 正向思路&#xff1a;删除多少 1. dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j]&#xff1a;以i-1为结尾的字符串word1&#xff0c;和以j-1位结…