티스토리 뷰

Java

[Java] @RefreshScope

Jane Kwon 2021. 2. 10. 18:29
반응형

 

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
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함