您好我有一個具有以下一般結構的專案:
- 核心 Spring 應用程式,其中集成了一個 API。
- 基于 API 構建的插件。
插件獨立編譯并存盤在名為“plugins”的檔案夾中,該檔案夾在Core Application運行的目錄中生成。
插件包含@Entity從 API 擴展超類的類。
當獨立于 Spring 加載時,核心 Spring 應用程式可以成功地從插件中讀取和加載任何類。(我自己寫了ClassLoader和ClassLoaderManager)
我的問題:我必須@Entity將插件中的類加載到 Spring 中,以便它將@Entity類識別為“托管型別”。
失敗的解決方案: 我試圖通過使用這個 Bean 來解決這個問題:
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
LocalContainerEntityManagerFactoryBean bean = new LocalContainerEntityManagerFactoryBean();
bean.setDataSource(dataSource);
bean.setPackagesToScan(// I inject the packages here);
bean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
CustomUnitPostProcessor postProcessor = new CustomPostProcessor("base package");
bean.setPersistenceUnitPostProcessors(postProcessor);
return bean;
}
public class CustomUnitPostProcessor extends ClasspathScanningPersistenceUnitPostProcessor {
public CustomUnitPostProcessor(String basePackage) {
super(basePackage);
}
@Override
public void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui) {
// Adding Jar File Package URLs to PUI via pui.addJarFileURL();
super.postProcessPersistenceUnitInfo(pui);
}
}
不幸的是,由于org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [// Class which is supposed to be loaded]. 這打破了EntityManagerFactory.
我愿意接受任何可以解決我失敗的解決方案或達到相同結果的解決方案。
-AwesomeDude091
uj5u.com熱心網友回復:
該解決方案基于我失敗的解決方案,并涉及將自定義類加載器服務注入休眠狀態。完整答案的鏈接:如何將 Hibernate ClassLoaderService 注入 Spring Boot?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/521169.html
標籤:爪哇春天弹簧靴休眠jpa
