gpt4 book ai didi

java - Spring Boot JPA 基本配置优先于应用程序配置

转载 作者:搜寻专家 更新时间:2023-10-31 19:33:30 25 4
gpt4 key购买 nike

上下文:使用 Spring Boot 0.5.0-M7、MySQL 和 Commons DBCP、Java 配置、@EnableAutoConfiguration 设置。

我已经定义了应用程序的 DataSource bean、JpaVendorAdapter bean、LocalContainerEntityManagerFactoryBeanTransactionManager bean,并具有特定的配置支持 DBCP 和一些 Hibernate 设置。在应用程序启动时,DataSource 肯定会受到尊重(调试确认),但其他 bean 会被忽略。这似乎是 JpaBaseConfiguration 类的结果,它由 WebMvcConfiguration 和其中一个安全过滤器混合在一起。在任何情况下,除其他外,问题是 Hibernate 设置将 hbm2ddl(模式导出)设置为 drop-create,这样每次服务器重新启动时我都会丢失数据。

我查看了源代码,发现似乎可以提供设置 JpaBaseConfiguration 中遵守的环境变量的功能,但这似乎无法设置 bean 来完成相同的工作。我尝试排除一些与数据相关的自动配置类,但无济于事。对于设置我可能遗漏的非默认数据配置,是否还有其他期望?

最佳答案

在检测到 hibernate 时查看 Spring Boot 0.5.0.M7 的代码 (HibernateEntityManager) 和 Springs LocalContainerEntityManagerFactoryBean默认情况下将始终配置 hibernate 。您可以通过将某些属性放在 application.properties 中来覆盖它们。

spring.jpa.hibernate.naming-strategy - 将设置使用的命名策略默认值 = ImprovedNamingStrategy . spring.jpa.hibernate.ddl-auto - 将设置 hibernate.hbm2ddl.auto 默认值 = create-drop。

您可以设置的一般 JPA 属性

  1. spring.jpa.show-sql - 在日志中显示 sql
  2. spring.jpa.database-platform - 对于 hibernate ,这是方言
  3. spring.jpa.database - 使用的数据库(不要与database-platform一起使用!)。
  4. spring.jpa.generate-ddl - 如果生成 ddl,默认为 false(被 spring.jpa.hibernate.ddl-auto 属性覆盖)

如果您想指定一些非默认属性,请在它们前面加上 spring.jpa.properties然后它们将被添加到 jpaPropertiesLocalContainterEntityManagerFactoryBean .

包含 HibernateJpaAutoConfiguration与任何其他配置无关,它只是由检测到的某些类触发

@ConditionalOnClass({ LocalContainerEntityManagerFactoryBean.class,
EnableTransactionManagement.class, EntityManager.class,
HibernateEntityManager.class })
@ConditionalOnBean(DataSource.class)
@EnableTransactionManagement

关于java - Spring Boot JPA 基本配置优先于应用程序配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21250627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com