Spring boot application.yml 변수 처리

2024. 8. 14. 00:44Java/Spring Boot

@Value 사용: 변수

Class 생성시, 값이 null임

# application.yml
mail:
	host: smtp.co.kr

# 정의
@Component
public class EmailSender {

	@Value("${mail.host}")
	private String host;
	
	public EmailSender() {
		props = System.getProperties();
        # Sprng boot 기동시, null 출력
		log.debug(this.host);
	}
	
	public void test() {
		log.debug("host: " + host);
	}
}


# 호출
	@RequestMapping("/test")
	public @ResponseBody String deGetHelloWorld() {
    	# 호출시, smtp.co.kr 출력
		emailSender.test();
		return "Hello World";
	}

@Value 사용: 생성자 파라메터

Class 생성시, 값이 출력됨

# application.yml
mail:
	host: smtp.co.kr

# 정의
@Component
public class EmailSender {

	private String host;
	
	public EmailSender(@Value("${spring.application.name}") String host) {
		this.host = host;
		props = System.getProperties();
        # Sprng boot 기동시, smtp.co.kr 출력
		log.debug(this.host);
	}
	
	public void test() {
		log.debug("host: " + host);
	}
}


# 호출
	@RequestMapping("/test")
	public @ResponseBody String deGetHelloWorld() {
    	# 호출시, smtp.co.kr 출력
		emailSender.test();
		return "Hello World";
	}

@PostConstruct 사용

'@Value 사용: 변수'와 같지만, init() 함수가 객체 생성시 자동으로 실행됨

# application.yml
mail:
	host: smtp.co.kr

# 정의
@Component
public class EmailSender {

	@Value("${mail.host}")
	private String host;
	
	public EmailSender() {
		props = System.getProperties();
        # Sprng boot 기동시, null 출력
		log.debug(this.host);
	}

	@PostConstruct
	public void init() {
    	# 생성자 이후에 자동으로 실행
        # smtp.co.kr 출력
		log.debug("init: " + host);
	}
    
	public void test() {
		log.debug("host: " + host);
	}
}


# 호출
	@RequestMapping("/test")
	public @ResponseBody String deGetHelloWorld() {
    	# 호출시, smtp.co.kr 출력
		emailSender.test();
		return "Hello World";
	}

setter 설정

' @PostConstruct 사용 '와 비슷하게 객체 생성시, 자동으로 실행됨

# application.yml
mail:
	host: smtp.co.kr

# 정의
@Component
public class EmailSender {

	private String host;
	
	public EmailSender() {
		props = System.getProperties();
        # Sprng boot 기동시, null 출력
		log.debug(this.host);
	}

	@Value("${mail.host}")
	public void setHost(String host) {
    	this.host = host;
    	# 생성자 이후에 자동으로 실행
		log.debug("setter: " + this.host);
	}
    
	public void test() {
		log.debug("host: " + host);
	}
}

# 호출
	@RequestMapping("/test")
	public @ResponseBody String deGetHelloWorld() {
        # 호출시, smtp.co.kr 출력
		emailSender.test();
		return "Hello World";
	}