복붙노트

[SPRING] 봄 프로젝트에서 속성 파일을 읽는 방법?

SPRING

봄 프로젝트에서 속성 파일을 읽는 방법?

이 질문을 게시하기 전에 Spring 프로젝트 (웹 기반 프로젝트가 아닙니다)에서 Properties를 가져 오도록 google을 보겠습니다. 모든 사람들이 application-context.xml에 대해 이야기하고 있으며 다음과 같은 구성을 가지고 있기 때문에 혼란 스럽습니다.

그러나, 나는 봄과 함께 정상적인 Java Project (웹 애플 리케이션과 같은 물건)에서 일하고 있습니다. 하지만 속성 파일에서 몇 가지 공통 속성을 얻고 싶습니다 및 JAVA 파일에서 사용해야합니다. Spring / Spring Annotation을 사용하여이를 어떻게 달성 할 수 있습니까?

내 프로젝트에서 myprops.properties 파일을 구성해야하는 곳과 봄을 통해 호출하는 방법은 무엇입니까?

나의 이해는 application-context.xml은 웹 기반 프로젝트에만 사용된다. 그렇지 않다면 application.xml을 정의하기 위해 web.xml이 없으므로이 application-context.xml을 어떻게 구성해야합니까?

해결법

  1. ==============================

    1.다음과 같은 XML 기반 응용 프로그램 컨텍스트를 만들 수 있습니다.

    다음과 같은 XML 기반 응용 프로그램 컨텍스트를 만들 수 있습니다.

    ApplicationContext ctx = new ClassPathXmlApplicationContext("conf/appContext.xml");
    

    xml 파일이 클래스 경로에있는 경우 또는 파일 시스템에서 파일을 사용할 수 있습니다.

    ApplicationContext ctx = new FileSystemXmlApplicationContext("conf/appContext.xml");
    

    더 많은 정보는 Spring 레퍼런스 문서에서 볼 수있다. 또한 정상 종료를 보장하기 위해 종료 훅을 등록해야합니다.

     ctx.registerShutdownHook();
    

    다음으로 PropertyPlaceHolderConfigurer를 사용하여 '.properties'파일에서 속성을 추출하고 bean에 삽입 할 수 있습니다.

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations" value="classpath:com/foo/jdbc.properties"/>
    </bean>
    
    <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    

    마지막으로, 주석 기반 구성을 선호하는 경우 @Value 주석을 사용하여 bean에 속성을 삽입 할 수 있습니다.

    @Component
    public class SomeBean {
    
        @Value("${jdbc.url}") 
        private String jdbcUrl;
    }
    
  2. ==============================

    2.Spring 4부터 @Conperturation 클래스에서 @PropertySource 주석을 사용할 수있다.

    Spring 4부터 @Conperturation 클래스에서 @PropertySource 주석을 사용할 수있다.

    @Configuration
    @PropertySource("application.properties")
    public class ApplicationConfig {
    
        // more config ...
    }
    

    설정 파일을 classpath 외부에 가지고 싶으면 file : 접두사를 사용할 수 있습니다 :

    @PropertySource("file:/path/to/application.properties")
    

    또는 환경 변수를 사용하여 파일을 정의 할 수 있습니다

    @PropertySource("file:${APP_PROPERTIES}")
    

    APP_PROPERTIES가 속성 파일의 위치 값을 갖는 환경 변수 인 경우 (예 : APP_PROPERTIES). /path/to/application.properties.

    @PropertySource, 사용법, 속성 값을 재정의하는 방법 및 선택적 속성 소스를 지정하는 방법에 대한 자세한 내용은 Spring @PropertySource의 블로그 게시물을 읽어보십시오.

  3. ==============================

    3.Spring을 사용할 필요가 없습니다. 다음과 같이 일반 java로 읽을 수 있습니다.

    Spring을 사용할 필요가 없습니다. 다음과 같이 일반 java로 읽을 수 있습니다.

    Properties properties = new Properties();
    properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName));
    
  4. ==============================

    4.귀하의 프로젝트가 전체 앱에서 어떻게 사용될 것인지 알아낼 수 있습니까? 프로젝트가 웹 응용 프로그램의 빌드 경로로 사용되고 프로젝트의 구성이 스프링 주석을 통해 이루어지기 때문에 application.xml 파일을 추가하는 방법에 대해 의문의 여지가 없습니다. 제 제안은 프로젝트를 사용할 사람들을 발표하고, 필요한 것을 알려주고 코드에 @Value ( "$ {valuename}")를 추가해야한다는 것입니다.

    귀하의 프로젝트가 전체 앱에서 어떻게 사용될 것인지 알아낼 수 있습니까? 프로젝트가 웹 응용 프로그램의 빌드 경로로 사용되고 프로젝트의 구성이 스프링 주석을 통해 이루어지기 때문에 application.xml 파일을 추가하는 방법에 대해 의문의 여지가 없습니다. 제 제안은 프로젝트를 사용할 사람들을 발표하고, 필요한 것을 알려주고 코드에 @Value ( "$ {valuename}")를 추가해야한다는 것입니다.

  5. from https://stackoverflow.com/questions/14570477/how-to-read-properties-file-in-spring-project by cc-by-sa and MIT license