ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SpringApplication
    백기선(인프런 강의)/스프링 부트 개념과 활용 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("======================================");
    	}
    }

     

    코드결과

     

    반응형
Designed by Tistory.