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框架.之前有零零散散学过一些 ...
随机推荐
- web3js 进行转账
1.准备阶段 部署以太坊geth 安装nodejs npm install web3 npm install npm install ethereumjs-tx 其中, web3是1.0.0.beta ...
- sqlite当天时间的23:59:59
select strftime('%Y-%m-%d %H:%M:%S','now','+1 day','localtime','start of day','-1 seconds')
- char[]的toString() 和 String.valueOf(char[])的区别
之前看到其他博客里说,toString 和 String.valueOf()功能相同,但是我发现对于char[]来说并不是这样的: 示例1: 先比较一下: public static void mai ...
- Ubuntu如何使用Vscode写C++代码
(一). 下载Vscode (1). 打开Ubuntu软件 (2). 搜索Vscode,下载并运行. (二). 安装C++ (1). 看到右边的列表,点击最下面的 (2). 然后我们搜索和下载 C++ ...
- parallel::ForkManager
use Parallel::ForkManager; my $MAX_PROCESSES=10; #申明最大进程数(一次创建的进程越多,越耗内存): my $pm = new Parallel:: ...
- Java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind异常
端口被占用,可能是其他程序占用,也有可能是自己代码逻辑不对,比如BZ在写SocketServer时把添加端口的代码放进了while里(sasasa.....). 查看本机端口是否被占用:netstat ...
- ccf-集合竞价-201412-3
这道题数据量很小,所以用前缀和直接暴力解决了 首先将浮点数转换为整数; int_p=(int)(dou_p*100+0.5); 必须加一个eps,否则浮点数运算会有误差 然后从高到低枚举 #inclu ...
- [工作积累] UE4 并行渲染的同步 - Sync between FParallelCommandListSet & FRHICommandListImmediate calls
UE4 的渲染分为两个模式1.编辑器是同步绘制的 2.游戏里是FParallelCommandListSet并行派发的. mesh渲染也分两类,static mesh 使用TStaticMeshDra ...
- 用vs2010打开使用vs2013升级后的WP工程
项目在win7+vs2010的环境中建立的,后来在win8.1+vs2013的环境下修改和完善: 但是所有功能实现后发现wp7项目在使用vs2013打开后因为单向升级的原因,项目只能被编译为wp8项目 ...
- vim 常用 NERDTree 快捷键
ctrl + w + h 光标 focus 左侧树形目录 ctrl + w + l 光标 focus 右侧文件显示窗口 ctrl + w + w 光标自动在左右侧窗口切换 ctrl + w + r 移 ...