외부설정

프로퍼티를 설정하는 방법은 매우 다양하며 우선순위에 따라 값이 설정된다.

 

더보기

프로퍼티 우선 순위

  1. 유저 홈 디렉토리에 있는 spring-boot-dev-tools.properties

  2. 테스트에 있는 @TestPropertySource

  3. @SpringBootTest 애노테이션의 properties 애트리뷰트

  4. 커맨드 라인 아규먼트

  5. SPRING_APPLICATION_JSON (환경 변수 또는 시스템 프로티) 에 들어있는 프로퍼티

  6. ServletConfig 파라미터

  7. ServletContext 파라미터

  8. java:comp/env JNDI 애트리뷰트

  9. System.getProperties() 자바 시스템 프로퍼티

  10. OS 환경 변수

  11. RandomValuePropertySource

  12. JAR 밖에 있는 특정 프로파일용 application properties

  13. JAR 안에 있는 특정 프로파일용 application properties

  14. JAR 밖에 있는 application properties

  15. JAR 안에 있는 application properties

  16. @PropertySource

  17. 기본 프로퍼티 (SpringApplication.setDefaultProperties)

프로퍼티의 우선순위는 다음과 같다. application.properties는 15위인것을 볼 수 있다.

 

 

테스트를 실행하면 main을 먼저 실행 후 test가 오버라이딩 하기 때문에

test에 있는 값들이 최종적으로 사용된다.

따라서 main과 test에 각각 application.properties가 있다면 test에 있는 application.properties가 사용된다.

 

 

@SpringBootTest 

SpringBootTest 어노테이션을 이용하여 우선순위를 높일 수 있다.

 

@TestPropertySource

다음은 TestPropertySource를 이용한 방법이다.

 

다음과 같이 test.properties를 따로 생성할 수도 있다.

 

더보기

application.properties 우선 순위

  1. file:./config/

  2. file:./

  3. classpath:/config/

  4. classpath:/

application.properties 위치에 따른 우선순위는 다음과 같다.

 

@ConfigurationProperties

 

다음과 같은 프로퍼티값을 하나의 빈으로 받을 수 있다.

 

 	<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

우선 pom.xml에 등록해준다.

 

ConfigurationProperties를 설정해주고 빈으로 등록한다.

 

다음과 같이 Autowired로 빈을 받아 사용할 수 있다.

 

@Value를 이용하는 방법보다 융통성있게 바인딩을 할 수 있다.

키 이름에 _ (언더스코어) 또는 - (케밥)이 포함되어 있어도  camlecase 로 바인딩 된다.

 

@Validated 를 이용하여 유효성 검사도 가능하다.

 

'Study > Spring boot' 카테고리의 다른 글

[Spring Boot] 로깅  (0) 2020.12.14
[Spring Boot] 프로파일  (0) 2020.12.14
[Spring Boot] SpringApplication  (0) 2020.12.12
[Spring Boot] 자동 설정  (0) 2020.12.07
[Spring Boot] 스프링 부트 프로젝트 생성  (0) 2020.12.06

ApplicationEvent

스프링에서 ApplicationEvent를 이용하여 웹어플리케이션이 구동될때 이벤트를 구현할 수 있다.

 

 

ApplicationStartingEvent 는 ApplicationListner를 이용하여 만들 수 있다.

하지만 이 상태로는 어플리케이션 구동시 출력이 안된다.ApplicationContext가 생성되기 전에 이벤트가 실행이 되므로 Bean으로 등록하여도 출력이 되지 않는다.

이를 위해 main에서 Event를 등록해 주어야 한다.

 

addLiestners를 이용하여 리스너를 등록해준다.

 

어플리케이션이 구동될 때 출력되는것을 볼 수 있다.

 

 

ApplicationStartedEvent는 ApplicationContext가 생성된 후에 실행되므로 main에 리스너를 등록하지 않아도

Bean으로 설정만 해주면 실행이 된다.

 

 

 

ApplicationArguments

ApplicationArguments를 이용하여 아규먼트를 받을 수 있다.

 

Vmoption과 arguments에 다음과 같이 값을 설정해 본다.

 

arguments에서 --로 입력한 값만 들어오는 것을 확인할 수 있다. JVM으로 설정한 값은 argument가 아니기 때문에..

 

 

ApplicationRunner

application이 실행된 뒤에 뭔가를 실행하고 싶을때 사용한다.

다음과 같이 applicaitonRunner를 구현해보자

어플리케이션이 실행된 뒤에 출력되는 것을 볼 수 있다.

 

만약 ApplicationRunner가 여러개인 경우 Order를 이용하여 순서를 지정해 줄 수 있다.

'Study > Spring boot' 카테고리의 다른 글

[Spring Boot] 로깅  (0) 2020.12.14
[Spring Boot] 프로파일  (0) 2020.12.14
[Spring Boot] 외부설정  (0) 2020.12.13
[Spring Boot] 자동 설정  (0) 2020.12.07
[Spring Boot] 스프링 부트 프로젝트 생성  (0) 2020.12.06

스프링 부트 자동설정의 이해

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

@SpringBootApplication 세 개의 어노테이션이 합쳐진 것이다.

  • @EnableAutoConfiguration

  • @ComponentScan

  • @EnableAutoConfiguration

Bean은 @ComponentScan, @EnableAutoConfiguration 2번의 과정을 거쳐 등록된다.

 

@ComponentScan은 @Component을 가진 클래스를 스캔해서 빈으로 등록한다.

@Configuration @Repository @Service @Controller @RestController 도 포함된다.

 

@EnableAutoConfiguration 은 spring.factories에 있는 조건에 따라 빈을 자동적으로 등록한다.

 

 

자동설정 만들기

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure-processor</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.0.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

pom.xml에 의존성을 추가한다.

 

 

Happy 클래스를 생성 후 @Configuration 파일을 작성한다.

 

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\

src/main/resource/META-INF에 spring.factories 파일을 만든 후 EnableAutoConfiguration을 설정해준다.

스프링 부트에서 EnableAutoConfiguration을 사용할 경우 키 값을 읽어 자동적으로 빈을 등록해준다.

 

mvn install

을 하여 jar파일을 생성한다.

 

 

 

다른 프로젝트에서 위에서 만든 의존성 프로젝트의 정보를 입력하면 라이브러리가 추가된 것을 볼 수 있다.

 

ApplicationRunner를 이용하여 어플리케이션이 구동될때 빈이 자동적으로 설정되도록 한다.

결과값이 출력되는 것을 볼 수 있다.

 

 

빈의 재정의가 필요하다면 @ConditionalOnMissingBean 을 붙여준다.

 

재정의된 정보가 출력된 것을 볼 수 있다.

 

 

 

자동 설정 만들기 - @ConfigurationProperties

간단하게 properties 를 변경하여 값을 정의하도록 할 수 있다.

 

	<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

pom.xml에 추가한다.

 

@ConfigurationProperties와 @EnableConfigurationProperties을 설정해준다.

 

빈을 사용하는 곳에서 application.properties 파일에 값을 정의해준다.

 

프로퍼티에 정의된 값이 출력되는 것을 확인할 수 있다.

'Study > Spring boot' 카테고리의 다른 글

[Spring Boot] 로깅  (0) 2020.12.14
[Spring Boot] 프로파일  (0) 2020.12.14
[Spring Boot] 외부설정  (0) 2020.12.13
[Spring Boot] SpringApplication  (0) 2020.12.12
[Spring Boot] 스프링 부트 프로젝트 생성  (0) 2020.12.06

IntelliJ에서 스프링 부트 프로젝트 생성

스프링 부트 프로젝트 생성 방법은 여러가지가 있다.

Spring Initializr를 이용하여 간단하게 생성할수 있으며 Maven으로 생성 시 추가적인 환경설정이 필요하다.

 

 

File>New Project를 선택한다. 빌드 타입에 따라 Maven, Gradle을 선택한다.

 

GroupId와 ArtifactId를 입력 한다.

 

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

pom.xml에 기본설정을 추가해준다.

 

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

@SpringBootApplication 어노테이션을 붙인 메인클래스를 생성한다.

 

 

스프링 부트가 실행되는 것을 확인할 수 있다.

 

 

'Study > Spring boot' 카테고리의 다른 글

[Spring Boot] 로깅  (0) 2020.12.14
[Spring Boot] 프로파일  (0) 2020.12.14
[Spring Boot] 외부설정  (0) 2020.12.13
[Spring Boot] SpringApplication  (0) 2020.12.12
[Spring Boot] 자동 설정  (0) 2020.12.07

+ Recent posts