APIM digiRunner

digiRunner Open-Source 怎麼讓 DB 資料不消失

陳瑞泰 John Chen 2025/06/08 23:31:06
5

digiRunner Open-Source 怎麼讓 DB 資料不消失

找到原始資料指令

先找到2份 source code.

1.啟動腳本

docker run -it -d -p 31080:18080 tpisoftwareopensource/digirunner-open-source

2.Docker file

ENTRYPOINT [ "java", "-cp", "/opt/digirunner/digirunner.jar" ]
CMD [ \
    "-Xms2g", \
    "-Xmx4g", \
    "-DdigiRunner.token.key-store.path=/opt/digirunner/keys", \
    "-Dserver.port=18080", \
    "org.springframework.boot.loader.launch.PropertiesLauncher" \
]

依原始資料'合併'為自己的script

1. 等價指令

這個指令和 readme.md 上的功能等價

docker run -it -p 31080:18080 \
tpisoftwareopensource/digirunner-open-source \
"-Xms2g" \
"-Xmx4g" \
"-DdigiRunner.token.key-store.path=/opt/digirunner/keys" \
"-Dserver.port=18080" \
"org.springframework.boot.loader.launch.PropertiesLauncher" \

2. 設定 jdbc connection string

可以問 AI H2 database 怎麼讓它的資料落地,
你會得到:

jdbc:h2:./h2/dgrdb;

關鍵就是原本的 ':mem:dgrdb' 變成有路徑的 './h2/dgrdb'

3. 設定 db file 要能在 container 中持久化

-v h2:/h2

4. 完整的 script

db file 不存在時, 第一次啟動請執行此 script, 與下一步相比對, 它的 'mode=always' 值不同, always 表示自動建立 db file , 載入 ddl。

docker run -it -p 31080:18080 \
-v h2:/h2 \
tpisoftwareopensource/digirunner-open-source \
"-Xms2g" \
"-Xmx4g" \
"-DdigiRunner.token.key-store.path=/opt/digirunner/keys" \
"-Dserver.port=18080" \
"-Dspring.datasource.url=jdbc:h2:./h2/dgrdb;DB_CLOSE_DELAY=-1;NON_KEYWORDS=VALUE;Mode=MySQL" \
"-Dspring.datasource.username=dba" \
"-Dspring.datasource.password=1234" \
"-Dspring.sql.init.mode=always" \
"org.springframework.boot.loader.launch.PropertiesLauncher"

5. 完整的 script

若做過上一步, 或是 db file 早就存在, 請執行此命令,
mode = never

docker run -it -p 31080:18080 \
-v h2:/h2 \
tpisoftwareopensource/digirunner-open-source \
"-Xms2g" \
"-Xmx4g" \
"-DdigiRunner.token.key-store.path=/opt/digirunner/keys" \
"-Dserver.port=18080" \
"-Dspring.datasource.url=jdbc:h2:./h2/dgrdb;DB_CLOSE_DELAY=-1;NON_KEYWORDS=VALUE;Mode=MySQL" \
"-Dspring.datasource.username=dba" \
"-Dspring.datasource.password=1234" \
"-Dspring.sql.init.mode=never" \
"org.springframework.boot.loader.launch.PropertiesLauncher"

執行 & 驗證

1.查找 h2 volume

docker volume ls | grep 'h2' 找看看有沒有名為 'h2' 的 volume。

查找 h2 volume 截圖

2.第一次啟動

上一動查無 h2 volume, 所以執行 mode=always 的腳本。

第一次啟動截圖

3.登入 & 異動 db

可以新增一筆 setting 來測試等一下重啟, 它會不會消失。

登入與異動 db 截圖

4.第二次啟動

由於 h2 volume 已存在了, 所以等一下執行的 mode 要改為 never

第二次啟動前的設定

這是第二次啟動

第二次啟動截圖

再次登入驗證

再次登入驗證截圖

結論

 

digiRunner Open Source 版本可以透過 override CMD 的方式變更 application.properties 的值, 還有更多的屬性特徵等待你發掘哦!

## 參考原文

https://hackmd.io/@PlxyJDuRSLKQ8WkiZzngmg/ryXlYlAZgx

 

陳瑞泰 John Chen