source

Spring Boot에서 다양한 데이터베이스 구성을 제공하려면 어떻게 해야 합니까?

gigabyte 2023. 2. 23. 22:52
반응형

Spring Boot에서 다양한 데이터베이스 구성을 제공하려면 어떻게 해야 합니까?

현재 보고 있는 데이터베이스 프로파일은 5개입니다.

  • CI 테스트 -> h2 메모리
  • 개발자 환경(테스트 또는 앱 실행 가능) -> h2 mem, h2 파일 또는 postgres
  • production -> postgres (git/war에 저장되지 않은 자격 증명 포함)

현재 postgres가 어플리케이션 실행용으로 설정되어 있고 h2가 다른 것을 사용하여 테스트하도록 설정되어 있습니다.application.propertiesjava/resources와test/resources

이러한 시나리오에서 데이터베이스 연결 정보를 변경하는 가장 간단한 방법은 무엇입니까?

M. Deinum이 코멘트에서 언급했듯이 가장 간단한 방법은 프로파일 고유의 구성을 사용하는 것입니다.

Spring Boot에서는 공통 설정 파일을 1개 가질 수 있습니다(application.properties기타 여러 개의 파일(각각 프로파일에 고유)을 지정합니다.application-${profile}.properties).

예:

  • application.properties- 공통 구성
  • application-dev.properties- 개발 프로파일 설정
  • application-ci.properties- CI 프로파일 구성

예를 들어 응용 프로그램이 "ci" 프로파일과 함께 실행되는 경우 기본 구성 파일과 CI 구성 파일(이 파일에는 CI 프로파일의 데이터 소스 구성 속성이 포함됨)이 로드됩니다.

프로파일을 전환하려면 다음 옵션 중 하나를 사용합니다.

  • JVM 속성:-Dspring.profiles.active=ci
  • 명령줄 스위치:--spring.profiles.active=dev

유닛 테스트의 경우,@ActiveProfiles("test")테스트 클래스에 주석을 달아 테스트 프로파일을 사용하여 단위 테스트를 실행해야 함을 스프링에 알립니다.

또한 운영 데이터베이스 자격 증명을 소스 코드와 함께 저장하지 않으려는 경우 앱을 운영 환경에 배포할 때 외부 구성 파일을 지정할 수 있습니다.

  • 명령줄 스위치 사용:--spring.config.location=/srv/myapp/config.properties
  • JVM 속성 사용:-Dspring.config.location=/srv/myapp/config.properties

위의 시나리오에 대한 간단한 답변은 단일 application.yml 파일을 작성하고 요건에 따라 다른 프로파일(예: -dev, -ci 및 -prod)을 작성하여 DB 정보를 제공하는 것입니다.

예를 들어 다음과 같습니다.

spring:
  profiles.active: development

---
spring:
  profiles: development
datasource:
  db-person:
      url: jdbc:oracle:thin:@db_person_dev
      username: username
      password: pwd
      driver-class-name: oracle.jdbc.OracleDriver
      test-on-borrow: true
      validation-query: SELECT 1 FROM dual
  db-contract:
      url: jdbc:oracle:thin:@db_contract_dev
      username: username
      password: pwd
      driver-class-name: oracle.jdbc.OracleDriver
      test-on-borrow: true
      validation-query: SELECT 1 FROM dual

    ---

    spring:
      profiles: test
    datasource:
      db-person:
          url: jdbc:oracle:thin:@db_person_test
          username: username
          password: pwd
          driver-class-name: oracle.jdbc.OracleDriver
          test-on-borrow: true
          validation-query: SELECT 1 FROM dual
      db-contract:
          url: jdbc:oracle:thin:@db_contract_test
          username: username
          password: pwd
          driver-class-name: oracle.jdbc.OracleDriver
          test-on-borrow: true
          validation-query: SELECT 1 FROM dual

    ---

    spring:
      profiles: production
    datasource:
      db-person:
          url: jdbc:oracle:thin:@db_person_prod
          username: username
          password: pwd
          driver-class-name: oracle.jdbc.OracleDriver
          test-on-borrow: true
          validation-query: SELECT 1 FROM dual
      db-contract:
          url: jdbc:oracle:thin:@db_contract_prod
          username: username
          password: pwd
          driver-class-name: oracle.jdbc.OracleDriver
          test-on-borrow: true
          validation-query: SELECT 1 FROM dual

    ---

자세한 설명과 간단한 예를 보려면 이 링크를 참조하십시오.

언급URL : https://stackoverflow.com/questions/28007686/how-can-i-provide-different-database-configurations-with-spring-boot

반응형