java - GraalVM 错误 - 创建在类路径资源中定义的名称为“entityManagerFactory”的 bean 时出错
问题描述
我正在尝试使用 spring-native 和 postgresql 构建一个基本的 CRUD 应用程序。我尝试使用 GraalVM SDK 运行 spring-native。本机应用程序使用成功构建 -mvn -Pnative-image package
但是当我尝试运行可执行文件时,它显示此错误 -
Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]:
整个堆栈跟踪 - https://notepad.pw/0x128ze2
我的 Pom.xml 文件-
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.oyo</groupId>
<artifactId>springnative</artifactId>
<version>1</version>
<name>springnative</name>
<description>Demo project for Spring Native</description>
<properties>
<java.version>1.8</java.version>
<spring-native.version>0.9.2</spring-native.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.experimental</groupId>
<artifactId>spring-native</artifactId>
<version>${spring-native.version}</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<profiles>
<profile>
<id>native-image</id>
<build>
<plugins>
<plugin>
<groupId>org.graalvm.nativeimage</groupId>
<artifactId>native-image-maven-plugin</artifactId>
<version>21.0.0.2</version>
<configuration>
<!-- The native image build needs to know the entry point to your application -->
<mainClass>com.demo.springnative.SpringnativeApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>native-image</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>exec</classifier>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
<image>
<builder>paketobuildpacks/builder:tiny</builder>
<env>
<BP_NATIVE_IMAGE>true</BP_NATIVE_IMAGE>
</env>
</image>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.experimental</groupId>
<artifactId>spring-aot-maven-plugin</artifactId>
<version>${spring-native.version}</version>
<executions>
<execution>
<id>test-generate</id>
<goals>
<goal>test-generate</goal>
</goals>
</execution>
<execution>
<id>generate</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.hibernate.orm.tooling</groupId>
<artifactId>hibernate-enhance-maven-plugin</artifactId>
<version>${hibernate.version}</version>
<executions>
<execution>
<id>enhance</id>
<goals>
<goal>enhance</goal>
</goals>
<configuration>
<failOnError>true</failOnError>
<enableLazyInitialization>true</enableLazyInitialization>
<enableDirtyTracking>true</enableDirtyTracking>
<enableAssociationManagement>true</enableAssociationManagement>
<enableExtendedEnhancement>false</enableExtendedEnhancement>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/release</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/release</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
Application.properties-
spring.datasource.url=jdbc:postgresql://localhost:5432/crudDB
spring.datasource.username=postgres
spring.datasource.password=1234
spring.datasource.initialization-mode=always
spring.datasource.initialize=true
spring.datasource.schema=classpath:/migration.sql
spring.datasource.continue-on-error=true
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database=postgresql
migration.sql 也出现在正确的位置。
解决方案
推荐阅读
- kotlin - 基于 GSON 的 DSL 导致 NPE
- android - 利用 Android Navigation 组件处理带有初始屏幕活动的深层链接
- javascript - 如何在 react-native 的低高度 TextInput 中正确使用大字体?
- php - 单击时手风琴菜单未打开
- python-3.x - 如何使用 Selenium 在网站上点击课程?
- ruby - 'for' 标记从未关闭/如果 elsif else 在液体逻辑中包含页面?
- extentreports - 每次测试运行后未附加范围报告 3.1.5
- google-apps-script - 如何使用共享谷歌驱动器文件夹上的谷歌应用脚本删除特定文件夹中的特定类型文件(CSV 文件)
- html - 没有一堆不同的图像大小和媒体查询,更有效的方法来使图像响应?
- javascript - 在 JavaScript 中使用解构的正确方法