똑같은 삽질은 2번 하지 말자
Spring Boot 개념다지기 No.6(SpringApplication, 외부설정) 본문
스프링 부트 핵심 기능 |
각종 기술 연동 |
|
|
앞으로 배울 친구들
1.SpringApplication !
@SpringBootApplication
public class SbEx1Application {
public static void main(String[] args) {
//SpringApplication.run(SbEx1Application.class, args);
// 커스텀 마이징을 위해 밑의 형식으로 바꿈
SpringApplication app = new SpringApplication(SbEx1Application.class);
app.run(args);
}
}
배너 바꾸는건 resources 파일에 banner.txt에다가 쓰면됨
잘 실행된다.
ApplicationEvent 등록
@Component
public class SampleListener implements ApplicationListener<ApplicationStartingEvent>{
@Override
public void onApplicationEvent(ApplicationStartingEvent event) {
System.out.println("===================");
System.out.println("Application is Starting");
System.out.println("===================");
}
}
// 이벤트가 언제 발생하느냐 를 주의해야 한다.
// ApplicationStartingEvent 은 제일 처음발생하는 이벤트라서 Bean으로 등록해도 동작하지않는다.
// 그래서 Component 등록해도 의미가 없긴하다.
그래서 이 이벤트리스너가 제대로 동작하게 하려면
@SpringBootApplication
public class SbEx1Application {
public static void main(String[] args) {
//SpringApplication.run(SbEx1Application.class, args);
// 커스텀 마이징을 위해 밑의 형식으로 바꿈
SpringApplication app = new SpringApplication(SbEx1Application.class);
app.addListeners(new SampleListener()); // 이벤트 등록
app.setWebApplicationType(WebApplicationType.REACTIVE); // 웹어플 타입 등록
app.run(args);
}
}
저렇게 이벤트 등록을 해줘야한다~~!
ApplicationContext를 만들기 전에 사용하는 리스너는 @Bean으로 등록할 수 없다.
ApplicationArguments 사용하기
@Component
public class ArgumentClass {
public ArgumentClass(ApplicationArguments arguments) {// 생성자 한개에 param이 빈이라면 컨테이너가 알아서 주입
System.out.println(arguments.containsOption("foo")); // foo라는 args가 있는지
}
}
애플리케이션 실행한 뒤 뭔가 실행하고 싶을 때
- ApplicationRunner (추천) 또는 CommandLineRunner
- 순서 지정 가능 @Order
2. 외부설정
application.propertis 는 key = value 방식으로 자동으로 읽어들이는 외부설정 파일이다.
테스트용 application.properties 도 따로 만들수 있다.
저렇게 src/test/resources 에 application.properties 를 만들면
테스트를 돌릴땐 이젠 main에 있는 파일이 아니라 저 파일을 읽는다.(없으면 메인에 있는 친구를 읽음)
음 그렇다면, properties에서 값을 불러 들일때 여러가지 방법이 있는데, 누가 쎌까?(우선순위)
프로퍼티 우선 순위
- 유저 홈 디렉토리에 있는 spring-boot-dev-tools.properties
- 테스트에 있는 @TestPropertySource
- @SpringBootTest 애노테이션의 properties 애트리뷰트
- 커맨드 라인 아규먼트
- SPRING_APPLICATION_JSON (환경 변수 또는 시스템 프로티) 에 들어있는 프로퍼티
- ServletConfig 파라미터
- ServletContext 파라미터
- java:comp/env JNDI 애트리뷰트
- System.getProperties() 자바 시스템 프로퍼티
- OS 환경 변수
- RandomValuePropertySource
- JAR 밖에 있는 특정 프로파일용 application properties
- JAR 안에 있는 특정 프로파일용 application properties
- JAR 밖에 있는 application properties
- JAR 안에 있는 application properties
- @PropertySource
- 기본 프로퍼티 (SpringApplication.setDefaultProperties)
application.properties 우선 순위 (높은게 낮은걸 덮어 씁니다.)
- file:./config/
- file:./
- classpath:/config/
- classpath:/
프로퍼티에 랜덤값 설정
${random.*} -> num = ${random.int}
프로퍼티에 설정한 값을 한꺼번에 가져오는
@ConfigurationProperties
이렇게 타입세이프?하게 이용할 수 있다.
'Spring > Spring Boot' 카테고리의 다른 글
Gradle -> Maven (0) | 2020.04.27 |
---|---|
Spring Boot 개념다지기 No.7( @Profile(프로파일),Logger(로깅) ) (0) | 2020.04.26 |
Spring Boot 개념다지기 No.5 (0) | 2020.04.25 |
Spring Boot 개념다지기 No.4 (0) | 2020.04.24 |
Spring Boot 개념다지기 No.3 (0) | 2020.04.21 |
Comments