개발은 재밌어야 한다
article thumbnail
반응형

스프링 부트에서 컨피그 서비스 사용법 1

 

Spring에서 제공하는 Environment를 활용하는 방법이다.
Legacy( Spring3.x) 에서 사용한 방법과 동일하다.
사용법 2가 스프링 부트에서 권장하는 방법이다.
@Slf4j
@Service
public class TempService {
	
    @Autowired
    private ConfigurableEnvironment environment;
    
    public void test() {
    	environment.getProperty("gateway.test");
    }
}

 

 

 

스프링 부트에서 컨피그 서비스 사용법 2

 

스프링부트에서 지원하는 @ConfigurationProperties를 활용하는 방법이다.
스프링 부트에서 설정이 편리해진 이유 중 하나이다.
https://www.baeldung.com/configuration-properties-in-spring-boot

 

SpringBoot 메인 클래스에 @ConfigurationPropertiesScan 어노테이션 추가

@Slf4j
@ConfigurationPropertiesScan
@SpringBootApplication
public class GatewayWebApplication {

}

 

CloudConfig Class 생성

prefix에 서비스에서 사용하는 property key의 prefix를 입력한다.
예를 들어, 서비스에서 사용하는 property key 들을 gateway.test, gateway.amqpBasic, gateway.connectinString이라고 했으면, gateway가 공통으로 사용되는 prefix이다.
CloudConfig에 서비스에서 사용하는 property key의 prefix를 추가한다.
@Data
@ConfigurationProperties(prefix = "gateway")
public class CloudConfig {
	// gateway.test property 값이 매핑된다.
    private String test;
    // gateway.amqpBasic property 값이 매핑된다.
    private String amqpBasic;
    // gateway.connectionString property 값이 매핑된다.
    private String connectionString;
    
}

 

CloudConfig Class 활용

service, controller 등에서 Autowired해서 사용한다.
@Slf4j
@Service
public class TempService {
	
    @Autowired
    private CloudConfig cloudConfig;
    
    public void test() {
    	cloudConfig.getTest();
    }
}

 

 

 

스프링 부트에서 컨피그 서비스 사용법 3

spring boot project 에서는 레거시와 달리 environment.getProperty() 메소드를 꼭 사용하지 않아도 된다.
클래스 위에 @RefreshScope 어노테이션만 선언하면 해당 클래스안에서 사용되는 @Value 어노테이션에 값이 동적으로 매핑된다.

주의사항 @RefeshScope

위의 어노테이션을 붙여 놓으면 컨피그 값이 갱신될 때, bean을 새로 생성 (빈 종료 및 초기화)하게 된다.

그렇기 때문에 Datasource 같은 빈에 적용 시켜 놓으면, 커넥션이 모두 끊어졌다 다시 생성되는 작업이 이루어진다.

런타임에 변경이 필요없는 빈에는 적용하면 성능에 좋지 않은 영향을 줄 수 있음을 염두하고 사용해야 한다.

@Servive
@RefreshScope
public class ConfigServerTestService {

	@Autowired
    private ConfigurableEnviroment environment;
    
    @Value("${static:static}")
    private String staticInfo;
    @Value("${dynamic:dynamic}")
    private String dynamicInfo;
    @Value("${common:common}")
    private String common;
    
    public Map<String, String> getTestKeyword() {
    	String test = environment.getProperty("dynamic");
        
        Map<String, String> keyword = new HashMap<>();
        keyword.put("static", staticInfo);
        keyword.put("dynamic", dynamicInfo);
        keyword.put("common", common);
        
        return keyword;
   }
}

 

 

 

반응형
profile

개발은 재밌어야 한다

@ghyeong

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!