[英]Spring Boot application - difference in startup time with “mvn spring-boot:run” and “java -jar”
[英]Spring Boot+Java 9 Modules+Intellij Communicaty Edn: Run configuration behaves differently to jar and mvn spring-boot:run
我正在嘗試使用 JPA 和 H2 嵌入式數據庫來學習 Spring-Boot。 我創建了一個 repo,它復制了我在 github 上可用的問題。 它基於教程; 來源在這里找到。
我的最終狀態是使用以下所有方法將其作為單模塊項目運行:
目前 main() 方法的作用與其他兩種方法不同,但我不知道為什么。
如果我刪除 module-info.java 文件,那么所有方法都退出 0。我知道我可以忽略它,但我想在這里學習,所以我想知道發生了什么。
Intellij 構建信息:
IntelliJ IDEA 2020.3.2(社區版)Build #IC-203.7148.57,構建於 2021 年 1 月 26 日
使用 jdk 15 設置但沒有 module-info.java:
將以下 module-info.java 文件添加到 /src/main/java:
module demo {
exports com.example.accessingdatajpa;
opens com.example.accessingdatajpa;
requires org.slf4j;
requires spring.boot;
requires spring.boot.autoconfigure;
requires spring.context;
requires spring.data.commons;
requires java.persistence;
requires java.sql;
}
通過在 intellij 中運行 main() 來運行應用程序並獲得出口 1:
c.eaAccessingDataJpaApplication:使用 Java 15.0.2 開始 AccessingDataJpaApplication ...
c.eaAccessingDataJpaApplication:未設置活動配置文件,回退到默認配置文件:默認
.sdr.c.RepositoryConfigurationDelegate: Bootstrapping Spring Data JPA repositories in DEFAULT mode.
.sdr.c.RepositoryConfigurationDelegate:在 166 毫秒內完成 Spring 數據存儲庫掃描。 找到 1 個 JPA 存儲庫接口。
osjdeEmbeddedDatabaseFactory: 啟動嵌入式數據庫: url='jdbc:h2:mem:3cb47b25-69e1-4122-bc0f-69447d509171;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', username='sa'
s.c.a.AnnotationConfigApplicationContext:上下文初始化期間遇到異常 - 取消刷新嘗試:
org.springframework.beans.factory.BeanCreationException:在 class 路徑資源 [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class] 中定義名稱為“entityManagerFactory”的 bean 創建錯誤:調用 init 方法失敗; 嵌套異常是 javax.persistence.PersistenceException: Unable to resolve persistence unit root URL
osjdeEmbeddedDatabaseFactory:關閉嵌入式數據庫:url='jdbc:h2:mem:3cb47b25-69e1-4122-bc0f-69447d509171;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false'
作為 jar 或使用 mvn spring-boot 運行:運行並獲取退出代碼 0:
... c.eaAccessingDataJpaApplication: Starting AccessingDataJpaApplication v0.0.1-SNAPSHOT using Java 15.0.2 on... ... c.eaAccessingDataJpaApplication: No active profile set, falling > back to default profiles: default
... .sdr.c.RepositoryConfigurationDelegate: Bootstrapping Spring Data JPA repositories in DEFAULT mode.
... .sdr.c.RepositoryConfigurationDelegate:在 126 毫秒內完成 Spring 數據存儲庫掃描。 找到 1 個 JPA 存儲庫接口。
... com.zaxxer.hikari.HikariDataSource:HikariPool-1 - 已啟動。
... o.hibernate.jpa.internal.util.LogHelper:HHH000204:處理 PersistenceUnitInfo [名稱:默認值]
任何幫助將不勝感激。
我發現我的 module-info.java 文件中缺少以下要求語句。 現在運行, mvn spring-boot:run 和運行 jar 的行為方式相同。
requires java.xml.bind;
requires net.bytebuddy;
requires com.fasterxml.classmate;
我仍然不知道為什么這是 run main() 而不是其他兩種方法所必需的。 我相信它與 hibernate 有關,因為我在添加 java.xml.bind 后看到以下異常。
BeanCreationException (entityManagerFactory -> HibernateJpaConfiguration.class)
看起來我需要在我的 module-info.java 中明確指定傳遞依賴項,如果我使用的依賴項的模塊聲明需要傳遞,我認為我不必這樣做。
java.xml.bind 現在正在從兩個來源讀取 javax.activation 並顯示為錯誤。 其中之一來自spring-boot-starter-test ,盡管它在我的測試 scope 中。 隨着我了解更多信息,我將更新此答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.