2017-05-31 32 views
1

我想从我的Java类生成数据库结构如何DB模式生成之后,但在应用程序启动

jpa.generate-ddl: true 
jpa.ddl-auto: true 

此外,我需要运行SQL脚本之前的应用程序将是因为我有

执行sql脚本

@PostConstruct我使用这些数据的方法。

你能举例说明如何在sprin引导中做到这一点?

+0

你使用Hibernate?尝试使用spring.jpa.hibernate.ddl-auto =选项 在弹簧引导中使用的选项列表是 验证:验证架构,不更改数据库。 更新:更新架构。 create:创建模式,破坏以前的数据。 create-drop:在会话结束时删除架构 因此为避免数据丢失,请使用update。 –

回答

0

具有所需功能的简单弹簧启动应用程序可以在此处找到。 https://github.com/salilotr89/Spring-boot-postgres-dbinit

Spring JDBC有一个DataSource初始值设定项功能。 Spring Boot默认启用它,并从标准位置schema.sql data.sql(位于类路径的根目录)中加载SQL。

此外春天启动将加载模式 - $ {}平台的.sql数据 - $ {}平台.SQL文件(如果存在),其中平台是spring.datasource.platform的价值,例如您可以选择将其设置为数据库的供应商名称(hsqldb,h2,oracle,mysql,postgresql等)。

Spring Boot默认启用Spring JDBC初始化程序的快速失败功能,所以如果脚本导致异常,应用程序将无法启动。脚本位置可以通过设置spring.datasource.schema和spring.datasource.data进行更改,如果spring.datasource.initialize = false,那么这两个位置都不会被处理。

要禁用失效快速,您可以设置spring.datasource.continue-on-error = true。这可以在应用程序成熟并部署几次后很有用,因为脚本可以充当'穷人的迁移' - 插入失败意味着数据已经存在,因此不需要阻止应用程序运行,例如。

如果您想在JPA应用程序(使用Hibernate)中使用schema.sql初始化,那么如果Hibernate尝试创建相同的表,ddl-auto = create-drop将导致错误。为了避免这些错误,将ddl-auto明确设置为“”(首选)或“无”。无论您是否使用ddl-auto = create-drop,都可以使用data.sql来初始化新数据。

http://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html

相关信息:Spring Boot - Loading Initial Data

+0

我试过了。 1.它不适用于我2.我应该这样做,以防万一如果某些配置文件激活 – gstackoverflow

+0

您是否使用maven?如果你愿意,你可以使用flyway,这将有助于你的应用以很好的方式扩展。详情请参阅https://egkatzioura.com/2015/05/14/database-migration-with-flyway/ –

+0

我使用gradle和flyway。 – gstackoverflow

0

所有你需要做的是一个发生在application.properties中文件所在的文件夹资源名为data.sql文件。

该文件中的任何查询都将在应用程序启动之前和创建数据库之后执行。

想了解更多请查看此链接 http://www.baeldung.com/spring-boot-data-sql-and-schema-sql

相关问题