代码之家  ›  专栏  ›  技术社区  ›  Patrick D

Spring Boot不会加载用户定义的方言

  •  1
  • Patrick D  · 技术社区  · 7 年前

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

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

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

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

    正在应用中。属性:

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

    此外,我可以在hibernate中定义这一点。属性:

    hibernate.dialect=org.test.util.JsonPostgreSQL94Dialect
    

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

       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中有什么东西覆盖了我对方言的定义吗?有没有更合适的方法来定义方言?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Patrick D    7 年前

    问题是 Spring Auto-Reconfiguration 当项目部署到我们的云铸造环境时就开始了。自动重新配置Bean是活动的,负责更改应用程序的方言。这是因为我的数据库(PostgreSQL)的VCAP服务被bean检测到,然后被自动配置。

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

    JBP_CONFIG_SPRING_AUTO_RECONFIGURATION: '{enabled: false}'
    

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