Spring Boot不会加载用户定义的Dialect

时间:2017-11-13 18:13:13

标签: hibernate spring-data-jpa cloudfoundry

我有一个应用程序,它使用Spring Boot JPA Hibernate的自定义自定义方言。

自定义方言如下:

public class JsonPostgreSQL94Dialect extends PostgreSQL94Dialect {
   public JsonPostgreSQL94Dialect() {
      this.registerColumnType(Types.JAVA_OBJECT, "jsonb");
   }
}

此方言扩展了PostgreSQL方言,并添加了对jsonb数据类型的支持。

现在,当我使用Spring Boot启动我的应用程序时,在某些环境中它将不会加载相应的Dialect。我试过用以下方式定义方言:

在application.properties中:

spring.jpa.properties.hibernate.dialect=org.test.util.JsonPostgreSQL94Dialect
spring.jpa.database-platform=org.test.util.JsonPostgreSQL94Dialect

另外我可以在hibernate.properties中定义它:

hibernate.dialect=org.test.util.JsonPostgreSQL94Dialect

以下是使用Java Buildpack在Cloud Foundry中启动应用程序的Spring Boot日志:

   2017-11-13T18:03:54.79+0000 [APP/PROC/WEB/1] OUT 2017-11-13 18:03:54.792  INFO 19 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect

启动将无法识别我定义的方言。它默认为普通的PostgreSQL方言,导致我的应用程序在无法识别的数据类型上失败。

Spring Boot中有什么东西覆盖了我对Dialect的定义吗?是否有更合适的方式来定义方言?

1 个答案:

答案 0 :(得分:0)

当项目部署到我们的Cloud Foundry环境时,问题是Spring Auto-Reconfiguration正在进行中。自动重新配置Bean处于活动状态,负责更改我的应用程序的方言。这是因为我的数据库(PostgreSQL)的VCAP服务被bean检测到然后被自动配置。

我的解决方案是通过将以下环境变量添加到我的应用程序清单来关闭自动重新配置Bean:

JBP_CONFIG_SPRING_AUTO_RECONFIGURATION: '{enabled: false}'

禁用自动重新配置后,我的方言不再被Spring覆盖。