SpringBoot容器化的多环境配置
- 部署通常会有多个环境,如"dev"/"test"/"prod"等环境
- 容器化部署通常应用环境变量,而非手动批改配置
- 例子来自《Spring Boot实战派》中,并进行简化
简略例子
- 为了简化,疏忽了其余无关紧要的文件
- 示例只配置了"env"的值
* src * main * java * com.xxc.hello // 门路太长就间接这么写了 * controller * HelloController.java * HelloWorldApplication.java * resources * application.yml * application-dev.yml * application-prod.yml* pom.xml* Dockerfile
- src/main/resources/application-dev.yml
env: dev-env
- src/main/resources/application-prod.yml
env: prod-env
- src/main/resources/application.yml
- 下方代码标识application-dev.yml文件失效
spring: profiles: active: dev
- src/main/java/com/xxc/hello/HelloWorldApplication.java
@EnableAutoConfiguration@SpringBootApplicationpublic class HelloWorldApplication { public static void main(String[] args) { SpringApplication.run(HelloWorldApplication.class, args); }}
- src/main/java/com/xxc/hello/controller/HelloController.java
@RestControllerpublic class HelloController { @Value("${env}") private String env; @GetMapping("/env") public String getEnv() { return env; }}
- 应用"http://localhost:8080/env" 获取到的值为"env-dev"
应用参数指定失效配置
- 先将我的项目打包成"hello.jar"
- 应用"--spring.profiles.active=<环境>"参数来指定配置文件
- 失效优先级:命令参数 > application-<指定环境>.yml > application.yml
# 不指定则应用application.yml里指定的环境java -jar hello.jar# 环境中指定失效环境# 以下命令代表指定应用application-prod.yml配置java -jar hello.jar --spring.profiles.active=prod
容器配置
...略ENV env=devCMD java -jar hello.jar --spring.profiles.active=$env
- 容器启动减少env参数
- 以下命令指定了prod环境配置
docker run --name hello -dp 8080:8080 hello:latest -e env=prod