Spring Initializr를 사용하면 생성되는 Application 클래스
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
커스터마이징
하고 싶다면 로컬 인스턴스를 만들어야 한다.
SpringApplication app = new SpringApplication(Application.class);
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.setBanner(new Banner() {
@Override
public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
out.println("============================");
out.println("Jueun");
out.println("============================");
}
});
// app.setBannerMode(Banner.Mode.OFF); // 배너 모드 끄기
app.run(args);
}
}
Builder 사용해보기.
@SpringBootApplication
public class Application2 {
public static void main(String[] args) {
new SpringApplicationBuilder()
.sources(Application2.class)
.run(args);
}
}
ApplicationEvent 등록
// @Component 빈으로 등록하면 이벤트가 발생되었을 때 자동으로 실행이 된다.
@Component // 빈으로 만들었어요
public class SampleListener2 implements ApplicationListener<ApplicationStartedEvent> {
@Override
public void onApplicationEvent(ApplicationStartedEvent applicationStartedEvent) {
System.out.println("======================");
System.out.println("started");
System.out.println("======================");
}
}
// 하지만 아래의 경우, applicationContext가 발생하기 이전에 실행되는 이벤트라서 리스러가 동작을 안한다.
// 이런 경우에는 직접 등록을 해주어야 한다. SpringApplication에. ㅡ> Application3 클래스에서 작동.
public class SampleListener implements ApplicationListener<ApplicationStartingEvent> {
@Override
public void onApplicationEvent(ApplicationStartingEvent applicationStartingEvent) {
System.out.println("======================");
System.out.println("Application is starting");
System.out.println("======================");
}
}
public class Application3 {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.addListeners(new SampleListener());
app.run(args);
}
}
WebApplicationType 설정
app.setWebApplicationType(WebApplicationType.NONE); // 웹 모드 끄기
애플리케이션 아규먼트 사용하기
ApplicationArguments를 빈으로 등록해 주니까 가져다 쓰면 된다.
@Component
public class Argument {
// 생성자의 파라미터가 빈일때는 스프링이 자동으로 주입해준다.
public Argument(ApplicationArguments arguments) {
System.out.println("foo: " + arguments.containsOption("foo")); // VM options: -Dfoo
System.out.println("bar: " + arguments.containsOption("bar")); // Program arguments: --bar
// 출력값
// foo: false
// bar: true
}
}
ApplicationRunner
애플리케이션 실행한 뒤 뭔가 실행하고 싶을 때 ApplicationRunner (추천) 또는 CommandLineRunner을 상속받아 구현할 수 있다. 또한 @Order로 순서를 지정하여 사용할 수 있다.
@Component
@Order(1) // 순서 지정 가능. 숫자 낮은 게 먼저 실행
public class Runner implements ApplicationRunner {
// 고급진 API를 통해 argument를 쓸 수 있음. (추천)
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("@Order(1)");
System.out.println("foo: " + args.containsOption("foo")); // VM options: -Dfoo
System.out.println("bar: " + args.containsOption("bar")); // Program arguments: --bar
}
}
@Component
@Order(2)
public class Runner2 implements CommandLineRunner {
// low하게 argument에 접근함
@Override
public void run(String... args) throws Exception {
Arrays.stream(args).forEach(System.out::println);
System.out.println("@Order(2)");
}
}
'Springboot' 카테고리의 다른 글
[spring boot] logging 기본 설정 (0) | 2021.01.08 |
---|---|
@Profile (0) | 2021.01.08 |
[spring boot] 외부 설정 (0) | 2021.01.08 |
스프링부트, 독립적으로 실행 가능한 JAR (0) | 2021.01.06 |
스프링 부트 포트 번호 변경, 랜덤포트, 포트 번호 확인하기 (0) | 2021.01.05 |
스프링 부트에 내장된 tomcat 서버 변경하는 법 (0) | 2021.01.05 |