当前位置: 首页 > 知识库问答 >
问题:

为什么Spring Boot 2.0应用程序不运行架构。sql?

范侯林
2023-03-14

当我使用Spring Boot 1.5时,在应用程序启动时,Hibernate执行模式。设置了适当的配置后,sql文件位于/resources文件夹中。在Spring Boot 2.0发布后,此功能不再工作。我在文档中找不到有关此更改的任何信息。这是我的申请表。属性文件内容:

spring.datasource.url=...
spring.datasource.username=...
spring.datasource.password=...

#spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.hibernate.ddl-auto=none
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

Spring Boot 2.0中是否有一些变化,或者这是一个错误/问题?

共有3个答案

滑令
2023-03-14

这对我很管用,你可以试试。将数据源类型设置为您喜欢的类型,而不是HikariCP。

spring.datasource.initialization-mode=always
spring.datasource.type=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
spring.jpa.hibernate.ddl-auto=none
仲孙鸿畴
2023-03-14

如果加载未嵌入的数据库,则在Spring Boot 2中需要添加:

spring.datasource.initialization-mode=always

查看迁移指南:

基本数据源初始化现在仅对嵌入式数据源启用,并将在使用生产数据库时立即关闭。新的Spring。数据源。初始化模式(替换spring.datasource.initialize)提供了更多的控制。

我曾经有一个类似的问题,即使它是一个h2(所以它是一个嵌入式DB),我的h2配置是由my-test配置文件激活的。

我的测试课是这样的:

@RunWith(SpringRunner.class)
@SpringBootTest                     // does not work alone
@ActiveProfiles("my-test")
public class MyEntityRepositoryTest {

问题是@SpringBootTest本身并没有初始化测试数据库。我必须使用@DataJpaTest@SpringBootTest@AutoConfigreTestDatabase。例子

@RunWith(SpringRunner.class)
@DataJpaTest                       // works
@ActiveProfiles("sep-test")
public class MyEntityRepositoryTest {

@RunWith(SpringRunner.class)
@SpringBootTest                     // these two
@AutoConfigureTestDatabase          // together work
@ActiveProfiles("sep-test")
public class MyEntityRepositoryTest {
叶鸿煊
2023-03-14

在此处查看文件。

在基于JPA的应用程序中,您可以选择让Hibernate创建模式或使用schema.sql,但不能两者兼而有之。如果使用schema.sql.,请确保禁用spring.jpa.hibernate.ddl自动

你有Spring。jpa。冬眠ddl auto=创建拖放,这就是架构的原因。sql未执行。看起来这就是Spring Boot的工作方式。

编辑

我认为问题(不是真正的问题)是你的应用程序指向一个mysql实例。

请参阅当前的Spring Boot属性:

spring.datasource.initialization-mode=embedded # Initialize the datasource with available DDL and DML scripts.

默认值是嵌入式-例如,仅当您正在运行嵌入式数据库时才初始化,例如H2。

也可以在这里看到Stephan的答案。他说:

在项目中添加spring.datasource.initialization模式就足够了。

所以试着设置:

spring.datasource.initialization-mode=always
 类似资料:
  • 我在运行钢筋应用程序时遇到了类似的问题 基本上,我想从以下位置运行演示代码:https://github.com/hukl/fancyapi 当我在根目录中时,我会: ERL如何找到fancyapi代码?

  • 例如。 这应该运行一个简单的hello world应用程序,摘自oracle文档。然而,当我‘运行’这个代码,没有窗口打开。取而代之的是打开一个名为“Java”的应用程序。看起来'java'只是一个位于'jdk1.8.0_25.jdk/contents/home/bin'中的'UNIX可执行文件‘。应用程序'java'绝对不显示任何东西,并且在没有强制退出的情况下无法关闭。 我在MacBook上运

  • 我已经将谷歌Pixel升级到了Android9.0/Pie。当我尝试运行Android studio中的应用程序时,我在列表中看不到Google Pixel,只有一个名为的空设备。当我运行我的应用程序时,Android studio尝试安装该应用程序,但随后失败。 看起来Android Studio不再识别这款手机了。几个小时前,它在奥利奥(8.x)下运行得非常好。

  • 我有一个JavaFX应用程序,它调用一些JNI代码,使用预加载程序jar,并使用JDK1.7编译。现在,当我使用JRE7在另一台计算机上运行jar时,通过: 双击jar:它启动,但无法加载包含库的JNI代码,因此被卡住。 有人能告诉我这三种情况有什么不同吗?

  • 这里我们提供了一个关于 Tendermint 区块链应用程序推荐架构的简要指南。 下图提供了一个极好的例子: 这里的最终用户应用程序是 Cosmos Voyager,在左下角。 Voyager 与本地轻客户端守护进程公开的 REST API 通信。轻客户端守护进程是一个特定于应用程序的程序,它与 Tendermint 节点通信,并通过 Tendermint Core RPC 验证 Tendermi