Profile多环境支持|学习笔记

简介: 快速学习Profile多环境支持

开发者学堂课程【SpringBoot快速掌握 - 核心技术:Profile多环境支持 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/612/detail/9228


Profile多环境支持

目录

一、 多 Profile 文件

二、 多 profile 文档块方式

三、 激活指定 profile

 

一、多 Profile 文件

Profile 其实是 Spring 用来做多环境支持的。因为在开发、测试、运行的时候,很可能这个配置文件会有一些变化。那么为了方便的切换环境,比如开发人员用开发环境,项目发布后用生产环境,测试期间用测试环境,为了方便的切换, Spring 提供了 Profile 功能。 Profile 功能怎么用呢?第一种在写配置文件的时候,配置文件后边可以-加上环境标识,所以第一种可以用多 Profile 文件的方式:

在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml ,带上 Profile 标识就可以动态切换。并且默认使用 application.properties 的配置。

举个例子:

在 appliction.properties 这个配置下:

server.port=8081

# idea, properties配置文件utf-8

# person

person.last-name=张三${random.uuid}

person.age=${random.int}

person.birth=2017/12/15

person.boss=false

person.maps.k1=v1

person.maps.k2=14

person.lists=a,b,c

person.dog.name=${person.hello:hello}_dog

person.dog.age=15

由 server.port=8081 可以看出主配置文件端口号是 8081。

写一个配置为 application-dev.properties 是在开发环境下,设置一个端口号为8082:server.port=8082。再写一个配置加上 profile 标识 application-prod.properties 叫做生产环境,设置一个端口号为80端口:server.port=80 。现在就相当于配置了不同环境的配置文件,那么默认取消的是哪个端口呢?来测试一下:启动 SpringBoot 应用来看它用的是哪个端口号:

package com.atguigu.springboot;

import ...

//@ImportResource(Locations = {"cLasspath : beans.xml"})

@SpringBootApplication

public class SpringBoot02ConfigApplication {

public static void main(String[] args) {

SpringApplication.run(SpringBoot02ConfigApplication.class,args);

}

}

可以看到它现在使用的是默认的 8081 端口:Tomcat started on port(s):8081(http)。

 

二、yml 支持多文档块方式

如果用 yml 文件作为配置文件,它还有一个更简单的方式叫多文档块。

server:

port: 8081

spring:

profiles:

active: prod

---

server:

port: 8083

spring:

profiles: dev

---

server:

port: 8084

spring:

profiles: prod  #指定属于哪个环境

这里以 application.yml 作为主配置文件。以前需要写出两种配置文件在主配置文件激活,现在只写一个 yml 文件。

yml 文件有一种语法叫文档块,即当在用三个横线回车以后会发现:上边叫 document1 ,下边叫 document2 ,如果能再回车,那再在下边就是 document3 、 document4 等。因为能分成很多文档块,所以就用这些文档块来定义每一个数据。比如第二个文档块定义这个端口号为8083,第三个文档块定义为8084,但是8083可以写一个配置为 spring:profiles: dev ,是 dev 环境;8084配置为 spring:profiles: prod ,是 product 环境。这样就相当于为每一个文档块定义它是什么环境下的东西。激活则在上面的文档块激活,输入 spring:profiles:active: dev  激活 dev ,如果一切正常就是 Tomcat started on port(s):8083(http) 即8083端口。

切换激活 product:spring:profiles:active:prod 就是 Tomcat started on port(s):8084(http)8084 端口。

这就是使用 yml 里面的文档块模式,不需要写那么多的配置文件,就更简单了。

 

三、激活指定 profile

那么何时开发、测试、包括生产环境可以得到运行呢?

1. 在配置文件中指定 spring.profile.active=dev

在默认配置文件中输入 spring.profile.active=dev 激活开发环境,再次启动可以看到端口号变成了8082:Tomcat started on port(s):8082(http)。

server.port=8081

spring.profiles.active=dev

# idea, properties配置文件utf-8

# person

person.last-name=张三${random.uuid}

person.age=${random.int}

person.birth=2017/12/15

person.boss=false

person.maps.k1=v1

person.maps.k2=14

person.lists=a,b,c

person.dog.name=${person.hello:hello}_dog

person.dog.age=15

2.命令行

a):命令行参数激活,使用 --spring.profiles.active=dev。在 Edit Configurations... 里的 Program arguments 配置:-- spring.profiles.active=dev 运行,在运行的时候加了命令行参数,那么dev就相当于被激活了,虽然看着是运行 prod ,实际上在命令行里改掉了,所以这里是 Tomcat started on port(s):8083(http) 。即8083端口。

b):可以直接在测试的时候,配置传入命令行参数。由于项目最终会被打包,那么就把这个项目打包成 package ,打包完成在 target 目录下的一个 .jar 压缩包,在路径下输入 cmd ,用命令行的方式执行,输入 java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev  回车,指定用8083端口,则输出 Tomcat started on port(s):8083(http) 即8083端口。

3.虚拟机参数

在 Edit Configurations... 里的 VM options 里配置(-Dspring.profiles.active=dev ),依然指定dev,虽然外面指定 pord ,但是命令行指定 dev ,所以输出 Tomcat started on port(s):8083(http) 即8083端口。

相关文章
|
机器学习/深度学习 自然语言处理 TensorFlow
Next Sentence Prediction,NSP
Next Sentence Prediction(NSP) 是一种用于自然语言处理 (NLP) 的预测技术。
618 2
MySQL8.0新特性之公用表表达式学习
公用表表达式(或通用表表达式)简称为CTE(Common Table Expressions)。CTE是一个命名的临时结果集,作用范围是当前语句。CTE可以理解成一个可以复用的子查询,当然跟子查询还是有点区别的,CTE可以引用其他CTE,但子查询不能引用其他子查询。所以,可以考虑代替子查询。
260 0
|
11月前
|
存储 NoSQL MongoDB
掌握MongoDB索引优化策略:提升查询效率的关键
在数据库性能调优中,索引是提升查询效率的利器。本文将带你深入了解MongoDB索引的内部工作原理,探讨索引对查询性能的影响,并通过实际案例指导如何针对不同的查询模式建立有效的索引。不仅将涵盖单一字段索引,还会探讨复合索引的使用,以及如何通过分析查询模式和执行计划来优化索引,最终实现查询性能的最大化。
|
10月前
|
存储 NoSQL PHP
PHP与Redis结合使用,提升数据存储性能
随着互联网应用的发展,PHP与Redis的结合成为提升数据存储性能的重要手段。PHP作为流行的服务器端语言,常用于网站开发;Redis作为高性能内存数据库,以其快速读写能力,有效优化数据访问速度,减轻数据库压力。两者结合通过缓存机制显著提升应用响应速度,支持高并发场景下的稳定性和可扩展性。
|
12月前
|
存储 分布式计算 DataWorks
关于阿里云DataWorks的6个问题记录
该文章记录了关于阿里云DataWorks使用的六个常见问题及解答,帮助用户更好地理解和操作DataWorks平台。
435 0
关于阿里云DataWorks的6个问题记录
|
存储 关系型数据库 MySQL
CentOS7+Rsyslog+MySQL 搭建 Rsyslog 日志服务器
CentOS7+Rsyslog+MySQL 搭建 Rsyslog 日志服务器
725 0
|
消息中间件 缓存 Java
如何优化大型Java后端系统的性能:从代码到架构
当面对大型Java后端系统时,性能优化不仅仅是简单地提高代码效率或硬件资源的投入,而是涉及到多层次的技术策略。本篇文章将从代码层面的优化到系统架构的调整,详细探讨如何通过多种方式来提升Java后端系统的性能。通过对常见问题的深入分析和实际案例的分享,我们将探索有效的性能优化策略,帮助开发者构建更高效、更可靠的后端系统。
|
Java 应用服务中间件 API
开发与运维机制问题之Tomcat要打破双亲委派机制如何解决
开发与运维机制问题之Tomcat要打破双亲委派机制如何解决
172 0
|
XML 算法 Java
Hutool该怎么用?
Hutool 是一个中国开发者常用的 Java 工具包,包含了多个模块,如 AOP、BloomFilter、缓存、日期、加密、HTTP 客户端、日志、脚本执行、设置文件处理、系统参数调用等。
368 0
|
算法 Python
深入理解XGBoost:集成学习与堆叠模型
深入理解XGBoost:集成学习与堆叠模型
715 1