乐趣区

关于springboot:SpringBoot容器化的多环境配置

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
@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

容器配置

  • 在 Dockerfile 中这样设置
... 略

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
退出移动版