IllegalStateException - @ ComponentScanning a springframework package

I worked in the following tutorial:

http://spring.io/guides/gs/rest-service/

I initially managed to get the code to work correctly (run the finished tutorial, send an HTTP message and get the correct answer) and successfully expand it.

After further expansion, I came across the following exception:

java.lang.IllegalStateException: Could not evaluate condition on org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration#propertySourcesPlaceholderConfigurer due to internal class not found. This can happen if you are @ComponentScanning a springframework package (eg if you put a @ComponentScan in the default package by mistake) at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:51) at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:92) at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForBeanMethod(ConfigurationClassBeanDefinitionReader.java:174) at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:136) at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:116) at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:330) at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:243) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:254) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:94) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:611) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:109) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691) at org.springframework.boot.SpringApplication.run(SpringApplication.java:321) at org.springframework.boot.SpringApplication.run(SpringApplication.java:961) at org.springframework.boot.SpringApplication.run(SpringApplication.java:950) at com.aharrison.hello.Application.main(Application.java:15) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134) 

Since then I have abandoned the code right up to what is shown in the example, but I am still experiencing an exception.

I think this may be due to the following problem, although it is marked as closed:

https://github.com/spring-projects/spring-boot/issues/2050

I am not very experienced with Spring, so I cannot fully understand what is being discussed.

Here are my current classes:

Greeting.java:

 package com.aharrison.hello; public class Greeting { private final long id; private final String content; public Greeting(long id, String content) { this.id = id; this.content = content; } public long getId() { return id; } public String getContent() { return content; } } 

GreetingController:

 package com.aharrison.hello; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.concurrent.atomic.AtomicLong; @RestController public class GreetingController { private static final String template = "Hello, %s!"; private final AtomicLong counter = new AtomicLong(); @RequestMapping("/greeting") public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) { return new Greeting(counter.incrementAndGet(), String.format(template, name)); } } 

Application.java:

 package com.aharrison.hello; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.ComponentScan; /** * Created by Adam on 12/26/2014. */ @ComponentScan @EnableAutoConfiguration public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 

pom.xml:

 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.aharrison</groupId> <artifactId>SpringRestAPI</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.6.1.RELEASE</version> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>2.12.2</version> </dependency> </dependencies> 

Questions:

  • What causes an exception in this situation? Is there something wrong with my code above, or is it related to the problem environment?
  • When the exception says, "If you mistakenly put @ComponentScan in the default package," which is the default package to which it refers? Does this apply to the current situation?

Thanks in advance.

+5
source share
3 answers

When I run the code you provided, everything works fine. The only change I had to make was in pom.xml , where I added the following:

 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.0.RELEASE</version> </parent> 

This allows you to use the entire Spring boot mechanism and is required so that you can run the application.

The following shows the successful output of my test run:

  . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.2.0.RELEASE) 2014-12-27 17:41:12.472 INFO 4065 --- [ main] com.aharrison.hello.Application : Starting Application on My-MacBook-Pro.local with PID 4065 (/Users/wassgren/test/target/test-classes started by wassgren in /Users/wassgren/test/test-di) 2014-12-27 17:41:12.506 INFO 4065 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot .context.embedded.AnnotationConfigEmbeddedWebApplicationContext@ 4a668b6e: startup date [Sat Dec 27 17:41:12 CET 2014]; root of context hierarchy 2014-12-27 17:41:13.407 INFO 4065 --- [ main] osbfsDefaultListableBeanFactory : Overriding bean definition for bean 'beanNameViewResolver': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]] 2014-12-27 17:41:14.186 INFO 4065 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration' of type [class org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2014-12-27 17:41:14.703 INFO 4065 --- [ main] sbcetTomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080/http 2014-12-27 17:41:15.047 INFO 4065 --- [ main] o.apache.catalina.core.StandardService : Starting service Tomcat 2014-12-27 17:41:15.048 INFO 4065 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.0.15 2014-12-27 17:41:15.154 INFO 4065 --- [ost-startStop-1] oaccC[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2014-12-27 17:41:15.154 INFO 4065 --- [ost-startStop-1] osweb.context.ContextLoader : Root WebApplicationContext: initialization completed in 2651 ms 2014-12-27 17:41:16.399 INFO 4065 --- [ost-startStop-1] osbceServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2014-12-27 17:41:16.404 INFO 4065 --- [ost-startStop-1] osbcembedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2014-12-27 17:41:16.404 INFO 4065 --- [ost-startStop-1] osbcembedded.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2014-12-27 17:41:16.907 INFO 4065 --- [ main] swsmmaRequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot .context.embedded.AnnotationConfigEmbeddedWebApplicationContext@ 4a668b6e: startup date [Sat Dec 27 17:41:12 CET 2014]; root of context hierarchy 2014-12-27 17:41:16.979 INFO 4065 --- [ main] swsmmaRequestMappingHandlerMapping : Mapped "{[/greeting],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public com.aharrison.hello.Greeting com.aharrison.hello.GreetingController.greeting(java.lang.String) 2014-12-27 17:41:16.981 INFO 4065 --- [ main] swsmmaRequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2014-12-27 17:41:16.981 INFO 4065 --- [ main] swsmmaRequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[text/html],custom=[]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest) 2014-12-27 17:41:17.013 INFO 4065 --- [ main] oswshandler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2014-12-27 17:41:17.014 INFO 4065 --- [ main] oswshandler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2014-12-27 17:41:17.059 INFO 4065 --- [ main] oswshandler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2014-12-27 17:41:17.206 INFO 4065 --- [ main] osjeaAnnotationMBeanExporter : Registering beans for JMX exposure on startup 2014-12-27 17:41:17.292 INFO 4065 --- [ main] sbcetTomcatEmbeddedServletContainer : Tomcat started on port(s): 8080/http 2014-12-27 17:41:17.294 INFO 4065 --- [ main] com.aharrison.hello.Application : Started Application in 5.245 seconds (JVM running for 6.088) 
+2
source

Remove @ComponentScan, which is placed above the Application class. @SpringBootApplication adds it by default if the classes to be scanned are in the same package as the Application class.

+1
source

Spring Boot version 1.2.2 is released, I would advise you to upgrade to the new version, since it contains a significant number of fixes. He also uses spring-security 3.2.6. You have to be very careful when declaring any or redefining dependencies other than those that come by default, since loading already comes with most. I had the same problem using spring boot 1.2.2 with spring security 3.2.5, but when I returned to spring boot 1.2.1 everything was fine.

0
source

Source: https://habr.com/ru/post/1209946/


All Articles