스프링 부트 자동 배선이 구성 클래스에서 작동하지 않음
캐시에 Redis 서버를 사용하는 Spring Boot 애플리케이션이 있습니다.Redis 서버에 연결할 때 Spring RedisTemplate를 사용합니다.에서 Redis 매개 변수를 구성합니다.@Confiuration
클래스. 그러나 redisurl 및 포트는 DB에 저장되고 해당 DAO는 다른 클래스(다른 글로벌 정보도 포함)의 구성원으로 포함됩니다.구성 클래스의 부모 클래스에 자동 연결을 시도하는 중 오류가 발생했습니다.내가 가지고 있는 코드는 다음과 같습니다.
@Configuration
public class MyConfiguration {
@Autowired
protected GlobalPropertiesLoader globalPropertiesLoader;
@Bean
JedisConnectionFactory jedisConnectionFactory() {
JedisConnectionFactory factory = new JedisConnectionFactory();
GlobalPropertiesDAO globalPropertiesDAO = globalPropertiesLoader.getGlobalProperties();
factory.setHostName(globalPropertiesDAO.getRedisUrl());
factory.setPort(globalPropertiesDAO.getRedisPort());
factory.setUsePool(true);
return factory;
}
@Bean
RedisTemplate< String, Object > redisTemplate() {
final RedisTemplate< String, Object > template = new RedisTemplate< String, Object >();
template.setConnectionFactory( jedisConnectionFactory() );
template.setKeySerializer( new StringRedisSerializer() );
template.setHashValueSerializer( new GenericToStringSerializer< Object >( Object.class ) );
template.setValueSerializer( new GenericToStringSerializer< Object >( Object.class ) );
return template;
}
}
전역 속성로더는 DAO(Global Properties)를 포함하는 클래스입니다.DAO)를 객체로 지정합니다.응용 프로그램을 실행하려고 하면 다음 오류가 발생합니다.
Exception in thread "main"
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.mypkg.CommonsConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: protected com.utils.GlobalPropertiesLoader com.mypkg.CommonsConfiguration.globalPropertiesLoader; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.utils.GlobalPropertiesLoader] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1202)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1127)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1051)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:949)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)
... 50 more
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: protected com.utils.GlobalPropertiesLoader com.mypkg.CommonsConfiguration.globalPropertiesLoader; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.utils.GlobalPropertiesLoader] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:561)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
... 61 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.utils.GlobalPropertiesLoader] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1308)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1054)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:949)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)
여기에 무슨 문제가 있습니까?자동 배선이 불가능합니까?@Configuration
수업이요? 다른 수업에서도 같은 수업을 자동으로 들을 수 있기 때문입니다.
편집:::::::::::::::::::::::::::::
나는 노력했다.@Import
아래와 같이:
@Configuration
@Import({GlobalPropertiesLoader.class})
public class CommonsConfiguration {
@Autowired
GlobalPropertiesLoader globalPropertiesLoader;
....
}
그러나 이 작업을 수행하면 다음 오류가 발생합니다.
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.utils.GlobalPropertiesLoader': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: public com.persistence.repositories.GlobalPropertiesRepository com.utils.GlobalPropertiesLoader.globalPropertiesRepository; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.persistence.repositories.GlobalPropertiesRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1202)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1127)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1051)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:949)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)
... 63 more
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: public com.persistence.repositories.GlobalPropertiesRepository com.utils.GlobalPropertiesLoader.globalPropertiesRepository; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.persistence.repositories.GlobalPropertiesRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:561)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
... 74 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.persistence.repositories.GlobalPropertiesRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1308)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1054)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:949)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)
전역 속성입니다.로더 클래스:
@Component
@Scope("singleton")
public class GlobalPropertiesLoader {
@Autowired
public GlobalPropertiesRepository globalPropertiesRepository;
private GlobalPropertiesDAO globalProperties;
/*
* Load GlobalProperties once upon loading the context.
*/
@PostConstruct
public void init(){
globalProperties = globalPropertiesRepository.findOne(1L);
....
}
}
GlobalPropertiesRespository java는 다음과 같습니다.
@Repository
public interface GlobalPropertiesRepository extends CrudRepository<GlobalPropertiesDAO, Long>{
}
감사해요.
@가져오기는 구성 클래스를 다른 구성 클래스에 추가하는 것입니다.
http://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch04s03.html
@ComponentScan은 @Service, @Component, @Repository 등과 같이 코드에 선언된 구성 요소를 검색합니다.
http://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch06s02.html
구성 클래스에 @ComponentScan을 추가해야 구성 클래스와 함께 패키지를 검색할 수 있습니다.
@Configuration
@ComponentScan(value = "org.foo.path.baseFolder")
public class MyConfiguration {
@Autowired
protected GlobalPropertiesLoader globalPropertiesLoader;
@Configuration
s는 클래스입니다. 이 클래스는 먼저 시작하려고 합니다.당신의.GlobalPropertiesLoader
그것에 대한 예가 없습니다,MyConfiguration
이니셜이거 먹어봐요.
@Configuration
@Import({GlobalPropertiesLoader.class})
public class MyConfiguration {
}
이 오류의 원인 중 하나는 이 클래스를 구현하지 않았기 때문입니다.UserDetailsService를 구현하는 CustomUserDetailsService라는 클래스를 만들고 @Component로 주석을 달습니다.자세한 내용은 스프링 설명서를 참조하십시오.또는 @reos가 인용한 솔루션을 따릅니다.
이전에도 동일한 문제가 발생하여 "Application.class"인 초기 클래스가 "abc.klm.prq"와 같은 패키지에 있고 다른 구성 요소의 패키지 이름이 "abc.klm.xyz"로 시작합니다.따라서 구성 요소 클래스는 "Application.class"의 아래 계층에 있지 않습니다.구성 요소 클래스를 "abc.klm.prq"로 이동할 때.작동하는 패키지를 만듭니다.
@Bean
@Autowired
JedisConnectionFactory jedisConnectionFactory(GlobalPropertiesLoader
globalPropertiesLoader) {
JedisConnectionFactory factory = new JedisConnectionFactory();
GlobalPropertiesDAO globalPropertiesDAO =
globalPropertiesLoader.getGlobalProperties();
factory.setHostName(globalPropertiesDAO.getRedisUrl());
factory.setPort(globalPropertiesDAO.getRedisPort());
factory.setUsePool(true);
return factory;
}
이렇게 해보세요.
언급URL : https://stackoverflow.com/questions/33642199/spring-boot-autowired-not-working-in-configuration-class
'programing' 카테고리의 다른 글
Mongoose FindOneAndUpdate 및 실행 Validator가 작동하지 않습니다. (0) | 2023.07.01 |
---|---|
구조 패킹은 결정론적입니까? (0) | 2023.06.26 |
SQL Server 2005 제약 조건이 있는 드롭 열 (0) | 2023.06.26 |
데이터를 파일이 아닌 문자열로 CSV 형식으로 쓰는 방법은 무엇입니까? (0) | 2023.06.26 |
이 컨텍스트에서는 숫자 또는 부울을 반환하는 변수 식만 허용됩니다. (0) | 2023.06.26 |