常规使用 docker-compose 构建并启动 spring-boot 项目逻辑
docker-compose -f ./docker-compose-dev.yaml -p snowy-web-app up -d --build --remove-orphans
docker-compose-dev.yaml 文件 指定环境变量 ACTIVE_PROFILE
version: '3'
services:
server:
build: './'
image: registry.cn-hangzhou.aliyuncs.com/hello-world:latest
ports:
- "8080:8080"
environment:
ACTIVE_PROFILE: dev
Dockerfile 文件 读取 ACTIVE_PROFILE 环境变量
# 构建内容省略...
# 指定容器启动时执行的脚本
ENTRYPOINT ["java","-jar","-Dspring.profiles.active=${ACTIVE_PROFILE}","/hello-world.jar"]
# EXPOSE 映射端口
EXPOSE 8080
这样 sping-boot 项目在启动的时候,会读取指定的配置文件。
切换到 solon 框架的时候,这种指定方式不起作用了,因为 solon 框架不支持读取系统环境变量${XXX},但是 solon 提供了一种更优雅的方式实现,操作如下
docker-compose -f ./docker-compose-dev.yaml -p snowy-web-app up -d --build --remove-orphans
docker-compose-dev.yaml 文件 指定环境变量 solon.env: dev
version: '3'
services:
server:
build: './'
image: registry.cn-hangzhou.aliyuncs.com/hello-world:latest
ports:
- "8080:8080"
environment:
solon.env: dev
Dockerfile 文件 不用指定环境变量
# 构建内容省略...
# 指定容器启动时执行的脚本
ENTRYPOINT ["java","-jar","/hello-world.jar"]
# EXPOSE 映射端口
EXPOSE 8080
solon 启动代码
@Slf4j
public class WebApp {
public static void main(String[] args) {
Solon.start(WebApp.class, args, app -> {
log.info("env={}", app.cfg().env());
log.info("启动结束");
});
}
}
日志输出
[Solon] App: Start loading
16:58:09.544 [main] INFO com.hxqx.WebApp - env=dev
16:58:09.546 [main] INFO com.hxqx.WebApp - 启动结束
[Solon] Logging: console {level=INFO, enable=true}
[Solon] App: Plugin starting
[Solon] Session: Local session state plugin is loaded
[Solon] View: load: FreemarkerRender
[Solon] View: load: org.noear.solon.view.freemarker.FreemarkerRender
[Solon] View: mapping: .ftl=FreemarkerRender
[Solon] App: Bean scanning
[Solon] Connector:main: jlhttp: Started ServerConnector@{HTTP/1.1,[http/1.1]}{http://localhost:8080}
[Solon] Server:main: jlhttp: Started (jlhttp 2.6/2.2.13) @11ms
[Solon] View: mapping: @json=StringSerializerRender#SnackSerializer
[Solon] View: mapping: @type_json=StringSerializerRender#SnackSerializer
[Solon] App: End loading elapsed=474ms pid=1 v=2.2.13
因为 solon 框架 把 solon 开头的环境变量,可以直接转为 应用属性。(问题解决,可以愉快的玩耍了)
![](https://img.haomeiwen.com/i234146/074c8f2a777eef9c.png)
网友评论