2015-01-18 26 views
22

Như tôi hiện đang nhìn thấy nó tôi có 5 cơ sở dữ liệu có thể tiểuTôi có thể cung cấp các cấu hình cơ sở dữ liệu khác nhau như thế nào với Spring Boot?

  • CI thử nghiệm -> h2 mem
  • môi trường
  • nhà phát triển (có thể kiểm tra hoặc ứng dụng chạy) -> h2 mem, hoặc tập tin h2, hoặc postgres
  • sản xuất - postgres> (lý tưởng chứng chỉ không được lưu trữ trong git/chiến tranh)

hiện tại tôi có postgres cấu hình để chạy ứng dụng, và h2 cấu hình để thử nghiệm qua có một khác nhau application.properties trong java/resource s vs test/resources

cách đơn giản nhất để thay đổi thông tin kết nối cơ sở dữ liệu cho các trường hợp này là gì?

+0

mà xây dựng công cụ mà bạn đang sử dụng? –

+5

Tiểu sử. Spring Boot sẽ tải mặc định 'application.properties' và, khi được chỉ định, cũng là một profile cụ thể. Điều này được giải thích [ở đây] (http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-profile-specific-properties) trong tài liệu. –

+0

@MasterSlave maven – xenoterracide

Trả lời

41

Như M. Deinum đề cập trong nhận xét của mình, cách đơn giản nhất để thực hiện việc này là sử dụng profile specific configuration.

Khởi động mùa xuân cho phép bạn có một tệp cấu hình chung (application.properties) và sau đó nhiều tệp khác, mỗi tệp cụ thể cho một cấu hình (application-${profile}.properties).

Ví dụ:

  • application.properties - Common cấu hình
  • application-dev.properties - Cấu hình cho cấu hình dev
  • application-ci.properties - Cấu hình cho các cấu ci

Nếu ứng dụng của bạn chạy với "ci" hồ sơ ví dụ, tệp cấu hình mặc định cũng như tệp cấu hình ci (có chứa dữ liệu Các thuộc tính cấu hình ource cho ci profile) sẽ được tải.

Để chuyển hồ sơ bạn có thể sử dụng một trong các tùy chọn sau:

  • tài sản JVM: -Dspring.profiles.active=ci
  • chuyển đổi dòng lệnh: --spring.profiles.active=dev

Đối với các bài kiểm tra đơn vị bạn có thể sử dụng @ActiveProfiles("test") chú thích trên của bạn các lớp kiểm tra để cho Spring biết rằng các bài kiểm tra đơn vị nên được chạy với cấu hình kiểm tra.

Ngoài ra nếu bạn không muốn để lưu trữ thông tin cơ sở dữ liệu sản xuất cùng với mã nguồn của bạn, bạn có thể chỉ định tập tin cấu hình bên ngoài khi bạn triển khai ứng dụng trong sản xuất:

  • Sử dụng dòng lệnh chuyển đổi: --spring.config.location=/srv/myapp/config.properties
  • Sử dụng một tài sản JVM: -Dspring.config.location=/srv/myapp/config.properties
+0

Tôi đang cố gắng thực hiện tương tự. Tuy nhiên, cấu hình cho hsqldb không chỉ được chọn. Bạn có thể gửi mẫu cho application-dev.properties không? – divinedragon

+1

Làm cách nào để kích hoạt cấu hình? Không có gì tôi làm dường như làm việc. – dleerob

+0

'-Dspring.profiles.active = ci' là" đối số VM ". Tìm nó trong cấu hình chạy eclipse -> đối số –

0

câu trả lời gọn cho kịch bản trên sẽ là bằng cách tạo ra một tập tin application.yml duy nhất và tạo ra cấu hình khác nhau dựa trên các yêu cầu, trong yo ur trường hợp -dev, -ci và -prod và cung cấp thông tin DB cho phù hợp.

mẫu ví dụ là:

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 

    --- 

Để hiểu rõ hơn nữa và ví dụ đơn giản bạn có thể tham khảo này link.

Các vấn đề liên quan