Yaml 파일의 특정값을 읽어 Config 클래스 파일에 사용하려 할 때 최초로 Spring Boot Configuration Annotation Processor not Configured 에러가 발생하게 되었다.
그래서 구글링을 해본결과 dependency가 추가되어있지 않은 것 같아 build.gradle 파일에 ConfigurationProperties 어노테이션과 관련된 dependency를 추가하여주었다.
dependencies {
...
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
}
그 후 다시 build를 진행할 경우 더이상 위의 에러는 발생하지는 않지만 Re-run Spring Boot Configuration Annotation Processor to update generated metadata라는 문구가 뜨고 다시 에러가 나게된다.
그럼 이번에는 무슨방법을 사용하여야 하는지 찾아본결과 Intellij IDLE 를 사용중이라면 FIle -> Invalidate Chaces를 통해 Intellij의 캐시를 전부 지우고 재시작하면 된다는 것을 알게되었다.
하지만 해결되지 않는다? 왜 어째서?
대체 무슨에러일까?
너무나도 답답해지고 있었다.
처음 에러는 어노테이션을 스프링부트가 읽지 못해 나는 에러였기에 의존성 주입을 해주었던것이 었고
두번째는 이전에 캐시정보로 인해 새로운 의존성 주입이 된 정보가 담긴 METADATA 파일을 읽지 못해 나는 에러라고 판단하여 기존의 캐시정보를 삭제 해주면 정상작동 될 줄 알았다.
우리가 쓰는 @ConfigurationProperties 어노테이션은 보통 Yaml파일에서 값을 불러올 때 많이 사용되는 @Value 어노태이션과 같은 용도로 사용되며 보통 클래스 단위에 정보 값을 가져올 때 사용된다.
그럼 여기서 우리는 한가지 생각을 할 수 있는데 클래스 단위로 스프링 프레임워크에 Bean을 등록하고 이를 컨테이너가 파악하여 우리가 사용할 수 있는것이다. ( 너무 복잡한 구조이므로 나중에 정리글을 올려보자)
우리가 사용하려는 @ConfigurationProperties 또한 클래스 단위로 설정값을 불러와 적용시키는 어노테이션이다. 그렇기 때문에 필연적으로 Application 쪽에 무언가 설정을 해줘야한다고 생각했다.
해결법
해결법으로는 Application 클래스에 설정을 하나 넣어주어야 한다.
@MappedSuperclass 라는 최상위 BaseEntity를 만들어 사용한다면 Application 파일에 @EnableJpaAudting 어노테이션을 달아줘야 하는 것 처럼 @EnableConfigurationProperties를 사용하고 인자값으로 클래스를 넣어주면된다.
예시코드
package learn.oauth.sociallogin;
import learn.oauth.sociallogin.config.properties.AppProperties;
import learn.oauth.sociallogin.config.properties.CorsProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@SpringBootApplication
@EnableJpaAuditing
@EnableConfigurationProperties({
CorsProperties.class,
AppProperties.class
})
public class SocialLoginApplication {
public static void main(String[] args) {
SpringApplication.run(SocialLoginApplication.class, args);
}
}
'Intellij' 카테고리의 다른 글
인텔리제이에 Spring-Boot Project 외부 라이브러리 Import 하기 (0) | 2022.07.05 |
---|