如果运行Spring Boot应用程序时不存在Postgres数据库,请创建该数据库

时间:2018-07-04 12:26:14

标签: spring postgresql spring-boot spring-data

我正在使用PostgreSQLspring-boot-2.0.1,并希望我的应用程序创建不存在的数据库。 我的application.properties

中有以下选项
spring.jpa.hibernate.ddl-auto=update
spring.jpa.generate-ddl=true
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL94Dialect

spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=postgres
spring.datasource.password=123

以上所述,我遇到错误:

Caused by: org.postgresql.util.PSQLException: FATAL: database "mydb" does not exist

知道我缺少什么吗?

3 个答案:

答案 0 :(得分:2)

如果spring boot中不存在该数据库,则可以创建该数据库

至少我们使用mysql

spring.datasource.url=jdbc:mysql://localhost:3306/mydb?createDatabaseIfNotExist=true

所以它应该与postgresql

相同
spring.datasource.url= jdbc:postgresql://localhost:5432/mydb?createDatabaseIfNotExist=true

答案 1 :(得分:0)

由于所有Postgres安装都带有默认数据库,因此从技术上讲,应该可以在一开始(应用程序启动时)连接到该数据库,然后调用

CREATE DATABASE

这是您可以在spring初始化之前但在读取属性之后(例如,在Environment Post Processor

中以编程方式进行的操作)

需要如此早的调用,因为您可能一方面希望利用spring boot读取的属性,但是到spring boot bean开始使用新创建的数据库时,它将处于“可操作”状态

因此,从技术上讲,这是可能的。但是,我看不到这种情况的实际用例。 如果是用于测试,那么您可以完美地使用默认的Postgres数据库,该数据库在问题的开头就提到过。

如果用于生产环境-通常DBA不允许这样做,因为为了能够运行该CREATE DATABASE语句,连接到Postgres(在这种情况下为Spring Boot应用程序)的用户应具有一个非常“强”的 createdb 特权,这是DBA不想共享的。

答案 2 :(得分:0)

简答:

<块引用>

它不能像我们在 MySQL 中所做的那样完成,您需要找到一种方法 自己做 Spring Configuration