profile之springboot
文章目录
- 什么是profile
- 1. application-{profile}.properties文件
- 1.1 profile的多种激活方式
- 1.2 spring.profiles.include属性
- 1.3 总结
- 2. @Profile
- 2.1 注解可以使用的位置
- 2.2 自定义注解
- 2.3 注意
- 3. 和maven的profile一起使用
什么是profile
想必大家都有这种经历,我们开发项目的时候要有多个环境,如开发环境、测试环境、生产环境,他们的配置文件一般不同,如数据库地址。当我们要向各个环境发布程序时,需要人工处理这些配置文件,这显然麻烦且易错。有了profile,一切问题就简单了。简单讲profile就是一组配置,不同profile提供不同组合的配置,程序运行时可以选择使用哪些profile来适应环境。
1. application-{profile}.properties文件
我们先来搭建一个简单的springboot项目快速了解多profile的使用。项目结构非常简单:
除了application.properties还有多个application-{profile}.properties(格式必须为这样),在每个配置文件中项目启动的端口是不一样的。
在application.properties使用spring.profiles.active=prod来指定生效的配置文件为application-prod.properties.启动项目后可以在控制台看到启动端口为application-prod.properties里配置的server.port=8084
1.1 profile的多种激活方式
- 第一种就是上面的在配置文件中通过spring.profiles.active=来指定,注意可以激活多个profile,如spring.profiles.active=prod,dev,如果都存在某值,执行last win策略。
- 通过命令行方式。优先级高于第一种的spring.profiles.active
执行java -jar xxx.jar,可以观察到服务端口被设置为8082。
执行java -jar xxx.jar –spring.profiles.active=test,可以观察到服务端口被设置为8083,也就是(test)环境的配置 - 通过虚拟机参数。-Dspring.profiles.active=dev
- 使用编程的方式激活。
@SpringBootApplication
public class Application {public static void main(String[] args) {ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class, args);applicationContext.getEnvironment().setActiveProfiles("dev");}
}
1.2 spring.profiles.include属性
意思是无论执行哪个profile,都会去加载application-mq.properties里的配置。但是注意,只会去加载application-mq.properties里独有的配置,如果application-mq.properties也有server.port字段并不会生效。
可以利用这种方式简化配置文件的书写,如在application-mq.properties书写各个环境都有的mq配置信息,不必都夹杂在application.properties里。
1.3 总结
- application.properties文件是必定要加载的,而且是先加载的,无论是通过哪种方式指定的。
- 当加载完application文件之后才加载指定的profiles文件
- 如果application文件和指定的profile文件有相同的配置或冲突的配置项,则以profile中的为基准
- application文件中写通用的配置项,profile文件中写特定环境的配置项,spring.profiles.include指定公共的配置项(起到了分离的作用),这样可以简化配置文件的书写。
2. @Profile
通过@Profile注解,我们可以根据所激活的不同的环境,生成不同的bean。
如只在dev环境下启动swagger2:
/*** swagger2的配置,只在开发环境dev下存在*/
@Configuration
@EnableSwagger2
@Profile("dev")
public class Swagger2Config {}
@profile官方博客介绍
2.1 注解可以使用的位置
- @component或@Configuration修饰的类上
- 作为元注解修饰自定义注解
- 任何@Bean修饰的方法上
2.2 自定义注解
@Profile注解需要接受一个字符串,作为场景名。这样每个地方都需要记住这个字符串。Spring的@Profile注解支持定义在其他注解之上,以创建自定义场景注解。
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Profile("dev")
public @interface Dev{}
这样就创建了一个@Dev注解,该注解可以标识bean使用于@Dev这个场景。后续就不再需要使用@Profile(“dev”)的方式(这样即可以简化代码)。
2.3 注意
- @Profile({“p1”, “!p2”})的意思为p1的profile生效或p2的profile为生效时就会去生成修饰的类
- 如果要使用不同环境下生成不同配置的同一个bean,方法名不要相同,即尽量不要重载。
3. 和maven的profile一起使用
参看这篇博客结合maven的profile使用
profile之springboot相关推荐
- springboot配置多项目下统一切换不同环境变量profile办法
springboot配置多项目下统一切换不同环境变量profile办法 springboot 适合于微服务那种多项目开发,每一个小项目就是一个springboot 项目,比如我们这样: 问题发生: 我 ...
- maven(三)最详细的profile的使用
文章目录 前言 1. 原理 2. 应用演示 2.1 项目结构 2.2 激活方式 1. 通过maven命令参数 2. 通过pom文件里的activation属性 3. settings.xml中使用ac ...
- 8. SpringBoot基础学习笔记
SpringBoot基础学习笔记 课程前置知识说明 1 SpringBoot基础篇 1.1 快速上手SpringBoot SpringBoot入门程序制作 1.2 SpringBoot简介 1.2.1 ...
- 【Java笔记+踩坑】SpringBoot基础2——运维实用
导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 目录 ...
- SpringBoot开发实用
SpringBoot 文档更新日志 版本 更新日期 操作 描述 v1.0 2021/11/14 A 基础篇 v1.0.1 2021/11/30 U 更新基础篇错别字若干,不涉及内容变更 v2.0 20 ...
- Spring相关文章汇总篇【Spring,SpringBoot,SpringCloud等】
因为Spring框架包含的组件比较多,写的博客内容也比较多,虽然有分专栏但是依然不方便查找,所以专门用一篇文章来记录相关文章,会不定期更新. 一.Spring 1.基础内容 Spring介绍 Sp ...
- Profile,多配置管理,maven和spring.profiles.active可以做到
maven加上profiles标签,mvn clean package -P prod,maven打包的时候会将prod下的文件替换src/main/resources下的文件 <profile ...
- 一文了解SpringBoot的配置文件
本专栏将从基础开始,循序渐进,以实战为线索,逐步深入SpringBoot相关知识相关知识,打造完整的云原生学习步骤,提升工程化编码能力和思维能力,写出高质量代码.希望大家都能够从中有所收获,也请大家多 ...
- 【SpringBoot从入门到精通】第四章 Springboot配置文件
四.Springboot配置文件 4.1 默认配置文件 Springboot使用一个全局的配置文件,配置文件名是固定的,application. 配置文件的作用: 修改Springboot自动配置的默 ...
最新文章
- 区块链将重新定义世界
- 网易 for linux,NetEaseMusic
- python使用教程cmd啥意思-Python 中的cmd模块学习
- typedef 用法总结
- 洛谷 [SDOI2015]约数个数和 解题报告
- vue搜索好友_Vue实现类似通讯录功能(中)
- BZOJ-2780 Sevenk Love Oimaster(广义后缀自动机)
- Word2013中怎样设置同一文档内粘贴选项
- C++ opengl 深度缓冲区
- struts2数据库操作_Struts 2操作错误和操作消息
- DM***+GET***测试
- windows重置net use或者SMB协议
- 今日头条 Android ‘秒‘ 级编译速度优化
- 如何用电脑画平面坐标图_如何画坐标图?
- IO口电压域io-domain核对流程
- font: 12px/1.5 Tahoma, Helvetica, Arial, sans-serif;网页设计中的默认字体
- 无聊却很有意思的事情
- 如何配置NATAPP
- 活期利率是怎么计算的?
- Swift实战-豆瓣电台(四)歌曲列表的展现
热门文章
- python与vfp做桌面数据库_VFP数据库系统开发实例(附图)
- sql语言和php,SQL语言快速入门(三)_php
- linux下写sql语言,如何写这个sql语句?
- java的imshow方法_imshow窗口是截止的
- labview如何加载库_迈德威视工业相机LabView 开发指导
- 一个平行四边形可以分成四个_【八年级下】数学 平行四边形(3)菱形
- 四十五、Gtihub+Hexo+icarus搭建自己的博客
- crt脚本怎么添加等待时间_抖音文案怎么写吸引人?130个抖音文案素材、案例分享!...
- 系统调研450篇文献,微软亚洲研究院推出超详尽语音合成综述
- PaddlePaddle版Flappy-Bird—使用DQN算法实现游戏智能