복붙노트

[SPRING] Main 클래스에서 스프링 빈에 속성을 주입하는 방법

SPRING

Main 클래스에서 스프링 빈에 속성을 주입하는 방법

내 응용 프로그램과 함께 봄을 사용하고, 클래스 경로의 일부 파일에서 일부 속성을 내 응용 프로그램에 삽입 할 수 있으며 모든 것이 완벽하게 작동합니다. 즉

<bean class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer">
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
        <property name="searchContextAttributes" value="true" />
        <property name="contextOverride" value="true" />
        <property name="ignoreResourceNotFound" value="true" />
        <property name="locations">
            <list>
                <value>classpath:application.properties</value>
            </list>
        </property>
    </bean>

이제 스프링 컨텍스트에서 $ {any.property.from.application.properties}를 사용할 수 있습니다. 그리고 내 주요 수업 :

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("appContext.xml");

그것은 잘 작동, 제 질문은 어떻게 거기에 처음에 봄 컨텍스트에서 속성 파일 위치를 주입합니까, 나는 내 애플 리케이션을 구성 할 수 있도록하고 싶습니다. C : \ dir 또는 / user / home / dir에서 응용 프로그램을 실행하는 경우 응용 프로그램 컨텍스트에서 값이 C : \ application.properties 또는 /user/home/dir/application.properties 중 하나 여야한다고 가정합니다.

해결법

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

    1.나는 비슷한 문제가 언젠가 되돌아왔다. 내 요구 사항은 속성 파일이 응용 프로그램 내부에 번들로 제공되지 않았기 때문입니다 (따라서 클래스 경로에도 포함되지 않음). 파일은 파일 시스템의 어느 위치 에나있을 수 있습니다.  여기 내가 어떻게 해결했는지,

    나는 비슷한 문제가 언젠가 되돌아왔다. 내 요구 사항은 속성 파일이 응용 프로그램 내부에 번들로 제공되지 않았기 때문입니다 (따라서 클래스 경로에도 포함되지 않음). 파일은 파일 시스템의 어느 위치 에나있을 수 있습니다.  여기 내가 어떻게 해결했는지,

    나는 당신의 예제를 재사용 중입니다.

    <bean class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer">
            <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
            <property name="searchContextAttributes" value="true" />
            <property name="contextOverride" value="true" />
            <property name="ignoreResourceNotFound" value="true" />
            <property name="locations">
                <list>
                    <value>file://${APP_PROP_HOME}/application.properties</value>
                </list>
            </property>
        </bean>
    

    Spring은 $ {APP_PROP_HOME}을 해당 env 등록 정보에 저장된 값으로 해석하며 응용 프로그램은 런타임에 구성됩니다.

  2. ==============================

    2.질문을 올바르게 읽는 경우 외부 속성 파일 (예 : 파일이 애플리케이션 런타임 클래스 경로에 없음)을 사용하려고합니다. 이 경우 파일 태그를 사용해야합니다.

    질문을 올바르게 읽는 경우 외부 속성 파일 (예 : 파일이 애플리케이션 런타임 클래스 경로에 없음)을 사용하려고합니다. 이 경우 파일 태그를 사용해야합니다.

     <value>file:///c:\application.properties</value>
    
  3. ==============================

    3.@Value를 사용하여 env의 값을 주입 할 수 있습니다. 예:

    @Value를 사용하여 env의 값을 주입 할 수 있습니다. 예:

    private someFoo;
    
    @Value("${systemProperties.someFoo}")
    public void setSomeParam(String someParam) {
       this.someFoo = someParam;
    }
    
  4. from https://stackoverflow.com/questions/6820724/how-to-inject-properties-into-a-spring-bean-from-main-class by cc-by-sa and MIT license