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

问题描述 投票:0回答:1

我有一个应用程序,它使用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的定义吗?是否有更合适的方式来定义方言?

hibernate spring-data-jpa cloudfoundry
1个回答
0
投票

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

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

JBP_CONFIG_SPRING_AUTO_RECONFIGURATION: '{enabled: false}'

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

© www.soinside.com 2019 - 2024. All rights reserved.