레알윙 2020. 4. 10. 08:38
반응형

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-spring-application.html#boot-features-spring-application

 

스프링 부트 로그

스프링부트 기본 로그 레벨은 INFO이다.

Debug모드로 실행하게 된다면 자동설정 여부를 알 수가 있다.

스프링부트 로그 레벨 debug로 설정

 

FailureAnalyzer

에러가 났을 때 이쁘게 출력하게 

 

베너

아래와 같이 resources 안에 banner.txt를 만들게 되면 수정된 배너를 출력하게 할 수 있다.

배너의 기본 출력은 기본적으로 UTF-8이다.

txt파일로 설정했을 때

 

txt파일로 설정 말고 아래와같이 메소드를 직설 만들어서 설정이 가능하다.

@SpringBootApplication
public class SpringBootStudyApplication {
	public static void main(String[] args) {
		SpringApplication app = new SpringApplication(SpringBootStudyApplication.class);
        application.setBanner(new Banner() {	
            @Override
            public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
                    out.println("=========================");
                    out.println("베너 테스트!");
                    out.println("=========================");
            }
        });
		app.run(args);
	}
}

txt파일과 메소드를 직접 만들어서할 경우

txt파일이 이김

 

배너에 추가될 수 있는 기능들

 


https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-spring-application.html#boot-features-application-events-and-listeners

 

Application Events and Liseners

발생 시점

  • 애플리케이션이 시작할때
  • ApplicationContext가 만들어졌을때
  • ApplicationContext refresh 되었을때
  • Application이 잘 구동이 되었을 때
  • 애플리케이션이 준비가 되었을 때, 에러가 발생되었을 때 등등.

 

SpringApplication 실행 전후 Liseners

ApplicationContext가 만들어졌는지 안되었는지가 중요

ApplicationContext를 만들기 전에 사용하는 Liseners@Bean으로 등록 할 수 없다.

SampleListener Class에 Bean으로 등록하지 않은 이유ApplicationStartingEvent의경우 Bean을 등록하는  ApplicationContext객체가 생성되기 전에 만들어주기 때문에 아래와 같이 SpringApplication.addLitener에 추가해줘야된다.

@SpringBootApplication
public class SpringBootStudyApplication {
	public static void main(String[] args) {
		SpringApplication app = new SpringApplication(SpringBootStudyApplication.class);
		app.addListeners(new SampleListener());
		app.run(args);
	}
}

 

 

public class SampleListener implements ApplicationListener<ApplicationStartingEvent> {
	@Override
	public void onApplicationEvent(ApplicationStartingEvent event) {
		System.out.println("=============================");
		System.out.println("Application is starting");
		System.out.println("=============================");
	}
}

 

결과

 

WebApplicationType 설정

ApplicationArguments를 빈으로 등록

 

WebApplication의 종류

 

  • WebApplicationType.SERVLET
    • Spring MVC를 사용할 때
    • Spring webflux,Spring MVC가 같이 들었을 때 SERVELT이 기본 설정으로 됨 
    • Servlet이 있는경우 SERVLET 타입으로 돈다.
  • WebApplicationType.REACITVE
    • Spring webflux를 사용할 때
  • WebApplicationType.NONE
    • Spring webflux,Spring MVC 이 없을 때 none으로 돔

 

Application Argument

Run Configurationㄴ에 들아가서 아래와 같이 설정해 준다.

-D로 시작하는 옵션은 JVM옵션이고,
--로 시작하는 옵션이 Application Argument이다.

 

설정

arguments을 출력할 class를 만든 후 실행을하게되면 아래와같은 결과가 발생이된다.

@Component
public class ArgumentTestComponent {
	public ArgumentTestComponent(ApplicationArguments arguments) {
		System.out.println("foo : " + arguments.containsOption("foo"));
		System.out.println("bar : " + arguments.containsOption("bar"));
	}
}

foo, bar 출력장면

결론

--로 들어오는 옵션만 argument로 사용하는 것이다.(JVM옵션은 Application argument가 아니다.)

 

 

ApplicationRunner(추천) 또는 CommandLineRunner

애플리케이션 실행한 뒤 뭔가 실행하고 싶을 때

 

ApplicationRunnerApplicationArguments이란 타입으로 메소드를 만들어 준다.

그리고 ApplicationRunner가 여러개인 경우 @Order 어노테이션을 붙여 순서를 지정해 줄 수 있다.

 

 

@Component
@Order(1)
public class OrderTest1 implements ApplicationRunner {
	@Override
	public void run(ApplicationArguments args) throws Exception {
		System.out.println("======================================");
		System.out.println("내가 테스트1번에서 한것이여 내가!!");
		System.out.println("foo : " + args.containsOption("foo"));
		System.out.println("bar : " + args.containsOption("bar"));
		System.out.println("======================================");
	}
}

 

@Component
@Order(2)
public class OrderTest2 implements ApplicationRunner {
	@Override
	public void run(ApplicationArguments args) throws Exception {
		System.out.println("======================================");
		System.out.println("내가 테스트222222번에서 한것이여 내가!!");
		System.out.println("foo : " + args.containsOption("foo"));
		System.out.println("bar : " + args.containsOption("bar"));
		System.out.println("======================================");
	}
}

 

코드결과

 

반응형