【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.hqwc.cn/news/314441.html

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

相关文章

关于“Python”的核心知识点整理大全55

目录 注意 3. 模板 topic.html 4. 将显示所有主题的页面中的每个主题都设置为链接 topics.html 18.5 小结 第 19 章 用户账户 19.1 让用户能够输入数据 19.1.1 添加新主题 1. 用于添加主题的表单 forms.py 2. URL模式new_topic urls.py 3. 视图函数new_topic() …

51单片机中TCON, IE, PCON等寄存器的剖析

在单片机中,如何快速通过名字记忆IQ寄存器中每一个控制位的作用呢? IE(interrupt enable)寄存器中,都是中断的使能位置。 其中的EA(enable all)是总使能位,ES(enable serial)是串口…

excel统计分析——单因素方差分析

参考资料:生物统计学 方差分析是将总变异分解为组间变异的方差和组内变异的方差,并通过F检验推断处理效应是否显著的过程,而方差是通过平方和与自由度计算出来的,所以方差分析首先需要进行平方和与自由度的分解。具体步骤如下&…

简单FTP客户端软件开发——JavaFX开发FTP客户端

文章目录 导入外部包commons-net-3.10.0.jarJavaFX开发客户端 FTP客户端要求如下: 简单FTP客户端软件开发 网络环境中的一项基本应用就是将文件从一台计算机中复制到另一台可能相距很远的计算机中。而文件传送协议FTP是因特网上使用得最广泛的文件传送协议。FTP使用…

yolov5目标检测神经网络——损失函数计算原理

前面已经写了4篇关于yolov5的文章,链接如下: 1、基于libtorch的yolov5目标检测网络实现——COCO数据集json标签文件解析 2、基于libtorch的yolov5目标检测网络实现(2)——网络结构实现 3、基于libtorch的yolov5目标检测网络实现(3)——Kmeans聚类获取anc…

OpenCV-13绘制多边形和文本

一、画多边形 使用API polylines绘制多边形。 polylines(img, pts, isClose, color, thickness, lineType, shift) 其中: pts:表示多边形的点集&#xff…

nvm安装版本后设置默认镜像地址和nvm list available出现空白解决办法

如题 npm config get registry https://registry.npmjs.org/发现镜像地址依旧是默认的 解决 运行输入npm config list 查看这个选项对应的目录 修改为的内容如下 homehttps://npmmirror.com registryhttps://registry.npmmirror.com/或者也可以 homehttps://npmmirror.com…

008、所有权

所有权可以说是Rust中最为独特的一个功能了。正是所有权概念和相关工具的引入,Rust才能够在没有垃圾回收机制的前提下保障内存安全。 因此,正确地了解所有权概念及其在Rust中的实现方式,对于所有Rust开发者来讲都是十分重要的。在本文中&…

JavaScript 基础(一)

实验需新建一个 test.html 文件&#xff0c;用于编写代码。后续的例子中&#xff0c;将不再提醒建立文件&#xff0c;大家根据个人需求自行创建对应的 html 文件&#xff0c;并完成代码练习&#xff1a; 首先来看看范例代码&#xff1a; <!doctype html> <html>&…

Docker:部署若依前后端分离版

Docker&#xff1a;部署若依前后端分离版 1. 停止天翼云上的原来跑的若依项目2. 停止腾讯云上的若依项目3. 使用Docker部署3.1 天翼云数据库&Redis3.1.1 部署数据库3.1.2 部署Redis数据库3.1.1 部署Nginx(这里被天翼云坑了换的腾讯云运行nginx) 3.2 腾讯云部署后端&前端…

【机器学习】卷积神经网络(四)-实现细节(Caffe框架为例)

六、 实现细节 都有哪些开源的卷积神经网络实现 caffe中卷积神经网络各个层&#xff08;卷积层、全连接层、池化层、激活函数层、内基层、损失层等&#xff09; Caffe2 与caffe 对比 caffe2 开源吗 使用caffe的c 版本和python版本&#xff0c;分别适用于哪些场景 6.1 卷积层 在…

【C++】STL 容器 - map 关联容器 ③ ( map 容器常用 api 操作 | map 容器迭代器遍历 | map#insert 函数返回值处理 )

文章目录 一、map 容器迭代器遍历1、map 容器迭代器2、代码示例 二、map 容器插入结果处理1、map#insert 函数返回值处理2、代码示例 一、map 容器迭代器遍历 1、map 容器迭代器 C 语言中 标准模板库 ( STL ) 的 std::map 容器 提供了 begin() 成员函数 和 end() 成员函数 , 这…