之间的1.x用的是h2数据库,升级2的时候莫名的数据库搞没了,什么文章都没留下来,于是换到了mysql数据库:
我用的是hub.docker.com的镜像halohub/halo:2:
初次配置:docker run
-d
--name='0halo'
--net='bridge'
--pids-limit 2048
-e 'spring.r2dbc.url'='r2dbc:pool:mysql://ip:端口/数据库名'
-e 'spring.r2dbc.username'='用户名'
-e 'spring.r2dbc.password'='密码'
-e 'spring.sql.init.platform'='mysql'
-p '8090:8090/tcp'
-v '/mnt/文件夹路径/halo2/':'/root/.halo2':'rw' 'halohub/halo:2'
结果数据库还是h2,配置没有生效,后来经过检查改成了如下配置,生效了:
docker run
-d
--name='0halo'
--net='bridge'
--pids-limit 2048
-e 'halo.external-url'='https://www.yt6.cn/'
-e 'SPRING_R2DBC_URL'='r2dbc:pool:mysql://ip:端口/数据库名'
-e 'SPRING_R2DBC_USERNAME'='用户名'
-e 'SPRING_R2DBC_PASSWORD'='密码'
-e 'SPRING_SQL_INIT_PLATFORM'='mysql'
-l net.unraid.docker.managed=dockerman
-p '8090:8090/tcp'
-v '/mnt/disk2/appdata/halo/':'/root/.halo2':'rw' 'halohub/halo:2'
经过分析可能是因为数据库属于spring的底层配置,Spring Boot AutoConfiguration 阶段就需要用,这时spring.r2dbc.url没生效,而是用SPRING_R2DBC_URL是:
Spring 官方标准映射格式
Docker 官方推荐格式
符合 POSIX 规范
不依赖 shell 特性
所有容器平台都稳定支持
而halo.external-url是在spring启动之后的应用初始化阶段使用:
在应用 fully 启动后读取
即使不是标准 Spring 环境变量格式,也可能被正确注入
是 Halo 自己定义的配置