2014-11-19 1 views
0

가능한 한 Java 코드에 많은 스프링 구성을 포함하려는 응용 프로그램을 작성하기 시작했습니다. 내가 겪게되는 문제는 속성 파일 때문입니다.스프링 코드 기본 구성에서 등록 정보 파일을 올바르게 처리하는 방법

파일 포함 콩 선언 : 지금까지 writen 한 내용을 살펴 보자

@Configuration 
@ImportResource("classpath:properties-configuration.xml") 
public class ContextConfigutarion { 

    @Value("${database.url}") 
    private String database_url; 

    @Value("${database.user}") 
    private String database_user; 

    @Value("${database.password}") 
    private String database_password; 

    @Value("${database.default.shema}") 
    private String database_default_shema; 

    @Bean 
    public BasicDataSource dataSource() { 
     BasicDataSource dataSource = new BasicDataSource(); 
     dataSource.setDriverClassName(com.mysql.jdbc.Driver.class.getName()); 
     dataSource.setUrl(database_url); 
     dataSource.setUsername(database_user); 
     dataSource.setPassword(database_password); 
     return dataSource; 
    } 

    @Bean 
    public LocalSessionFactoryBean sessionFactory() { 
     LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); 
     sessionFactory.setDataSource(dataSource()); 
     sessionFactory.setHibernateProperties(hibernateProperties); // <- here I encountered a problem 
     return sessionFactory; 
    } 
... 
} 

특성-의 configuration.xml는 파일 속성의 위치를 ​​지정에만 사용 최소 necessery 파일입니다 :

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans.xsd 
         http://www.springframework.org/schema/context 
         http://www.springframework.org/schema/context/spring-context.xsd"> 

    <context:property-placeholder location="classpath:database.properties" /> 

</beans> 

sessionFactory 객체를 구성하기 시작했을 때 문제가 있음을 발견했습니다. ContextConfiguration 클래스에서 이해할 수 있듯이, database.properties 파일의 모든 속성을 뺄 필요가 있습니다. 응용 프로그램에 많은 등록 정보가 있으면 구성 Java 코드가 중복 적으로 커집니다. Spring을 통해 속성을 모든 컴포넌트를 추출하지 않고 구성 요소로 전송하는 더 좋은 방법은 없을까요?

두 번째 관련 질문 : 트리 구조와 같은 응용 프로그램 속성을 유지하는 좋은 방법은 무엇입니까? 위의 예제에서 볼 수 있듯이 응용 프로그램 속성에는 데이터 소스 속성, 최대 절전 모드 속성 등이 포함되어 있습니다.이 속성은 실제로 속성 트리입니다. 내 응용 프로그램이 더 크고 더 많은 구성 요소가 트리 구조와 같은 속성을 보존하면 위대 할 수 있습니다. 나는 특성이 그렇게 카탈로그에 저장 한 나는 이미지 : 나는 application.properties을 요구하는 경우 나 최대 절전 모드를 요청할 경우

/application 
    /hibernate 
     filename.properties 
    /database 
     filename.properties 
    /someOddComponent 
     /someStrangeComponent 
      filename.properties 
     filename.properties 
    filename.properties 

그래서 나는 모든 .properties의 응용 프로그램 디렉토리에있는 파일 (및 하위 카탈로그)에 대한 합계를 가지고 whould .properties 모든 .properties 파일에 대한 합계가 whould get 디렉토리 (및 하위 카탈로그) 등. 여기에 내가 문제를 과장했을 수도 있습니다. 어떻게 생각하십니까?

답변

1

먼저 xml 파일을 버리고 @PropertySource 주석을 사용하여 등록 정보 파일을로드하고 구성 클래스에 PropertySourcePlaceholderConfigurer을 등록하십시오.

@Configuration 
@PropertySource("classpath:database.properties") 
public class ContextConfigutarion { 

    @Bean 
    public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() { 
     return new PropertySourcesPlaceholderConfigurer(); 
    } 
} 

대신 @Value 주석을 지정하는 속성이 여러 개인 경우 대신 EnvironmentgetPropertygetRequiredProperty 방법을 사용합니다.

@Configuration 
@PropertySource("classpath:database.properties") 
public class ContextConfigutarion { 

    @Autowired 
    private Environment env; 

    @Bean 
    public BasicDataSource dataSource() { 
     BasicDataSource dataSource = new BasicDataSource(); 
     dataSource.setDriverClassName(com.mysql.jdbc.Driver.class.getName()); 
     dataSource.setUrl(env.getRequiredProperty("database.url")); 
     dataSource.setUsername(env.getRequiredProperty("database.user)); 
     // Other properties 
     return dataSource; 
    } 

} 

구성 파일을 복잡하게 만들거나 유지 관리 할 수 ​​없으므로 많은 파일을 갖고 싶지는 않습니다. 특정 숫자로 제한하십시오. 시스템과 같은 트리를 원한다면 속성 파일을 사용하지 말고 대신 yaml 파일을 사용하십시오. 로드가 조금 더 어려워도 (@PropertySource으로 지원되지 않음) 단일 파일에 트리와 같은 구성 구조가 허용됩니다.

더 좋게도 Spring Boot을 사용하면 복잡성을 처리 할 수 ​​있습니다 (즉, 속성과 yaml 파일을 모두 지원함). 구성을 줄이고 멋진 자동 구성을 즉시 사용할 수 있습니다.

관련 문제