Docker中的H2 DB文件-此数据库为空

jhkqcmku  于 2023-05-06  发布在  Docker
关注(0)|答案(1)|浏览(234)

我有一个基本的Sping Boot 应用程序,其中包含一个文件中的H2数据库。
application.properties:

spring.datasource.url=jdbc:h2:file:./src/main/resources/database/db
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

此数据库文件是预填充的。当我使用mvn spring-boot:run启动应用程序时,我可以看到DB不是空的。
我用mvn spring-boot:build-image构建了一个Docker镜像,并用docker run -p 8080:8080 --rm myapp:tag运行它。当访问数据库时,我在容器日志中得到以下内容:

(...)
Table "XXX" not found (this database is empty)
(...)

就像容器看不到DB文件一样。为什么会这样呢?

ubof19bj

ubof19bj1#

正如@Joachim Sauer在评论中回答的那样,原因是spring.datasource.url中定义的路径,在本例中为./src/main/resources/database/db,在运行时读取。而且,一旦打包到Docker镜像中,这个路径就变得无关紧要了。
如果它对某人有用,这里是我如何使它工作的,如果H2 DB文件是./src/main/resources/database/db.mv.db
1.创建一个新文件application-docker.properties
1.添加此属性:spring.datasource.url=jdbc:h2:file:./BOOT-INF/classes/database/db
1.使用mvn spring-boot:build-image构建映像(无更改)
1.用docker run -p 8080:8080 --rm -e "SPRING_PROFILES_ACTIVE=docker" myapp:tag运行图像

相关问题