2016-07-12 19 views
9

Tôi có một ứng dụng Khởi động mùa xuân sẽ chạy trong các môi trường khác nhau và dựa trên môi trường nó chạy, nó sẽ kết nối với một cơ sở dữ liệu khác. Tôi có một vài application.properties file, một cho từng môi trường mà trông giống như ví dụ:Cài đặt Spring Boot application.properties dựa trên Biến môi trường

application-local.properties:

spring.datasource.platform=postgres 
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb 
spring.datasource.username=dbuser 
spring.datasource.password=123456789 

application-someserver.properties:

spring.datasource.platform=postgres 
spring.datasource.url=jdbc:postgresql://someserver:5432/myproddb 
spring.datasource.username=produser 
spring.datasource.password=productionpass 

vv vv

Trên mỗi tôi môi trường, tôi có một biến môi trường được gọi là MYENV được đặt thành loại môi trường, ví dụ phong phú local hoặc someserver (tên của các tệp application-{env}.properties khớp hoàn toàn với tên môi trường).

Làm cách nào để khởi động lò xo để đọc biến môi trường này và tự động chọn tệp .properties đúng? Tôi không muốn phải làm toàn bộ -Dspring.profiles.active=someserver vì cách gói này được triển khai (nó sẽ không chạy như một cái bình).

Trả lời

12

Làm cách nào để khởi động lò xo để đọc biến môi trường này và tự động chọn tệp .properties chính xác?

Cho Spring Boot chọn Cấu hình hoạt động từ biến số MYENV thuộc tính hoặc môi trường. Một cách để làm điều này là thêm đoạn mã sau vào application.properties của bạn:

spring.profiles.active=${MYENV} 

Bằng cách này mùa xuân Boot sẽ thiết lập spring.profiles.active với giá trị của MYENV biến môi trường.

Tôi không phải làm toàn bộ -Dspring.profiles.active = someserver vì cách gói này được triển khai (nó sẽ không được chạy như một jar)

Bạn có thể sử dụng biến môi trường tương ứng với biến đó spring.profiles.active, nếu bạn không muốn chuyển thuộc tính hệ thống qua các đối số -D. Biến môi trường tương ứng là SPRING_PROFILES_ACTIVE. Ví dụ: nếu bạn đặt SPRING_PROFILES_ACTIVE thành local, cấu hình local sẽ được kích hoạt. Nếu bạn khăng khăng sử dụng biến môi trường MYENV, giải pháp đầu tiên là cách để đi.

+0

có thể có một "mặc định" cấu hình sao cho trong biến env không phù hợp với bất kỳ tập tin, một tiêu chuẩn được chọn? –

+7

'spring.profiles.active = $ {MYENV: defaultValue}' –

+0

Ngoài ra, hãy đặt cấu hình mặc định và thông thường thành 'application.properties'. Nó luôn luôn sẽ được sử dụng nhưng với ưu tiên thấp hơn đối với cấu hình cụ thể hồ sơ –

0

Nếu bạn đang triển khai ứng dụng đó vào một số vùng chứa (tomcat, weblogic, ...), bạn có thể chỉ định biến môi trường. Ví dụ, hãy chỉ định biến môi trường application1.spring.profiles.active=someserver và sau đó trong thuộc tính application.properties của bạn, hãy đặt thuộc tính spring.profiles.active=${application1.spring.profiles.active}

0

Sử dụng ngữ cảnh mùa xuân 5.0 Tôi đã đạt được thành công tải tập tin bất động sản chính xác dựa trên môi trường hệ thống thông qua các chú thích sau

@PropertySources({ 
    @PropertySource("classpath:application.properties"), 
    @PropertySource("classpath:application-${MYENV:test}.properties")}) 

Đây MYENV giá trị được đọc từ môi trường hệ thống và nếu môi trường hệ thống là không có mặt sau đó mặc định kiểm tra hồ sơ tài sản môi trường sẽ được nạp, nếu Tôi đưa ra giá trị MYENV sai - nó sẽ không khởi động được ứng dụng.

Lưu ý: đối với từng hồ sơ, bạn muốn duy trì bạn cần phải thực hiện một dành cho ứng dụng [hồ sơ] .property tập tin và mặc dù tôi đã sử dụng bối cảnh mùa xuân 5,0 & không mùa xuân khởi động - Tôi tin rằng điều này cũng sẽ làm việc trên mùa xuân 4.1

Đây là giải pháp tốt nhất mà tôi tin rằng cho AWS Lambda của tôi - với sự phụ thuộc tối thiểu

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