springframework

o.s.w IoC 핵심기술. @PropertySource

Jungsoomin :) 2020. 8. 20. 23:39

프로퍼티 파일 운용은 설정이나 환경등을 모듈화 하여 다양하게 접근하고 저장할 수 있게해주는데, 

 

내가 기억하고 있는 PropertySourcesPlaceHolderConfigurer 빈 처럼 다양하게 프로퍼티 파일을 가져올 수 있는 방법을

 

ApplicationContext 의 Environment 객체가 제공하고 있다.

 

우선 순위는 다음과 같다.

  1.서블릿 설정 매개변수 

   2,서블릿 컨텍스트 WAS 매개변수 ,

    3.JNDI,

      4.JVM 시스템 프로퍼티 -D~~ 

       5.JVM환경변수 : 운영체제 환경 변수

 


@Configuration 에노테이션 이 붙은 설정파일에 @PropertySource 에노테이션을 붙여 속성값에 property 파일의 경로를 지정해주면 프로퍼티 소스에 해당 프로퍼티 파일을 등록하는 것이다. 이는 운영체게 환경변수에 등록함을 의미하며, 프로퍼티 순위가 가장 낮다.

@SpringBootApplication
@PropertySource("classpath:/app.properties")
public class Demospring51Application {

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

    }

}

그 후에 ApplicationContext의 environment 의 getProperty() 메서드로 값을 가져올 수 있게된다. 

    @Autowired
    ApplicationContext ctx;
    
    @Value("${app.name}")
    String appName;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        Environment environment = ctx.getEnvironment();
//        System.out.println(environment.getProperty("app.about"));
        System.out.println(environment.getProperty("app.name"));

        System.out.println(appName);
    }
}

 

다른 방법으로는 기억하고 있는, @Value(플레이스홀더) 에노테이션으로 값을 자유로히 가져다쓸 수 있다는 것이다.