在 AWS 上部署带有 H2 数据库的 Spring Boot 应用程序

Posted

技术标签:

【中文标题】在 AWS 上部署带有 H2 数据库的 Spring Boot 应用程序【英文标题】:Deploy a Spring Boot App with H2 Database on AWS 【发布时间】:2021-08-23 18:00:12 【问题描述】:

我想在 AWS 上使用内部 H2 数据库部署我的 Java Web 应用程序。 我创建了 application-prod.properties,例如:

server.port=5000
spring.datasource.url=jdbc:h2:./src/main/resources/data/demo
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.h2.console.settings.trace=false
spring.h2.console.settings.web-allow-others=false
spring.h2.console.settings.trace=false
spring.jpa.hibernate.ddl-auto=none

我将我的应用程序打包为 jar 并将其加载到弹性 beanstack。但是当我部署时,数据库总是消失,我需要重新创建整个架构。 我只想为我的示例应用程序使用内部 h2 数据库,并且我想将数据保存在数据库文件中。 有谁知道我怎么能做到这一点? 我的应用是一个基于vaadin的spring boot应用。

感谢和亲切的问候,

空指针

【问题讨论】:

H2 是一个内存数据库,取决于应用程序运行时的生命周期。因此,当您部署并重新启动应用程序时。您的数据库也将被清除干净。 谢谢!在我的本地机器上,它没有被清理。数据库文件在定义的属性中。这也应该在 aws 部署之后。 我的猜测是,AWS 会在您每次重新启动应用程序时删除所有本地文件。尝试创建文件,重启后是否保留文件。 我打包成jar也会有问题吗? 【参考方案1】:
/src/main/resources/data/demo 

可能在 AWS 上不存在,因为这是您本地计算机上的目录,而您正在部署 JAR 文件。

尝试像这样指向用户主页:

spring.datasource.url=jdbc:h2:~/demo

但请注意,如果 BeansTalk 将重新创建应用程序,则数据可能会丢失。

【讨论】:

谢谢!我会在晚上试试这个。

以上是关于在 AWS 上部署带有 H2 数据库的 Spring Boot 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

AWS - ECS - 如何在现有 ECS(带有 1 个 EC2)实例上重新部署更新的 Docker 映像?

在 AWS Elastic Beanstalk 上部署后运行 PHP 脚本

AWS上带有nginx和gunicorn的Flask应用程序[重复]

是否可以在带有 h2 或 sybase 数据库的 android 上使用 ormlite?

在 AWS Elastic Beanstalk 上使用 Wordpress CMS - 部署问题(页面未加载)

带有 Django 的 AWS copilot 从未完成部署