Spring Boot中的Profile:原理、用法与示例

news2024/11/26 14:25:26

Spring Boot中的Profile:原理、用法与示例

前言

Spring Boot 是一个快速开发 Spring 应用程序的框架,它提供了很多有用的功能和特性。其中,Profile 是一个常用的功能,它可以根据不同的环境配置来加载不同的配置文件,从而实现不同的配置逻辑。本文将介绍 Spring Boot 中 Profile 的原理、用法和示例。

在这里插入图片描述

Profile 的原理

在 Spring Boot 中,Profile 是通过配置文件来实现的。在不同的环境下,可以加载不同的配置文件,从而实现不同的配置逻辑。具体来说,Spring Boot 支持以下几种配置文件:

  • application.properties
  • application.yml
  • application-{profile}.properties
  • application-{profile}.yml

其中,application.properties 和 application.yml 是通用的配置文件,它们在所有的环境下都会被加载。而 application-{profile}.properties 和 application-{profile}.yml 则是根据不同的 Profile 来加载的配置文件。当应用程序启动时,Spring Boot 会根据当前的环境变量来决定加载哪个配置文件。例如,如果当前环境变量为 dev,则会加载 application-dev.properties 或 application-dev.yml 文件。

Profile 的用法

在实际开发中,Profile 可以用来实现以下几种功能:

  • 区分不同的环境,例如开发环境、测试环境和生产环境。
  • 配置不同的数据库连接信息,例如开发环境使用本地 MySQL 数据库,测试环境使用远程 MySQL 数据库,生产环境使用阿里云 RDS 数据库。
  • 配置不同的日志级别,例如开发环境使用 DEBUG 级别,测试环境使用 INFO 级别,生产环境使用 WARN 级别。

使用 Profile 的步骤如下:

1. 创建配置文件

首先,需要在项目的 resources 目录下创建不同的配置文件,例如:

  • application-dev.properties:开发环境的配置文件。
  • application-test.properties:测试环境的配置文件。
  • application-prod.properties:生产环境的配置文件。
# application-dev.properties
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
logging.level.root=debug
# application-test.properties
spring.datasource.url=jdbc:mysql://remote-server:3306/test
spring.datasource.username=test
spring.datasource.password=test123
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
logging.level.root=info
# application-prod.properties
spring.datasource.url=jdbc:mysql://aliyun-rds:3306/test
spring.datasource.username=prod
spring.datasource.password=prod123
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
logging.level.root=warn

2. 配置 Profile

在项目的配置文件中,需要配置当前的 Profile。有以下两种方法:

  • 在 application.properties 文件中配置。
spring.profiles.active=dev
  • 在启动命令中配置。
java -jar myproject.jar --spring.profiles.active=dev

3. 使用配置

在代码中,可以通过 @Value 注解来注入配置信息。例如:

@Service
public class UserService {

    @Value("${spring.datasource.url}")
    private String url;

    @Value("${spring.datasource.username}")
    private String username;

    @Value("${spring.datasource.password}")
    private String password;

    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName;

    // ...
}

Profile 的示例

下面是一个使用 Profile 的示例项目。

1. 创建项目

首先,使用 Spring Initializr 创建一个新的 Spring Boot 项目,添加以下依赖:

  • Spring Web
  • Spring Data JPA
  • H2 Database

2. 创建配置文件

在项目的 resources 目录下创建以下配置文件:

  • application-dev.properties
spring.datasource.url=jdbc:h2:mem:devdb
spring.datasource.username=sa
spring.datasource.password=sa
spring.datasource.driver-class-name=org.h2.Driver
logging.level.root=debug

-application-test.properties

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=sa
spring.datasource.driver-class-name=org.h2.Driver
logging.level.root=info
  • application-prod.properties
spring.datasource.url=jdbc:h2:mem:proddb
spring.datasource.username=sa
spring.datasource.password=sa
spring.datasource.driver-class-name=org.h2.Driver
logging.level.root=warn

3. 配置 Profile

在 application.properties 文件中配置当前的 Profile:

spring.profiles.active=dev

4. 创建实体类和 DAO

创建一个 User 实体类和一个 UserRepository 接口,用于操作数据库。

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;

    private String password;

    // getters and setters
}

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

}

5. 编写控制器

创建一个 UserController 控制器,用于处理 HTTP 请求。

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping
    public List<User> getUsers() {
        return userRepository.findAll();
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userRepository.save(user);
    }
}

6. 运行项目

使用以下命令启动项目:

java -jar myproject.jar --spring.profiles.active=dev

然后,可以使用 Postman 或 curl 工具来测试项目。例如,发送以下 POST 请求:

POST http://localhost:8080/users
Content-Type: application/json

{
    "username": "alice",
    "password": "123456"
}

可以看到,请求成功并返回了创建的 User 对象。

7. 测试不同的 Profile

尝试修改 application.properties 中的 spring.profiles.active 属性,并重新启动项目,测试不同的 Profile。例如,将其修改为 test:

spring.profiles.active=test

然后,再次运行项目,并发送 POST 请求:

POST http://localhost:8080/users
Content-Type: application/json

{
    "username": "bob",
    "password": "123456"
}

可以看到,请求成功并返回了创建的 User 对象,但是在控制台输出的日志级别变成了 INFO 级别。

结论

Profile 是 Spring Boot 中一个非常有用的功能,它可以帮助我们实现不同环境下的不同配置。本文介绍了 Profile 的原理、用法和示例,希望能够帮助读者更好地理解和使用 Spring Boot 中的 Profile 功能。

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

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

相关文章

轻量级网络CNN系列(二):GhostNetV2

欢迎关注公众号 – AICV与前沿 欢迎关注公众号 – AICV与前沿 回顾 &#xff08;1&#xff09;Depthwise与Pointwise卷积 DW卷积的一个卷积核负责一个通道&#xff0c;例如对一个355的图片&#xff0c;输出通道数要与输入通道数相同&#xff0c;则普通卷积操作需要3333的卷积…

记一次Smartbi登录绕过

FOFA&#xff1a;app"SMARTBI" 找到目标站点验证是否存在漏洞 域名后面拼接以下路径 /smartbi/vision/RMIServlet 有下面的回显说明有可能存在漏洞(有些站点不行) 用Hackbar发送post请求 失败的话更改用户:system,public,service三个内置用户都尝试一遍 发送请求…

AutoSAR系列讲解(入门篇)3.6-RTE与Interface接口

RTE与Interface接口 一、Interface接口总览 二、AutoSAR接口 三、标准接口 四、标准AutoSAR接口 一、Interface接口总览 少说废话&#xff0c;先上图 上图将所有的接口以及其分布的位置都详细的标识了出来&#xff0c;还是用的原来的那张ECU的图添加的&#xff0c;方便大家…

用友NC uapjs RCE漏洞复现(CNVD-C-2023-76801)

0x01 产品简介 用友NC是一款企业级ERP软件。作为一种信息化管理工具&#xff0c;用友NC提供了一系列业务管理模块&#xff0c;包括财务会计、采购管理、销售管理、物料管理、生产计划和人力资源管理等&#xff0c;帮助企业实现数字化转型和高效管理。 0x02 漏洞概述 用友NC及N…

基于Java+Vue前后端分离医学生在线学习交流平台设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

条件变量wait的另一种形式

flag.wait()里面可以有两个参数&#xff0c;第一个是锁&#xff0c;第二份一般是lambda表达式之类的谓词&#xff0c;其返回值一般是bool类型。 此时由于lambda表达式返回不为真&#xff0c;所以此时仍在等待。 此时lambda表达式就算正常的。

java学习记录之struts2注解校验ognl自定义拦截器

Result: 在struts中,Reuslt用于处理Action返回的结果.将我们之前在Servlet中耦合的功能代码.解耦了.将结果处理的代码封装到了Result中.Struts2已经预置了一些处理类.Dispatcher 转发Redirect 重定向redirectAction 重定向到一个Action(与redirect配合)plaintext 纯文本stream …

帆软report10.0,从人工智能到人工+智能,day1

前言&#xff1a; 最近在全基地推进品质CTQ&#xff0c;这个功能说实话在一年前已经开发完成了&#xff0c;中间修修补补&#xff0c;跌跌代代不下10-20版。看起来好像有点夸张吧。其实说实话&#xff0c;真正的BI系统用好&#xff0c;是需要业务人员和IT部门反复碰撞的。一年前…

volume 、namespace

顺带说一下 volume 和 namespace &#xff0c;咱们就开始分享一下 service 是什么 volume 是什么 还记得 docker 的 volume 吗&#xff0c;是一个数据卷 在 K8S 中&#xff0c;volume 是 pod 中能够被多个容器访问的共享目录 &#xff0c;实际上和 docker 是一样的 volume 是…

分享成为一个优秀的测试工程师需要具备哪些知识和经验?

根据我的观察&#xff0c;优秀的测试人员可以做的事情可以包括如下3点&#xff1a; 由单纯的测试变成项目质量保证工作 持续集成探索和推动和自动化测试技术研究 测试相关工具的开发 1、我们先来讲第一点&#xff0c;由单纯的测试变成项目质量保证工作 测试&#xff0c;从狭义…

versionOS开发笔记 01,如何在现有项目中启用 versionOS ?

visionOS 开发笔记 01&#xff0c;如何在现有项目中启用 visionOS &#xff1f; 在 Targets 中的 Supportted Destinations 中增加 Apple Vision 然后在项目的 Run Destination 中选择 Apple Vision Pro 就可以了

python+selenium环境搭建(一)

pythonselenium自动化测试环境包括四个部分&#xff1a;python、selenium、chrome谷歌浏览器、chrome谷歌浏览器驱动。其中浏览器也可以是火狐&#xff0c;IE等。目前自动化的主流浏览器还是chrome谷歌浏览器。 1.python的安装 目前测试行业应用最广的编程语言当属Python为首…

【C++】—— 继承

序言&#xff1a; 在之前&#xff0c;我们已经完成了对 C 初阶的讲解。接下来&#xff0c;我将带领大家学习关于C 进阶的相关知识&#xff0c;而今天我给大家介绍的就是关于 C三大特性之一的——继承。 目录 &#xff08;一&#xff09;继承的概念及定义 1、继承的概念 2、…

git常用命令之log

10. log 10.1 查看log 命令作用延展阅读git log输出 commit hsitory with commit detailgit reflog输出 HEAD ref 的 reflog链接git log --oneline--oneline选项会把提交信息压缩输出在单行。默认情况下&#xff0c;只显示commit id和commit message的第一行内容。$ git log …

Kubernetes核心概念汇总—Kubernetes 组件

当你部署完 Kubernetes&#xff0c;便拥有了一个完整的集群。 一组工作机器&#xff0c;称为 节点&#xff0c; 会运行容器化应用程序。每个集群至少有一个工作节点。 工作节点会托管 Pod &#xff0c;而 Pod 就是作为应用负载的组件。 控制平面管理集群中的工作节点和 Pod。 在…

应用服务器Application Server manual

Application Server manual Sun Java™ System Application ServerStart Default ServerServer is RunningAdmin Console Sun Java™ System Application Server 从事Java EE的研发很多年&#xff0c;竟然才知道Sun开发的Application Server&#xff0c;以及最新版本Glassfish…

解决Vue.js not detected的问题(Vue.js devtools变灰色)

今天在谷歌商店下载安装了Vue.js devtools,但是出现了图标是灰色&#xff0c;鼠标移过去是Vue.js not detected的问题 首先呢&#xff0c;要去找一个有vue.js写的网站&#xff0c;比如哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 此时发现图标不再是灰色的&#xff0c;也不出现Vue.js…

@SuppressWarnings注解的作用

一、问题由来 我们在写代码的时候&#xff0c;不论是导入的包&#xff0c;还是声明的对象&#xff0c;有时候会出现黄线&#xff0c;感觉就很难受&#xff01; SuppressWarnings注解主要用在取消一些编译器产生的警告对代码左侧行列的遮挡&#xff0c;有时候这会挡住我们断点…

Apache数据库项目盘点

著名的开源软件组织 Apache 软件基金会目前维护着 300 多个活跃项目&#xff0c;其中包含不少数据库相关的项目&#xff0c;本文简单介绍一下这些开源项目。 Apache AGE Apache AGE 是一个基于 PostgreSQL 的图数据库&#xff0c;目标是为所有关系型数据库提供图数据处理和分…

漏洞复现|Kyan密码泄露/命令执行漏洞

0x01阅读须知 所有发布的技术文章仅供参考&#xff0c;未经授权请勿利用文章中的技术内容对任何计算机系统进行入侵操作&#xff0c;否则对他人或单位而造成的直接或间接后果和损失&#xff0c;均由使用者本人负责。 郑重声明&#xff1a;本文所提供的工具与思路仅用于学习与…