在 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?