entitymanagerbean创建异常仅适用于shadowjar、java.lang.illegalargumentexception:不是参数化类型使用apache beam库

myzjeezk  于 2021-07-23  发布在  Java
关注(0)|答案(0)|浏览(263)

只有在运行shadowjar时,在创建entitymanagerbean时才会出现以下错误。
bootjar或bootrun没有给出任何异常;很好用。我需要创建一个阴影罐。
例外

  1. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'elabsEntityManager' defined in class path resource [com/sample/orchestrator/config/ElabsDataSourceConfig.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a parameterized type!
  2. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1788)
  3. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:609)
  4. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531)
  5. at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
  6. at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
  7. at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
  8. at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
  9. at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1159)
  10. at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
  11. at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588)
  12. at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144)
  13. at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767)
  14. at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)
  15. at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426)
  16. at org.springframework.boot.SpringApplication.run(SpringApplication.java:326)
  17. at org.springframework.boot.SpringApplication.run(SpringApplication.java:1311)
  18. at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300)
  19. at com.sample.orchestrator.OrchestratorApplication.main(OrchestratorApplication.java:27)
  20. Caused by: java.lang.IllegalArgumentException: Not a parameterized type!
  21. at org.jboss.jandex.Type.asParameterizedType(Type.java:228)
  22. at org.jboss.jandex.Indexer.resolveTypePath(Indexer.java:768)
  23. at org.jboss.jandex.Indexer.resolveTypePath(Indexer.java:780)
  24. at org.jboss.jandex.Indexer.resolveTypePath(Indexer.java:775)
  25. at org.jboss.jandex.Indexer.resolveTypeAnnotation(Indexer.java:718)
  26. at org.jboss.jandex.Indexer.resolveTypeAnnotations(Indexer.java:613)
  27. at org.jboss.jandex.Indexer.index(Indexer.java:1602)
  28. at org.hibernate.boot.archive.scan.spi.ClassFileArchiveEntryHandler.toClassDescriptor(ClassFileArchiveEntryHandler.java:64)
  29. at org.hibernate.boot.archive.scan.spi.ClassFileArchiveEntryHandler.handleEntry(ClassFileArchiveEntryHandler.java:52)
  30. at org.hibernate.boot.archive.internal.JarFileBasedArchiveDescriptor.visitArchive(JarFileBasedArchiveDescriptor.java:147)
  31. at org.hibernate.boot.archive.scan.spi.AbstractScannerImpl.scan(AbstractScannerImpl.java:48)
  32. at org.hibernate.boot.model.process.internal.ScanningCoordinator.coordinateScan(ScanningCoordinator.java:76)
  33. at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.prepare(MetadataBuildingProcess.java:107)
  34. at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:254)
  35. at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:168)
  36. at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:52)
  37. at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365)
  38. at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)
  39. at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396)
  40. at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341)
  41. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1847)
  42. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1784)
  43. ... 17 more

构建.gradle

  1. dependencies {
  2. // Comment these beam libraries to not see the error in shadow jar But i need this
  3. implementation 'org.apache.beam:beam-sdks-java-core:2.27.0'
  4. implementation 'org.apache.beam:beam-runners-direct-java:2.27.0'
  5. implementation 'org.apache.beam:beam-runners-google-cloud-dataflow-java:2.27.0'
  6. // ....other dependencies
  7. }
  8. jar {
  9. manifest {
  10. attributes "Main-Class": "com.sample.orchestrator.OrchestratorApplication"
  11. }
  12. from {
  13. configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
  14. }
  15. }
  16. shadowJar {
  17. zip64 = true
  18. exclude "**/Log4j2Plugins.dat"
  19. // Required for Spring
  20. mergeServiceFiles()
  21. append 'META-INF/spring.handlers'
  22. append 'META-INF/spring.schemas'
  23. append 'META-INF/spring.tooling'
  24. transform(PropertiesFileTransformer) {
  25. paths = ['META-INF/spring.factories' ]
  26. mergeStrategy = "append"
  27. }
  28. }

下面是与实体管理器相关的bean。

  1. @Configuration
  2. @EnableJpaRepositories(basePackages = {
  3. "com.sample.orchestrator.database.elabs.repository" }, entityManagerFactoryRef = "elabsEntityManager", transactionManagerRef = "elabsTransactionManager")
  4. @PropertySource("classpath:application-${spring.profiles.active}.yml")
  5. public class ElabsDataSourceConfig {
  6. @Value("${spring.datasource-elabs.driver-class-name}")
  7. private String driverClassName;
  8. @Value("${spring.datasource-elabs.url}")
  9. private String url;
  10. @Value("${spring.datasource-elabs.username}")
  11. private String username;
  12. @Value("${spring.datasource-elabs.password}")
  13. private String password;
  14. @Value("${spring.jpa.database-platform}")
  15. private String dialect;
  16. @Value("$(spring.jpa.hibernate.ddl-auto)")
  17. private String ddlAuto;
  18. @Value("$(spring.jpa.show-sql)")
  19. private String showSql;
  20. @Bean(name = "datasource-elabs")
  21. public DataSource datasourceElabs() {
  22. DriverManagerDataSource dataSource = new DriverManagerDataSource();
  23. dataSource.setDriverClassName(driverClassName);
  24. dataSource.setUrl(url);
  25. dataSource.setUsername(username);
  26. dataSource.setPassword(password);
  27. return dataSource;
  28. }
  29. @Bean("elabsEntityManager")
  30. public LocalContainerEntityManagerFactoryBean elabsEntityManager() {
  31. LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
  32. em.setDataSource(datasourceElabs());
  33. HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
  34. em.setJpaVendorAdapter(vendorAdapter);
  35. em.setPackagesToScan(new String[] { "com.sample.orchestrator.model.database.elabs" });
  36. // em.setPersistenceXmlLocation("classpath:persistence.xml");
  37. HashMap<String, Object> properties = new HashMap<>();
  38. properties.put("hibernate.dialect", dialect);
  39. properties.put("hibernate.ddl-auto", ddlAuto);
  40. properties.put("hibernate.show-sql", showSql);
  41. em.setJpaPropertyMap(properties);
  42. return em;
  43. }
  44. @Bean("elabsTransactionManager")
  45. public PlatformTransactionManager elabsTransactionManager() {
  46. JpaTransactionManager transactionManager = new JpaTransactionManager();
  47. transactionManager.setEntityManagerFactory(elabsEntityManager().getObject());
  48. return transactionManager;
  49. }
  50. }

这是一个示例程序。
要运行,请包括
./gradlew bootRun -Pdev ./gradlew bootJar 并在运行时包含“-dspring.profiles.active=dev” ./gradlew shadowJar 并包括“-dspring.profiles.active=dev”--错误步骤。
我之所以不使用bootjar,是因为我正在用应用程序创建一个google数据流管道,依赖jar文件不是从bootjar暂存的(beam需要依赖的绝对路径来暂存相关文件)。但是我尝试了一个非spring maven着色jar,所有依赖文件都被暂存。希望能用spring shadowjar达到同样的效果。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题