将 Spring-Actuator 与 ObjectDB 结合使用
Using Spring-Actuator in combination with ObjectDB
我正在 Spring-Boot using ObjectDB 中实现一个程序。为了实际使用 ObjectDB,我遵循了这种工作完美的方法 https://www.objectdb.com/forum/2523。
但是,一旦我想使用 Spring-Actuator,就会收到以下错误:
Error creating bean with name 'org.springframework.boot.actuate.autoconfigure.metrics.orm.jpa.HibernateMetricsAutoConfiguration': Injection of autowired dependencies failed; nested exception is com.objectdb.o.UserException: Unsupported unwrap(org.hibernate.SessionFactory.class) for EntityManagerFactory
关于如何解决此错误的任何想法?
我使用的代码与 link 中的代码完全相同。我在 pom 中添加了 Spring-Actuator,如下所示:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
发生故障是因为 Spring Boot 正在尝试解包 JPA EntityManagerFactory
以获取 Hibernate 的 SessionFactory
。它试图这样做,因为你在类路径上有 Hibernate(它是 spring-boot-starter-data-jpa
的依赖项)。根据 JPA 规范,unwrap
应该抛出一个 PersistenceException
“如果提供者不支持调用”。 Spring 引导捕获 PersistenceException
以防 unwrap
不受支持。不幸的是,ObjectDB 抛出了不符合规范的 com.objectdb.o.UserException
。我建议将其作为 ObjectDB 错误提出。
您可以通过从类路径中排除 Hibernate 来避免该问题。这将阻止 Spring Boot 尝试解包 Hibernate 的 SessionFactory
,防止 ObjectDB 错误发生。您可以通过在 pom.xml
:
中添加对 spring-boot-starter-data-jpa
依赖项的排除来实现
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</exclusion>
</exclusions>
</dependency>
我正在 Spring-Boot using ObjectDB 中实现一个程序。为了实际使用 ObjectDB,我遵循了这种工作完美的方法 https://www.objectdb.com/forum/2523。
但是,一旦我想使用 Spring-Actuator,就会收到以下错误:
Error creating bean with name 'org.springframework.boot.actuate.autoconfigure.metrics.orm.jpa.HibernateMetricsAutoConfiguration': Injection of autowired dependencies failed; nested exception is com.objectdb.o.UserException: Unsupported unwrap(org.hibernate.SessionFactory.class) for EntityManagerFactory
关于如何解决此错误的任何想法?
我使用的代码与 link 中的代码完全相同。我在 pom 中添加了 Spring-Actuator,如下所示:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
发生故障是因为 Spring Boot 正在尝试解包 JPA EntityManagerFactory
以获取 Hibernate 的 SessionFactory
。它试图这样做,因为你在类路径上有 Hibernate(它是 spring-boot-starter-data-jpa
的依赖项)。根据 JPA 规范,unwrap
应该抛出一个 PersistenceException
“如果提供者不支持调用”。 Spring 引导捕获 PersistenceException
以防 unwrap
不受支持。不幸的是,ObjectDB 抛出了不符合规范的 com.objectdb.o.UserException
。我建议将其作为 ObjectDB 错误提出。
您可以通过从类路径中排除 Hibernate 来避免该问题。这将阻止 Spring Boot 尝试解包 Hibernate 的 SessionFactory
,防止 ObjectDB 错误发生。您可以通过在 pom.xml
:
spring-boot-starter-data-jpa
依赖项的排除来实现
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</exclusion>
</exclusions>
</dependency>