์คํ๋ง ๋ถํธ ๋ฉ์ผ ํฌ์ค์ฒดํฌ ์บ์ํ๊ธฐ
ํ ์ค์ Spring Boot Actuator์ ํฌ์ค์ฒดํฌ ์ดํด๋ณด๊ธฐ๋ผ๋ ๊ธ์ ๋ณด๊ณ ์คํ๋ง ๋ถํธ ์ก์ถ์์ดํฐ์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ MailHealthIndiator์ ํฌ์ค ์ฒดํฌ ๊ฒฐ๊ณผ๋ฅผ ๋ณ๋๋ก ์์ฒญํ๋ ๊ฒฝ์ฐ management.endpoint.health.cache-time-to-live
์์ฑ์ผ๋ก ์บ์๋์ง ์์์ ํ์ธํ๋ค. ํด๋น ์์ฑ์ ์ ์ฒด ํฌ์ค ์ฒดํฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ํฌ์ค ์๋ํฌ์ธํธ(/actuator/health)์ ํด๋นํ๋ ์บ์ ์ต์
์ผ๋ก ๋ฉ์ผ์ ๋ํ ํฌ์ค ์๋ํฌ์ธํธ(/actuator/health/mail)์ ๋ํด์๋ ์ ์ฉ๋์ง ์๋๋ค.
์คํ๋ง ๋ถํธ ์ก์ถ์์ดํฐ์ MailHealthIndicator ๋ JavaMailSenderImpl์ testConnection ํจ์๋ฅผ ํธ์ถํ์ฌ ํฌ์ค ์ฒดํฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋๋ก ์์ฑ๋์ด์๋ค. MailHealthIndicator๋ผ๋ ์ด๋ฆ์ผ๋ก HealthIIndicator๋ฅผ ๊ตฌํํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ MailHealthIndicator ๋์ ์ ๋ฑ๋ก๋๋ฏ๋ก SMTP ์๋ฒ๋ก์ ์ฐ๊ฒฐ ์ํ ๊ฒฐ๊ณผ๋ฅผ ์บ์ํ์ฌ ์๋ตํ๋๋ก ์์ฑํด๋ณผ ์ ์๋ค.
CachableMailHealthIndicator
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.mail.MailHealthIndicator;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Component;
import java.time.Duration;
import java.time.Instant;
@Component("mailHealthIndicator")
public class CachableMailHealthIndicator extends MailHealthIndicator implements InitializingBean {
private Cache<String, Health> cache;
public CachableMailHealthIndicator(JavaMailSenderImpl javaMailSender) {
super(javaMailSender);
}
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
Health cached = cache != null ? cache.getIfPresent("mail") : null;
if (cached != null) {
builder.status(cached.getStatus()).withDetails(cached.getDetails());
return;
}
try {
super.doHealthCheck(builder);
} catch (Exception e) {
builder.down(e);
}
if (cache != null) {
Health health = builder.withDetail("datetime", Instant.now()).build();
cache.put("mail", health);
}
}
@Override
public void afterPropertiesSet() throws Exception {
cache = CacheBuilder.newBuilder()
.maximumSize(1)
.expireAfterWrite(Duration.ofSeconds(30))
.build();
}
}
CacheableMailHealthIndicator๋ ํธ์คํธ ์ ๋ณด ๋ฟ๋ง ์๋๋ผ ์บ์๋ ์๊ฐ์ ํฌํจํ์ฌ ์ธ์ ์ธก์ ๋ ๊ฒฐ๊ณผ์ธ์ง๋ ํ์ธํ ์ ์์ต๋๋ค.