복붙노트

[SPRING] Spring에서 @PropertyResource로 여러 속성 파일에 액세스하기

SPRING

Spring에서 @PropertyResource로 여러 속성 파일에 액세스하기

Spring 3.1에서 새로운 @PropertySource 어노테이션을 사용하면 Environment로 여러 속성 파일에 어떻게 접근 할 수 있습니까?

현재 내가 가지고있는 것 :

@Controller
@Configuration 
@PropertySource(
    name = "props",
    value = { "classpath:File1.properties", "classpath:File2.properties" })
public class TestDetailsController {


@Autowired
private Environment env;
/**
 * Simply selects the home view to render by returning its name.
 */
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {

    String file1Name = env.getProperty("file1.name","file1.name not found");
            String file2Name = env.getProperty("file2.name","file2.name not found");

            System.out.println("file 1: " + file1Name);
            System.out.println("file 2: " + file2Name);

    return "home";
}

결과는 File1.properties의 올바른 파일 이름이지만 file2.name은 찾을 수 없습니다. File2.properties에 어떻게 액세스 할 수 있습니까?

해결법

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

    1.두 가지 접근 방식이 있습니다. 첫 번째는 applicationContext.xml에서 PropertyPlaceHolder를 사용하는 것입니다. beans-factory-placeholderconfigurer

    두 가지 접근 방식이 있습니다. 첫 번째는 applicationContext.xml에서 PropertyPlaceHolder를 사용하는 것입니다. beans-factory-placeholderconfigurer

    <context:property-placeholder location="classpath*:META-INF/spring/properties/*.properties"/>
    

    추가 할 네임 스페이스는 xmlns : context = "http://www.springframework.org/schema/context"입니다.

    컨트롤러의 String 변수에 키를 직접 액세스하려면 다음을 사용하십시오.

    @Value("${some.key}")
    private String valueOfThatKey;
    

    두 번째 방법은 applicationContext.xml에서 util : 속성을 사용하는 것입니다.

    <util:properties id="fileA" location="classpath:META-INF/properties/a.properties"/>
    <util:properties id="fileB" location="classpath:META-INF/properties/b.properties"/>
    

    namesapce xmlns : util = "http://www.springframework.org/schema/util"schemaLocations 사용 : http://www.springframework.org/schema/util http://www.springframework.org/schema/util /spring-util-3.0.xsd

    그런 다음 귀하의 컨트롤러 :

    @Resource(name="fileA")
    private Properties propertyA;
    
    @Resource(name="fileB")
    private Properties propertyB;
    

    파일에서 값을 원하면 getProperty (String key) 메소드를 사용하십시오.

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

    2.Spring 4.x로 마이그레이션 할 수 있다면 새로운 @PropertySources 주석으로 문제가 해결되었습니다.

    Spring 4.x로 마이그레이션 할 수 있다면 새로운 @PropertySources 주석으로 문제가 해결되었습니다.

    @PropertySources({
            @PropertySource("/file1.properties"),
            @PropertySource("/file2.properties")
    })
    
  3. ==============================

    3.Spring에서는 여러 개의 속성에 액세스 할 수 있습니다.

    Spring에서는 여러 개의 속성에 액세스 할 수 있습니다.

    @PropertySource의 예,

    @PropertySource({
            "classpath:hibernateCustom.properties",
            "classpath:hikari.properties"
    })
    

    @PropertySources의 예,

    @PropertySources({
            @PropertySource("classpath:hibernateCustom.properties"),
            @PropertySource("classpath:hikari.properties")
    })
    

    속성 경로를 지정하면 일반적으로 환경 인스턴스를 통해 액세스 할 수 있습니다.

    내 앱 컨텍스트를 구성하기 위해 속성 값을 사용하면서 컴파일 오류가 발생했습니다. 나는 웹을 통해 찾은 모든 것을 시도했지만 그들은 나를 위해 일하지 않았다!

    아래처럼 Spring 컨텍스트를 설정할 때까지,

    applicationContext.setServletContext(servletContext);
    applicationContext.refresh();
    

    public class SpringWebAppInitializer implements WebApplicationInitializer{
    
        @Override
        public void onStartup(ServletContext servletContext) throws ServletException {
            // Create the 'root' Spring application context
            AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
            // register config class i.e. where i used @PropertySource
            applicationContext.register(AppContextConfig.class);
            // below 2 are added to make @PropertySources/ multi properties file to work
            applicationContext.setServletContext(servletContext);
            applicationContext.refresh();
    
            // other config
        }
    }
    

    귀하의 정보는 Spring 4.3을 사용하고 있습니다.

  4. from https://stackoverflow.com/questions/14505078/accessing-multiple-property-files-with-propertyresource-in-spring by cc-by-sa and MIT license