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

hos*_*ude 5 java spring jpa spring-boot

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

我已经使用特定配置定义了应用程序的DataSourcebean,JpaVendorAdapterbean LocalContainerEntityManagerFactoryBeanTransactionManagerbean,以支持DBCP和一些Hibernate设置.在应用程序启动时,DataSource它肯定受到尊重(调试确认),但其他bean被忽略.这似乎是该JpaBaseConfiguration课程的结果,该课程由WebMvcConfiguration其中一个安全过滤器组成.在任何情况下,问题都在于Hibernate设置将hbm2ddl(模式导出)设置为drop-create,这样每次服务器重新启动时我都会丢失数据.

我仔细查看了源代码,发现似乎有可能设置环境变量,这些变量将被尊重JpaBaseConfiguration,但这似乎无法设置bean来完成同样的工作.我试图排除一些与数据相关的自动配置类无济于事.是否有其他期望设置非默认数据配置我可能会丢失?

M. *_*num 9

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

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

您可以设置的常规JPA属性

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

如果你想speficy一些没有默认属性前缀他们spring.jpa.properties那么他们将被添加到jpaPropertiesLocalContainterEntityManagerFactoryBean.

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

@ConditionalOnClass({ LocalContainerEntityManagerFactoryBean.class,
    EnableTransactionManagement.class, EntityManager.class,
    HibernateEntityManager.class })
@ConditionalOnBean(DataSource.class)
@EnableTransactionManagement
Run Code Online (Sandbox Code Playgroud)


hos*_*ude 0

感谢@dave-syer 和@m-deinum 的投入。事实证明 SNAPSHOT 构建成功了,M7 没有尊重我自己的 Bean,但现在一切按预期工作。为了方便后代,我提取了我在应用程序中所做的工作的精髓,并将其应用到 Boot JPA 示例中。来源可以在这里找到。戴夫,如果您认为有更简单的方法可以做到这一点,请告诉我。