由于"注入自动连接的依赖项失败",无法启动嵌入式Tomcat

Des*_*es 0 spring tomcat tomcat7

我是Java的新手,目前负责管理新的应用程序.我试图启动应用程序,它失败,出现以下错误:

Exception in thread "main" org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:687)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:967)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:956)
        at com.thinkbiganalytics.controller.Application.main(Application.java:53)
Caused by: org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
        at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.initialize(TomcatEmbeddedServletContainer.java:98)
        at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.<init>(TomcatEmbeddedServletContainer.java:75)
        at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getTomcatEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:378)
        at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:155)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:157)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)
        ... 7 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration.setFilterChainProxySecurityConfigurer(org.springframework.security.config.annotation.ObjectPostProcessor,java.util.List) throws java.lang.Exception; nested exception is org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'formBasedWebSecurityConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.security.authentication.AuthenticationProvider com.thinkbiganalytics.auth.FormBasedWebSecurityConfiguration.authenticationProvider; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationProvider': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.thinkbiganalytics.auth.AuthenticationService com.thinkbiganalytics.auth.AuthServiceAuthenticationProvider.authenticationService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.thinkbiganalytics.datalake.podium.restclient.PodiumRestClient com.thinkbiganalytics.datalake.podium.auth.PodiumAuthenticationService.podiumRestClient; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'podiumRestClientImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private boolean com.thinkbiganalytics.datalake.podium.restclient.PodiumRestClientImpl.useHttps; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'boolean'; nested exception is java.lang.IllegalArgumentException: Invalid boolean value [${podium.useHttps}]
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
Run Code Online (Sandbox Code Playgroud)

Bor*_*der 5

TL; DR:阅读Spring给你的错误.

让我们把错误系统地通过它:

Exception in thread "main" org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
            at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133)
            at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531)
            at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
            at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:687)
            at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
            at org.springframework.boot.SpringApplication.run(SpringApplication.java:967)
            at org.springframework.boot.SpringApplication.run(SpringApplication.java:956)
            at com.thinkbiganalytics.controller.Application.main(Application.java:53)
    Caused by: org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
            at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.initialize(TomcatEmbeddedServletContainer.java:98)
            at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.<init>(TomcatEmbeddedServletContainer.java:75)
            at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getTomcatEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:378)
            at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:155)
            at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:157)
            at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)
            ... 7 more
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration.setFilterChainProxySecurityConfigurer(org.springframework.security.config.annotation.ObjectPostProcessor,java.util.List) throws java.lang.Exception; nested exception is org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'formBasedWebSecurityConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.security.authentication.AuthenticationProvider com.thinkbiganalytics.auth.FormBasedWebSecurityConfiguration.authenticationProvider; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationProvider': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.thinkbiganalytics.auth.AuthenticationService com.thinkbiganalytics.auth.AuthServiceAuthenticationProvider.authenticationService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.thinkbiganalytics.datalake.podium.restclient.PodiumRestClient com.thinkbiganalytics.datalake.podium.auth.PodiumAuthenticationService.podiumRestClient; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'podiumRestClientImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private boolean com.thinkbiganalytics.datalake.podium.restclient.PodiumRestClientImpl.useHttps; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'boolean'; nested exception is java.lang.IllegalArgumentException: Invalid boolean value [${podium.useHttps}]
            at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
Run Code Online (Sandbox Code Playgroud)

首先我们有Exception in thread "main"- 除了由于"无法启动嵌入式容器"而导致状态爆炸之外,这并没有告诉我们任何事情.

好的,是什么造成的,让我们进入下一个级别:

Caused by: org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
Run Code Online (Sandbox Code Playgroud)

好的,那里不多.让我们进入一个新的水平:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration': Injection of autowired dependencies failed
Run Code Online (Sandbox Code Playgroud)

好的,现在我们到了某个地方 - WebSecurityConfiguration由于自动装配问题我们无法创建,但那是什么问题?

Could not autowire method: public void org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration.setFilterChainProxySecurityConfigurer(org.springframework.security.config.annotation.ObjectPostProcessor,java.util.List)
Run Code Online (Sandbox Code Playgroud)

啊,好吧,Spring无法自动使用该方法,为什么不呢?

nested exception is org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'formBasedWebSecurityConfiguration'
Run Code Online (Sandbox Code Playgroud)

啊,好吧 - 所以它无法自动装配它无法创建的方法formBasedWebSecurityConfiguration.为什么不?

Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.security.authentication.AuthenticationProvider
Run Code Online (Sandbox Code Playgroud)

啊,不AuthenticationProvider.为什么不?

Could not autowire field: private com.thinkbiganalytics.auth.AuthenticationService com.thinkbiganalytics.auth.AuthServiceAuthenticationProvider.authenticationService
Run Code Online (Sandbox Code Playgroud)

啊,不authenticationService.为什么不?

Could not autowire field: com.thinkbiganalytics.datalake.podium.restclient.PodiumRestClient
Run Code Online (Sandbox Code Playgroud)

啊,不PodiumRestClient.为什么不?

Could not autowire field: private boolean com.thinkbiganalytics.datalake.podium.restclient.PodiumRestClientImpl.useHttps
Run Code Online (Sandbox Code Playgroud)

好吧,它无法创建PodiumRestClientImpl它,因为它无法自动装配boolean useHttps.为什么不?

Failed to convert value of type 'java.lang.String' to required type 'boolean'; nested exception is java.lang.IllegalArgumentException: Invalid boolean value [${podium.useHttps}]
Run Code Online (Sandbox Code Playgroud)

所以它无法自动装配,PodiumRestClientImpl.useHttps因为它无法将String值转换${podium.useHttps}为a boolean.很公平.

因此,似乎您在自动装配配置值时未正确使用SpEL,或者您尚未PropertySource配置为将占位符解析为配置值.