@PostConstruct //객체가 생성된 후 바로 실행, @PreDestory 마지막 소멸 단계 때 실행
public void start(){
gWSocketService.csSocketStart();
}
CommandLineRunner
인터페이스는 구동 시점에 실행되는 코드가 자바 문자열 아규먼트 배열에 접근해야할 필요가 있는 경우에 사용합니다. 다음과 같이 CommandLineRunner
인터페이스를 구현한 클래스에 @Component
어노테이션을 선언해두면 컴포넌트 스캔이되고 구동 시점에 run
메소드의 코드가 실행됩니다.
`import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import java.util.Arrays;
@Component
public class DemoCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("CommandLineRunner Args: " + Arrays.toString(args));
}
}`
jar 파일로 패키징된 애플리케이션을 실행시킬 때 abc
와 123
을 인자로 넘깁니다.
$ java -jar target/demo-0.0.1-SNAPSHOT.jar abc 123
DemoCommandLineRunner
클래스의 run()
메소드의 인자로 넘어와서 출력됩니다.
2017-08-27 15:52:12.054 INFO 96622 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) CommandLineRunner Args: [abc, 123]
ApplicationRunner
인터페이스도 CommandLineRunner
인터페이스와 마찬가지로 구동 시점에 run()
메소드를 실행시키지만 다른 타입의 인자를 받습니다. 단순 인자의 스트링 배열을 포함한 추상화한 ApplicationArguments
타입의 객체가 대신 run()
메소드의 인자로 넘어옵니다.
`import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.Arrays;
@Component
public class DemoApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("ApplicationRunner Args: " + Arrays.toString(args.getSourceArgs()));
}
}`
jar 파일로 패키징된 애플리케이션을 실행시킬 때 abc
와 123
을 인자로 넘깁니다.
$ java -jar target/demo-0.0.1-SNAPSHOT.jar abc 123
ApplicationRunner
클래스의 run()
메소드의 인자로 넘어와서 출력됩니다.
2017-08-27 15:54:52.310 INFO 5156 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) ApplicationRunner Args: [abc, 123]
하나의 스프링 부트 애플리케이션에 여러 개의 CommandLineRunner
또는 ApplicationRunner
빈을 등록할 수 있습니다. 러너 간의 실행 순서가 문제가 되는 경우에는 러너 클래스에 @Order
어노테이션으로 실행 순서를 명시해주면 됩니다.
`@Order(1)
@Component
public class DemoCommandLineRunner implements CommandLineRunner { ...
@Order(2)
@Component
public class DemoApplicationRunner implements ApplicationRunner { ...`