티스토리 뷰
반응형
Spring Cloud Config 기능 중 하나인 @RefreshScope 는
config 파일의 데이터가 변경되면 서버를 재실행 해주는 기능이다.
@RefreshScope 를 사용하기 위해서는
build.gradle 소스에 Spring CLoud Config 설정과 maven 설정이 필요하다.
ext {
set('springCloudVersion', "Hoxton.SR3")
set('mavenUser', "jane")
set('mavenPassword', "jane_2020")
set('nexusRepo', "https://nexus.gyurida.shop/repository")
}
repositories {
mavenCentral()
maven {
url "$nexusRepo/maven-releases/"
credentials {
username "${mavenUser}"
password "${mavenPassword}"
}
}
maven {
url "${nexusRepo}/maven-snapshots/"
credentials {
username "${mavenUser}"
password "${mavenPassword}"
}
}
}
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-config'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
서비스에서 생성자에 재실행할 소스를 넣고 싶었는데 여기서 문제가 생겼다.
@Value 값 보다 기본 생성자가 먼저 만들어져서 config yaml 파일을 못 불러온다.
그래서 @PostConstructor를 사용해서 @Value 값을 먼저 불러온 후에
@PostConstructor를 실행하도록 해주었다.
하지만 리프레시 했을 때 생성자가 실행되지 않는다.
이럴 땐 서비스 맨 아래 하단에 @EventListener 를 추가하면
/actuator/refresh 할 때 해당 컴포넌트를 다시 실행하여 생성자가 실행된다.
@Component
@RefreshScope
public class Service {
@Value("${data-dam.url}")
private String dataDamUrl;
@Value("${config.elasticsearch.shard}")
private int shard;
@Value("${config.elasticsearch.replica}")
private int replica;
@PostConstruct
public void initConstructor() {
ApiLifecycleRequestModel apiLifecycleRequestModel = ApiLifecycleRequestModel.builder()
.deleteMinAge(deleteMinAge)
.build();
// life cycle 등록
String uri = dataDamUrl + CREATE_LIFECYCLE_API_PATH + "?" + RequestUtils.objectToQueryParam(apiLifecycleRequestModel);
try {
String response = webClientHelper.put(URI.create(uri), "");
log.debug("Create Lifecycle : {}", response);
} catch (Exception e) {
log.error(e.getMessage());
}
}
@EventListener(RefreshScopeRefreshedEvent.class)
public void onRefresh(RefreshScopeRefreshedEvent event) {
log.debug("onRefresh.");
}
}
반응형
'Java' 카테고리의 다른 글
[Java] RandomStringUtils로 랜덤 아이디 생성 (0) | 2021.02.24 |
---|---|
[Java] JSP에서 Date 타입으로 파라미터 값 전달 (6) | 2021.02.22 |
[Java] File Download (0) | 2021.02.10 |
[Java] Url 파일 다운로드 (0) | 2021.02.10 |
[Java] Timestamp 비교 (0) | 2021.02.10 |