- 部署通常会有多个环境,如 ”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
@SpringBootApplication
public class HelloWorldApplication {public static void main(String[] args) {SpringApplication.run(HelloWorldApplication.class, args);
}
}
- src/main/java/com/xxc/hello/controller/HelloController.java
@RestController
public 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=dev
CMD java -jar hello.jar --spring.profiles.active=$env
- 容器启动减少 env 参数
- 以下命令指定了 prod 环境配置
docker run --name hello -dp 8080:8080 hello:latest -e env=prod