2014-12-01 2 views
9

특정 환경 변수가있을 때 특정 데이터 소스를 사용하도록 스프링 부트 애플리케이션을 구성하려고합니다. 예를 들어, 환경 변수가 MY_PROD_DATASOURCE 인 경우 프로덕션 데이터 소스를 사용하고 싶습니다. 그렇지 않으면 같은 유형의 로컬 데이터 소스를 사용하고 싶습니다.환경에 기반한 Spring 데이터 소스

application.properties에서 하나의 데이터 소스를 선언하는 방법을 설명하는 something in the Spring reference을 발견했습니다. 특히, MySQL 데이터 소스는 다음과 같이 보일 수 있습니다 :

spring.datasource.url=jdbc:mysql://localhost/test 
spring.datasource.username=dbuser 
spring.datasource.password=dbpass 
spring.datasource.driverClassName=com.mysql.jdbc.Driver 

그러나이 파일에서 조건부로 데이터 소스 등록 정보를 변경할 수는 없습니다. 그것을 할 다른 방법이 있습니까? 당신이 할 수있는 봄 부팅에서

+0

다른 데이터 소스 파일을 사용하여 여러 세션 팩토리를 정의 할 수 있습니다. http://stackoverflow.com/questions/20541736/hibernate-configuring-multiple-datasources-and-multiple-session-factories –

+0

좀 더 자세히 설명해 주시겠습니까? 아마도 대답으로? – nmagerko

답변

10

: 당신의 항아리에서

  1. 구체화 된 application.properties과 시작 매개 변수로 경로를 추가하여 환경에 따라 파일을 제공 :

    java -jar your-app.jar --spring.config.location=/path/to/app.properties 
    
  2. 사용 봄 프로파일을.

    spring: 
        profiles: development 
    server: 
        port: 9001 
    
    --- 
    
    spring: 
        profiles: production 
    server: 
        port: 0 
    
  3. : 당신은 아래와 같은 규칙을 사용하여 모든 환경에 대한 속성을 넣을 수있는 application.yaml에 속성을 넣어,

  4. 사용 봄 프로파일 대신 application.properties 각각 서로 다른 데이터 소스 속성에서 각 프로파일에 대한 application-${profile}.properties 만들기

자세한 내용은 스프링 부트 참조 섹션 How to change configuration depending on the environment에서 확인하십시오.

+0

그게 내가하려고하는 것처럼 보입니다! 그러나, 나는 후속 질문을 가지고있다 : 이것은 내 앱에서'@Configuration'과/또는'@ EnableAutoConfiguration' 어노테이션을 사용할 수 없다는 것을 의미합니까? – nmagerko

+1

할 수 있습니다. –

관련 문제