APIM
digiRunner
digiRunner Open-Source 怎麼讓 DB 資料不消失
2025/06/08 23:31:06
0
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。
2.第一次啟動
上一動查無 h2 volume, 所以執行 mode=always 的腳本。
3.登入 & 異動 db
可以新增一筆 setting 來測試等一下重啟, 它會不會消失。
4.第二次啟動
由於 h2 volume 已存在了, 所以等一下執行的 mode 要改為 never
這是第二次啟動
再次登入驗證
結論
digiRunner Open Source 版本可以透過 override CMD 的方式變更 application.properties 的值, 還有更多的屬性特徵等待你發掘哦!
## 參考原文
https://hackmd.io/@PlxyJDuRSLKQ8WkiZzngmg/ryXlYlAZgx