Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Boot JPA基本配置优先于应用程序配置_Java_Spring_Jpa_Spring Boot - Fatal编程技术网

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

Java Spring Boot JPA基本配置优先于应用程序配置,java,spring,jpa,spring-boot,Java,Spring,Jpa,Spring Boot,上下文:使用Spring Boot 0.5.0-M7、MySQL和Commons DBCP、Java配置、@EnableAutoConfigurationset 我已经定义了应用程序的DataSourcebean、JpaVendorAdapterbean、LocalContainerEntityManagerFactoryBean和TransactionManagerbean,并使用特定配置来支持DBCP和一些Hibernate设置。在应用程序启动时,数据源肯定会得到尊重(调试确认),但其他be

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

我已经定义了应用程序的
DataSource
bean、
JpaVendorAdapter
bean、
LocalContainerEntityManagerFactoryBean
TransactionManager
bean,并使用特定配置来支持DBCP和一些Hibernate设置。在应用程序启动时,
数据源
肯定会得到尊重(调试确认),但其他bean会被忽略。这似乎是
JpaBaseConfiguration
类的结果,该类由
WebMvcConfiguration
及其一个安全过滤器引入。在任何情况下,除其他事项外,问题在于Hibernate设置将hbm2ddl(模式导出)设置为
drop create
,这样每当服务器重新启动时,我都会丢失数据


我查看了源代码,发现似乎可以设置环境变量,这些变量将在
JpaBaseConfiguration
中得到尊重,但这似乎无法设置bean来完成相同的工作。我试图排除一些与数据相关的自动配置类,但没有效果。设置非默认数据配置是否还有其他一些我可能缺少的期望?

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

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

可以设置的常规JPA属性

  • spring.jpa.show sql
    -在日志中显示sql
  • spring.jpa.database platform
    -对于hibernate,这是一种方言
  • spring.jpa.database
    -使用的数据库(不要与数据库平台一起使用!)
  • spring.jpa.generate ddl
    -如果生成ddl,则默认为false(由
    spring.jpa.hibernate.ddl auto
    属性覆盖)
  • 如果您想指定一些非默认属性以
    spring.jpa.properties
    作为前缀,那么它们将被添加到
    LocalContainertEntityManagerFactoryBean
    jpapProperties

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

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

    感谢@dave syer和@m-deinum的支持。结果是快照构建成功了,M7不尊重我自己的bean,但现在一切正常了。为了子孙后代,我提取了我在应用程序中所做工作的精华,并将其应用到启动JPA示例中。可以找到来源。Dave,如果你认为有更简单的方法,请告诉我。

    我认为如果你使用快照,你会发现JPA配置中的单个
    @bean
    可以通过提供自己的快照来覆盖。可能使用M7时,您必须明确排除hibernate自动配置。MySQL的ddl设置应为“无”。你确定你没有使用嵌入式数据库吗?非常确定,我在调试日志中看到与MySQL的连接,我的表有数据,重新启动时它被删除并重新创建(在MySQL Workbench中确认)调试到SchemaExport显示删除创建设置生效。我将尝试创建一个快照,看看行为是否会改变。