spring boot profiles 实现多环境下配置切换 docker版
1,前言
开发环境总需要调试,docker直接部署不需要调试,环境配置不一样,这里的目的只是,在docker文件环境与开发环境使用不同的配置文件,项目结构如下

2,设置项目配置文件
默认配置文件 application.yml
spring:
profiles:
active: ${spring.profiles.active}
这里有个占位符:${spring.profiles.active} 可以在pom.xml,dockerfile,或 maven(mvn package –P dev)编译时带入,当然也可直接写死 dev 或 prod等
开发配置文件 application-dev.yml
# 开发配置
server:
port:
生成环境配置文件 application-prod.yml
# 生产配置
server:
port:
3,修改pom.xml文件
加入 profiles 环境配置,这里用于测试 在profiles 组中加入 dev,test ,prod 分别代表,开发,测试,生成三个环境的配置
<profiles>
<profile>
<id>dev</id>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
</properties>
<!--没有指定其他profile为激活状态时,该profile就默认会被激活-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<spring.profiles.active>test</spring.profiles.active>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
</properties>
</profile>
</profiles>
build 中加入一个plugin节点内容如下,主要是为了修改spring配置文件占位符(注意是添加不是修改)。
<!-- 这个如果不配置,只能在application.yml中只能通过@...@带入,docker又无法通过@...@带入 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<!-- 使用${..}作为占位符 -->
<delimiter>${*}</delimiter>
</delimiters>
<!-- 同时还支持使用默认的占位符(@..@) -->
<useDefaultDelimiters>true</useDefaultDelimiters>
</configuration>
</plugin>
build 中加入一个plugin节点内容如下,这个主要用于docker 的编译
<!-- Docker maven plugin -->
<plugin>
<!-- https://mvnrepository.com/artifact/com.spotify/docker-maven-plugin -->
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.war</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- Docker maven plugin -->
3,创建一个Dockerfile文件
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD demo-docker-0.0.1-SNAPSHOT.war app.war
RUN sh -c 'touch /app.war'
RUN echo "Asia/Shanghai" > /etc/timezone
#这里prod代表生产环境
ENV spring.profiles.active="prod"
ENTRYPOINT ["java","-jar","/app.war"]
文件内容这里不多做解释
4,测试
(1)直接在idea中启用调试

因为pom.xml的profiles节点中设置了“dev”为默认,所以这里,默认启用调试时,走的是“dev”
(2)设置Run/Debug configurations 的Active profiles = prod 覆盖 pom.xml默认配置dev为“prod”

运行结果如下:

发现这里已经修改为 prod
(3),使用marvn编译命令覆盖默认环境配置,在项目目录执行命令如下:
mvn package -P prod
执行结果如下:

(4),执行docker编译

启动docker结果如下:

五,注意事项
1,application,Dokerfile,pom.xml 节点名称要一致“spring.profiles.active”

spring boot profiles 实现多环境下配置切换 docker版的更多相关文章
- spring boot实现不同生产环境下的文件配置
配置不同生产环境 本文适用于开发环境下需要打包项目至生产环境,避免开发环境的配置文件泄露. 设置maven 作用:1. 手动调节运行时的不同环境 2. 打包时可以不会有其它环境的文件 注:每次换环境前 ...
- Spring Boot项目在多环境下(开发、生产或测试环境)调用不同配置文件方式
写在前面 最近由于项目要求,原先的项目只有开发环境的项目配置,后来不利于线上测试,于是,最近对于SpringBoot这部分多环境配置在网上查找了相关资料,并实现了配置,于是为了防止遗忘,特在此进行总结 ...
- Spring Boot 系列(三)属性配置&自定义属性配置
在使用spring boot过程中,可以发现项目中只需要极少的配置就能完成相应的功能,这归功于spring boot中的模块化配置,在pom.xml中依赖的每个Starter都有默认配置,而这些默认配 ...
- 一文掌握 Spring Boot Profiles
Spring Boot Profiles 简介 Profile 的概念其实很早在 Spring Framework 就有了,在 Spring Framework 3.1 版本引入了注解 @Profil ...
- 源码解读 Spring Boot Profiles
前言 上文<一文掌握 Spring Boot Profiles> 是对 Spring Boot Profiles 的介绍和使用,因此本文将从源码角度探究 Spring Boot Profi ...
- 分布式事务、多数据源、分库分表中间件之spring boot基于Atomikos+XADataSource分布式事务配置(100%纯动态)
本文描述spring boot基于Atomikos+DruidXADataSource分布式事务配置(100%纯动态),也就是增加.减少数据源只需要修改application.properties文件 ...
- 让Spring Boot项目启动时可以根据自定义配置决定初始化哪些Bean
让Spring Boot项目启动时可以根据自定义配置决定初始化哪些Bean 问题描述 实现思路 思路一 [不符合要求] 思路二[满足要求] 思路三[未试验] 问题描述 目前我工作环境下,后端主要的框架 ...
- Spring Boot 多模块项目创建与配置 (一) (转)
Spring Boot 多模块项目创建与配置 (一) 最近在负责的是一个比较复杂项目,模块很多,代码中的二级模块就有9个,部分二级模块下面还分了多个模块.代码中的多模块是用maven管理的,每个模块都 ...
- Spring Boot 多模块项目创建与配置 (一)
最近在负责的是一个比较复杂项目,模块很多,代码中的二级模块就有9个,部分二级模块下面还分了多个模块.代码中的多模块是用maven管理的,每个模块都使用spring boot框架.之前有零零散散学过一些 ...
随机推荐
- 封装qq分享静态库到cocopod
封装qq分享静态库到cocopod 1,创建framework库,到腾讯开放平台(open.qq.com)申请项目appid 2,将iOS SDK中的TencentOpenAPI.framework ...
- reducer 按key聚合
#coding=utf8 import sys import itertools import json reload(sys) sys.setdefaultencoding("utf8&q ...
- EDF转TXT,EDF转mat,rec转TXT eeg
https://files.cnblogs.com/files/myohao/edfsample.zip
- VScode编辑器使用
快捷键: shift + alt + F 格式化
- Linux安装配置rabbitmq
Step1:安装erlang 1)下载erlang wget http://www.rabbitmq.com/releases/erlang/erlang-19.0.4-1.el7.centos.x8 ...
- mysql数据库查询和聚合函数
1.模糊查询 like % 表示多个任意字符 _ 表示任意一个字符 例如:查询黄姓同学 select * from student where name '黄%' select * from stud ...
- postman Could not get any response。
浏览器输入地址可以返回结果,但是由于返回的json没有格式,看起来比较麻烦,用postman却报错Could not get any response. 可以注意到下面写了可能的情况:比如服务器无响应 ...
- 关于Java数据转存的中MultipartFile转File的问题(转)
转自http://www.cnblogs.com/zuoxiaoxia/p/6116942.html 错误背景:由于文件储存在第三方的服务器上,所有需要讲将接收到MultipartFile文件 转换为 ...
- 小妖精的完美游戏教室——东方PROJECT,同人,墙
//================================================================//// Copyright (C) 东方同人社// All Rig ...
- hdu 2824 欧拉函数 O(nlogn) 和O(n)
裸题 O(nlogn): #include <cstdio> #include <iostream> #include <algorithm> using name ...