solon

solon 使用 Docker 构建 注意事项

2023-05-09  本文已影响0人  HelloMUJO

常规使用 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 开头的环境变量,可以直接转为 应用属性。(问题解决,可以愉快的玩耍了)

image.png
上一篇 下一篇

猜你喜欢

热点阅读