创建Springbean时出现奇怪的lambda错误

创建Springbean时出现奇怪的lambda错误,spring,lambda,java-8,wildfly,Spring,Lambda,Java 8,Wildfly,首先我道歉,因为我不知道在哪里提出这个问题,Wildfly、Spring、JDK还是 我有一些SpringBean通过SpringJava配置初始化,如下所示,使用一些lambda表达式 @Bean @DependsOn("dataSource") public Flyway applyMigration(final DataSource dataSource) { tenants().parallelStream().forEach(schema -> { fi

首先我道歉,因为我不知道在哪里提出这个问题,Wildfly、Spring、JDK还是

我有一些SpringBean通过SpringJava配置初始化,如下所示,使用一些lambda表达式

@Bean
@DependsOn("dataSource")
public Flyway applyMigration(final DataSource dataSource) {

    tenants().parallelStream().forEach(schema -> {
        final Flyway flyway = new Flyway();
        flyway.setBaselineOnMigrate(true);
        flyway.setOutOfOrder(true);
        flyway.setDataSource(dataSource);
        flyway.setSchemas(schema);
        flyway.migrate();
    });

    return new Flyway();
}
但它给出了以下错误

Caused by: java.lang.invoke.LambdaConversionException: 
Type mismatch in captured lambda parameter 0: 
expecting interface javax.sql.DataSource, found interface javax.sql.DataSource
我们使用的是Wildfly 9.0.2服务器+Spring 4.2.3+Postgres+JDK 8u30+Linux

完整的堆栈跟踪如下

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flyway' defined in com.mycomp.config.persistence.migration.DBMigrationConfiguration: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.flywaydb.core.Flyway]: Factory method 'flyway' threw exception; nested exception is java.lang.BootstrapMethodError: call site initialization exception
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findDefaultEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:575)
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:541)
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.resolveEntityManager(PersistenceAnnotationBeanPostProcessor.java:707)
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.getResourceToInject(PersistenceAnnotationBeanPostProcessor.java:680)
    at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:354)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.flywaydb.core.Flyway]: Factory method 'flyway' threw exception; nested exception is java.lang.BootstrapMethodError: call site initialization exception
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
Caused by: java.lang.BootstrapMethodError: call site initialization exception
    at java.lang.invoke.CallSite.makeSite(CallSite.java:328)
    at java.lang.invoke.MethodHandleNatives.linkCallSite(MethodHandleNatives.java:296)
    at com.mycomp.config.persistence.migration.DBMigrationConfiguration.applyMigration(DBMigrationConfiguration.java:76)
    at com.mycomp.config.persistence.migration.DBMigrationConfiguration.flyway(DBMigrationConfiguration.java:70)
    at com.mycomp.config.persistence.migration.DBMigrationConfiguration$$EnhancerBySpringCGLIB$$1a6b7996.CGLIB$flyway$1(<generated>)
    at com.mycomp.config.persistence.migration.DBMigrationConfiguration$$EnhancerBySpringCGLIB$$1a6b7996$$FastClassBySpringCGLIB$$b29fa4c.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:318)
    at com.mycomp.config.persistence.migration.DBMigrationConfiguration$$EnhancerBySpringCGLIB$$1a6b7996.flyway(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
Caused by: java.lang.invoke.LambdaConversionException: Type mismatch in captured lambda parameter 0: expecting interface javax.sql.DataSource, found interface javax.sql.DataSource
    at java.lang.invoke.AbstractValidatingLambdaMetafactory.validateMetafactoryArgs(AbstractValidatingLambdaMetafactory.java:256)
    at java.lang.invoke.LambdaMetafactory.metafactory(LambdaMetafactory.java:303)
    at java.lang.invoke.CallSite.makeSite(CallSite.java:289)
原因:org.springframework.beans.factory.BeanCreationException:创建名为com.mycop.config.persistence.migration.DBMigrationConfiguration中定义的“flyway”的bean时出错:通过工厂方法实例化bean失败;嵌套异常为org.springframework.beans.beanstantiationException:未能实例化[org.flywaydb.core.Flyway]:工厂方法“Flyway”引发异常;嵌套异常为java.lang.BootstrapMethodError:调用站点初始化异常
位于org.springframework.beans.factory.support.ConstructorResolver.InstanceUsingFactoryMethod(ConstructorResolver.java:599)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.InstanceUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
位于org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
位于org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
位于org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
位于org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
位于org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
位于org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
位于org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findDefaultEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:575)
位于org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.FindentialManagerFactory(PersistenceAnnotationBeanPostProcessor.java:541)
位于org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.resolveEntityManager(PersistenceAnnotationBeanPostProcessor.java:707)
位于org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.getResourceToInject(PersistenceAnnotationBeanPostProcessor.java:680)
位于org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169)
位于org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
位于org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:354)
原因:org.springframework.beans.beans实例化异常:未能实例化[org.flywaydb.core.Flyway]:工厂方法“Flyway”引发异常;嵌套异常为java.lang.BootstrapMethodError:调用站点初始化异常
位于org.springframework.beans.factory.support.SimpleInstallationStrategy.instantiate(SimpleInstallationStrategy.java:189)
位于org.springframework.beans.factory.support.ConstructorResolver.InstanceUsingFactoryMethod(ConstructorResolver.java:588)
原因:java.lang.BootstrapMethodError:调用站点初始化异常
位于java.lang.invoke.CallSite.makeSite(CallSite.java:328)
位于java.lang.invoke.MethodHandleNatives.linkCallSite(MethodHandleNatives.java:296)
在com.mycop.config.persistence.migration.dbmigration.applyMigration(dbmigration.java:76)上
位于com.mycop.config.persistence.migration.dbmigtionconfiguration.flyway(dbmigtionconfiguration.java:70)
在com.mycop.config.persistence.migration.dbmigration配置$$EnhancerBySpringCGLIB$$1a6b7996.CGLIB$flyway$1()
在com.mycop.config.persistence.migration.DBMigrationConfiguration$$EnhancerBySpringCGLIB$$1a6b7996$$FastClassBySpringCGLIB$$b29fa4c.invoke()上
位于org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
位于org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:318)
在com.mycop.config.persistence.migration.DBMigrationConfiguration$$EnhancerBySpringCGLIB$$1a6b7996.flyway()上
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:483)
位于org.springframework.beans.factory.support.SimpleInstallationStrategy.instantiate(SimpleInstallationStrategy.java:162)
原因:java.lang.invoke.LambdaConversionException:捕获的lambda参数0中的类型不匹配:应为接口javax.sql.DataSource,找到接口javax.sql.DataSource
位于java.lang.invoke.AbstractValidatingLambdaMetafactory.validateMetafactoryArgs(AbstractValidatingLambdaMetafactory.java:256)
位于java.lang.invoke.LambdaMetafactory.metafactory(LambdaMetafactory.java:303)
位于java.lang.invoke.CallSite.makeSite(CallSite.java:289)

通过更新到java 8 update 66解决了这个问题,我们使用的是java 8 u30

您在没有lambdas的情况下尝试过吗?每当您遇到报告的两个相同名称的类型不匹配时,都会有人在wi周围捣乱