이 글은 인프런에서 백기선님의 스프링부트 개념과 활용 강의를 듣고, 개인적으로 공부하며 핵심만 정리한 글입니다.
SpringApplication 실행
어플리케이션 실행 방법은 다음과 같은 방법이 있다.
먼저 가장 간단한 방법
@SpringBootApplication
public class SpringinitApplication {
public static void main(String[] args) {
SpringApplication.run(SpringinitApplication.class, args);
}
}
조금 더 커스터마이징 할 수 있는 방법
@SpringBootApplication
public class SpringinitApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(SpringinitApplication.class);
app.run(args);
}
}
배너 변경 하는 법
Spring 어플케이션 실행 시, 처음에 콘솔에 뜨는 배너를 변경 하는 법은 다음과 같이 있다.
공식 도큐먼트 참고.
resources/banner.text
를 만들어 배너로 쓸 텍스트 입력- 텍스트에
${application.version}
을 넣어주면 버전 명시도 가능.
- 텍스트에
SpringApplication app
객체에app.setBannerMode(Banner.Mode.OFF)
를 주면 배너를 끌 수 있음.- 이 외에도
SpringApplicationBuilder()
로 빌더 패턴으로 배너와 어플리케이션 실행 설정을 커스터마이징 할 수 있다.
SpringApplication 실행 전후 리스너
SpringApplication app
의 실행 전후로 다음과 같이 리스너를 달아둘 수 있다.
먼저 ApplicationListener<T>
를 인터페이스 구현하는 클래스를 다음과 같이 정의한다.
class SampleListener1 implements ApplicationListener<ApplicationStartingEvent> {
@Override
public void onApplicationEvent(ApplicationStartingEvent applicationStartingEvent) {
System.out.println("=====================");
System.out.println("Applcation is starting");
System.out.println("=====================");
}
}
@Component
class SampleListener2 implements ApplicationListener<ApplicationStartedEvent> {
@Override
public void onApplicationEvent(ApplicationStartedEvent applicationStartedEvent) {
System.out.println("=====================");
System.out.println("Applcation is started");
System.out.println("=====================");
}
}
이렇게 만든 클래스들을 Bean 으로 등록하기 위해 @Component
를 클래스 위에 붙여줘야 하는데, ApplicationStartingEvent
의 경우, Bean 등록을하는 ApplicationContext
객체가 생성 되기 전에 만들어져 버린다.
따라서, ApplicationStartingEvent
는 따로 SpringApplication.addListner(..)
로 추가해줘야 한다.
@SpringBootApplication
public class SpringinitApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(SpringinitApplication.class);
app.addListeners(new SampleListener1());
app.run(args);
}
}
WebApplicationType 설정하기
WebApplicationType
은 다음과 같은 종류가 있다.
WebApplicationType.SERVLET
WebApplicationType.REACITVE
WebApplicationType.NONE
이 중 기본설정은 WebApplicationType.SERVLET
이다.
Application argument 받기
argument 는 크게 다음으로 나뉜다.
- Jvm argument :
-D
로 시작. jvm 설정에 관련된 argument- ex.
java -jar -Dfoo heumsi-springboot.jar
- ex.
- Application argument :
--
로 시작. 어플리케이션 설정에 관련된 argument- ex.
java -jar --bar ... heumsi-sprinboot.jar
- ex.
여기서 Application arguments 는 다음과 같이 ApplicationArguments
객체를 주입받아 사용할 수 있음.
@Component
@Order(1) // 숫자 낮은게 먼저 실행
public class SampleListener implements ApplicationRunner {
@Override
public void run(ApplicationArguments arguments) throws Exception{
System.out.println("foo:" + arguments.containsOption("foo"));
System.out.println("bar:" + arguments.containsOption("bar"));
}
}
ApplicationRunner
로 클래스를 구현하면, 해당 클래스는 어플리케이션 실행 후run
메쏘드가 자동으로 실행 됨.- 여러 개 있을 경우
@Order(우선순위)
의 순서에 따라 작동. 우선순위가 낮을수록 먼저 싦행된다.
위 어플리케이션을 java -jar -Dfoo --bar heumsi-springboot.jar
로 실행하면 다음과 같은 결과를 내놓는다.
foo: false
bar: true
즉 -Dfoo
는 ApplicationArguments arguments
에 들어오지 않은 것을 알 수 있음.
'더 나은 엔지니어가 되기 위해 > 지금은 안쓰는 자바' 카테고리의 다른 글
[스프링 부트 개념과 활용] Profile (0) | 2020.02.03 |
---|---|
[스프링 부트 개념과 활용] 외부 설정 (0) | 2020.02.02 |
[스프링 부트 개념과 활용] 내장 웹서버 이해와 .JAR 생성 (0) | 2020.01.31 |
[스프링 부트 개념과 활용] 의존성 관리, 자동 설정 이해 (0) | 2020.01.30 |
[스프링 부트 개념과 활용] 스프링 부트 프로젝트 만들기 (0) | 2020.01.28 |