기존 방식
- SpringApplicaiton.run(Applicaiton.class, args);
- 스프링 커스터이징이 어려움
인스턴스를 만들어서 이용하는 방식
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.run(args);
}
}
배너 설정하기
- 배너 끄기
- 배너 클래스 구현 후 설정하기
SpringApplication app = new SpringApplicaiton(Application.class);
app.setBannerMode(Banner.Mode.OFF); //배너 끄기
app.setBanner(CustomerBaner); //직접 구현한 배너 클래스의 인스턴스를 배너로 설정
빌더 패턴 이용하여 인스턴스 생성하고 실행하기
new SpringApplicationBuilder()
.sources(Application.class)
.banner(new Banner(){...}) //java anonymous class
.run(args);
스프링과 스프링부트는 이벤트를 제공
- 다양한 시점의 이벤트 존재
- 어플리케이션이 구동될 때
- 컨텍스트가 생성될 때
- 리프레쉬될 때
- 어플리케이션 구동이 성공했을 때
- 어플리케이션 구동이 실패했을 때 등등....
이벤트 리스너를 생성해서 등록하자
- ApplicationListener<특정이벤트> 를 구현한 리스너 클래스 생성
- @Component로 해당 클래스가 빈으로 등록된 후, 특정이벤트에 대해 리스닝
- 이벤트 발생 시, 리스너 클래스에서 오버라이딩한 onApplicationEvent()가 호출
빈으로 등록될 수 없는 이벤트 리스너
- 이벤트 리스너가 빈으로 등록되는 시점 = ApplicationContext가 생성된 후, 컴포넌트 스캔할 때
- ApplicationContext가 만들어지기 이전에도 이벤트가 발생
- 해당 이벤트는 빈으로 등록되는 이벤트 리스너가 핸들링할 수 없음
- 따라서 컨텍스트 이전의 이벤트에 대한 리스너는, 빈으로 등록해도 작동하지 않음
- 해결 = SpringApplication 클래스의 addListeners() 사용하여 메인 메소드 내에서 직접 등록
웹 어플리케이션 타입 설정하기
- SpringApplication 클래스의 setWebApplication() 사용
- WebApplicationType.SERVLET (default type)
- WebApplicationType.REACTIVE
- WebApplicationType.NONE
- SERVLET 타입이 자동설정되는 조건
- 서블릿 컨테이너 의존성이 있으면 무조건!
- Spring Web Flux 의존성이 있어도, 서블릿이 있으면 무조건!
- REACTIVE 타입이 자동설정되는 조건
- 서블릿 컨테이너 의존성을 참조하지 않고
- Spring Web Flux 의존성을 참조하고 있을 때
Application Arguments 사용하기
- 설정 방법
- Intellij run configuration을 통해 Program Arguments 설정가능
(JVM option은 ApplicationArguments 아님) - java -jar JAR파일 --key=value 로 설정 가능
- Intellij run configuration을 통해 Program Arguments 설정가능
- ApplicationArguments를 파라미터로 받아 생성되는 컴포넌트 클래스 구현
- 빈 등록 (@Component)
- ApplicationArguments의 containsOption() 으로 확인가능
cf) 복습: 어떤 빈의 생성자가 1개이고, 생성자의 파라미터가 빈일 때, 파라미터 빈은 자동 주입됨
어플리케이션 실행 뒤 작동하는 hook을 걸고 싶을 때
방법1. ApplicationRunner를 구현하는 컴포넌트 클래스 생성 (추천)
- ApplicationArguments를 이용하기 위해 low level까지 코딩할 필요 없음
- 추상화된 API를 사용하여 구현가능
- @Order(순서값)으로 runner의 순서를 조정
- 낮은 순서가 높은 우선순위를 가짐
방법2. CommandLineRunner를 구현하는 컴포넌트 클래스 생성
로그 레벨 변경하기 (SpringApplicaiton 이용X)
- 기본 로그 레벨 = INFO
- DEBUG LEVEL = 어떤 AutoConfiguration이 적용되고, 적용되지 않는지 확인 가능
- IDE에서 디버그 모드 설정하기
- Run Configuration Edit 들어가기
- VM Options을 -Ddebug 설정
- 또는 Program arguments를 --debug로 설정
- java명령어를 통해 jar 실행 시, 옵션을 통해 디버그 모드 설정하기
- java -jar JAR파일 -Ddebug
- java -jar JAR파일 --debug
FailureAnalyzer로 에러 메세지 예쁘게 출력하기 (SpringApplicaiton 이용X)
- FailureAnalyer 인터페이스를 구현하고 analyze()를 오버라이딩하는 CustomeFailedAnalyer 클래스 구현
- resources/META-INF/ 안의 spring.factories에 org.springframework.boot.diagnostics.FailureAnalyzer listener를 등록한다.
org.springframework.boot.diagnostics.FailureAnalyzer=com.kkambi.CustomFailedAnalyzer
banner.txt로 배너 로고 예쁘게 출력하기 (SpringApplicaiton 이용X)
- resources/banner.txt 수정
- txt파일 안에서 ${spring-boot.version} 와 같은 변수 사용 가능
- 일부 변수는 매니페스트 파일이 존재해야 사용 가능
- txt파일뿐만 아니라, banner.gif | banner.jpg | banner.png와 같은 이미지 파일도 사용가능
spring.banner.image.location property를 설정하면 된다 - 기본 인코딩 = UTF-8
'학습 > Spring' 카테고리의 다른 글
[spring] 스프링부트의 외부 설정 (활용) (0) | 2020.04.12 |
---|---|
[spring] 스프링부트의 외부 설정 (개념) (0) | 2020.04.11 |
[spring] 독립적으로 실행 가능한 JAR (Executable Jar) (0) | 2020.04.08 |
[spring] 스프링부트의 내장 WAS 이해와 응용 (0) | 2020.04.08 |
[spring] 스프링부트의 AutoConfiguration을 이용한 Bean 등록 (0) | 2020.04.06 |
댓글