Làm cách nào để kích hoạt cấu hình Spring Boot khi chạy từ IntelliJ?


133

Tôi có 5 môi trường:

 - local (my development machine)
 - dev
 - qc
 - uat
 - live
 - staging

Tôi muốn các thuộc tính ứng dụng khác nhau được sử dụng cho từng môi trường, vì vậy tôi có các tệp thuộc tính sau, mỗi tệp có một URL khác nhau cho nguồn dữ liệu:

 - application.properties  (containing common properties)
 - application-local.properties
 - application-dev.properties
 - application-qc.properties
 - application-uat.properties
 - application-live.properties

Tôi đang sử dụng IntelliJ và chạy ứng dụng của mình bằng bootRun trong plugin Gradle trên máy cục bộ của mình. Tôi sẽ sử dụng triển khai cùng một tệp chiến tranh ứng dụng trên tất cả các môi trường khác chạy Tomcat.

Tôi đã thử thêm:

--spring.profiles.active = cục bộ

để cấu hình chạy dưới các tham số script.

Tôi đã thử thêm

-Dspring.profiles.active = cục bộ

để cấu hình chạy dưới các tùy chọn VM.

Không làm việc. Tôi liên tục thấy thông báo INFO khi khởi động nói: Không có cấu hình hoạt động, quay lại cấu hình mặc định: mặc định

Nếu tôi chạy ứng dụng của mình từ dòng lệnh windows bằng

gradle bootRun

nhưng trước tiên tôi đặt biến môi trường

set SPRING_PROFILES_ACTIVE=local

Sau đó, mọi thứ hoạt động.

Vì vậy, câu hỏi của tôi là, làm cách nào để kích hoạt hồ sơ khởi động mùa xuân cục bộ của tôi khi chạy bootRun từ IntelliJ?


1
Tại sao bạn chạy ứng dụng thông qua gradle ở đó? Sẽ không thuận tiện hơn 10 lần khi sử dụng cấu hình chạy? Có một trường nơi bạn có thể đặt cấu hình để bật ...
Stephane Nicoll

Tôi đang sử dụng cấu hình chạy trong IntelliJ, như đã giải thích ở trên. Nó không hoạt động.
dleerob

2
Không, bạn không phải. Điều tôi đang nói đến là "Cấu hình chạy Spring Boot" Chạy -> Chỉnh sửa cấu hình> Mới> Spring Boot.
Stephane Nicoll

Vâng, tôi đã chuyển khỏi cấu hình chạy Spring Boot vì tôi cần mở rộng project.properations thành application.properations trong build.gradle của tôi và nếu tôi sử dụng cấu hình chạy Spring Boot, nó dường như không hoạt động. Tôi sẽ xem xét giải quyết vấn đề đó và sau đó có lẽ tôi chỉ có thể sử dụng trường hồ sơ hoạt động như bạn đề xuất
dleerob

1
Sử dụng cấu hình Spring Boot có vẻ rắc rối hơn giá trị của nó. 'Tạo' chỉ đơn giản là sao chép trên các tài nguyên và không lọc / thay đổi chúng theo kịch bản xây dựng. Sau đó bảo nó chạy 'xây dựng' từ lớp thay vì 'tạo' chỉ đơn giản là khiến cho việc chạy bị đóng băng. Nếu tôi sử dụng bootRun thay vào đó, cùng với mục nhập môi trường của tôi như câu trả lời dưới đây, tất cả đều hoạt động tốt.
dleerob

Câu trả lời:


194

Tôi đã thêm vào -Dspring.profiles.active=testTùy chọn VM và sau đó chạy lại cấu hình đó. Nó hoạt động hoàn hảo.

Điều này có thể được thiết lập bởi

  • Lựa chọn Run | Edit Configurations...
  • Chuyển đến Configurationtab
  • Mở rộng Environmentphần để tiết lộVM options

Tôi đã bị mắc kẹt trong tình huống tương tự nhưng đối với một dự án Maven. Cảm ơn đã giúp đỡ. Chúng tôi đã đặt tùy chọn VM cho mỗi và mọi tệp thử nghiệm.
Sri9911

2
Nó không làm việc cho tôi quá. Tôi sử dụng gradle và hai mô-đun (api và ui)
Virkom

1
Tôi cũng không làm việc, cũng sử dụng gradle ở đây.
Iari

HI, tôi có cùng một vấn đề nhưng sửa chữa này không khắc phục vấn đề. Điều gì có nghĩa ở đây bằng cách chạy lại cấu hình? nó chỉ là như chạy lại nhiệm vụ?
dùng1456110

Tôi đã chạy thử nghiệm cụ thể đó sau khi chỉnh sửa nó như hiển thị.
Thơm

82

Nếu bạn thực sự sử dụng các cấu hình chạy khởi động mùa xuân (hiện chỉ được hỗ trợ trong Phiên bản cuối cùng), bạn có thể dễ dàng định cấu hình trước các cấu hình trong cài đặt "Cấu hình hoạt động".

nhập mô tả hình ảnh ở đây


1
Cảm ơn, tôi chắc chắn điều này sẽ hoạt động, tuy nhiên tôi không sử dụng cấu hình chạy Spring Boot, tôi đang sử dụng cấu hình chạy Gradle không có trường "Hồ sơ hoạt động". Bộ lọc xây dựng lớp của tôi và sửa đổi một số tệp thuộc tính mà nó sao chép vào thư mục bản dựng, vì vậy tôi đang sử dụng cấu hình Chạy lớp cho việc này.
dleerob

Như một câu trả lời ở trên đã chỉ ra: nếu điều này không hiệu quả với bạn, hãy đảm bảo rằng bạn sẽ vượt qua trong ví dụ argscủa mìnhApplication.main()SpringApplication.run( Application.class, args );
Xaero Degreaz

Tính năng này chỉ được hỗ trợ trong phiên bản Ultimate.
Julien Malige

Cảm ơn @JulienMalige đã chỉ ra điều này. Tôi sẽ chỉnh sửa câu trả lời của tôi.
Daniel Bubenheim

11

Hãy thử thêm lệnh này trong build.gradle của bạn

nhập mô tả hình ảnh ở đây

Vì vậy, để chạy cấu hình hình dạng đó:

nhập mô tả hình ảnh ở đây


9

Spring Boot dường như đã thay đổi cách đọc các tùy chọn VM khi nó phát triển. Đây là một số cách để thử khi bạn khởi chạy một ứng dụng trong Intellij và muốn kích hoạt một số cấu hình:

1. Thay đổi tùy chọn VM

Mở "Chỉnh sửa cấu hình" trong "Chạy" và trong "Tùy chọn VM", thêm: -Dspring.profiles.active=local

Nó thực sự hoạt động với một dự án của tôi với Spring Boot v2.0.3.RELEASESpring v5.0.7.RELEASE, nhưng không phải với một dự án khác với Spring Boot v2.1.1.RELEASESpring v5.1.3.RELEASE.

Ngoài ra, khi chạy với Maven hoặc JAR, mọi người đã đề cập đến điều này:

mvn spring-boot:run -Drun.profiles=dev

hoặc là

java -jar -Dspring.profiles.active=dev XXX.jar

(Xem tại đây: cách sử dụng cấu hình Spring Boot )

2. Vượt qua JVM

Nó được đề cập ở đâu đó, Spring thay đổi cách khởi chạy quy trình của các ứng dụng nếu bạn chỉ định một số tùy chọn JVM; nó tạo ra một quá trình khác và sẽ không vượt qua được đối số mà nó nhận được để nó không hoạt động. Cách duy nhất để vượt qua args với nó, là:

mvn spring-boot:run -Dspring-boot.run.jvmArguments="..."

Một lần nữa, đây là cho Maven. https://docs.spring.io/spring-boot/docs/civerse/maven-plugin/examples/run-debug.html

3. Cài đặt (ứng dụng) env var

Điều làm việc cho tôi cho dự án thứ hai, là thiết lập biến môi trường, như đã đề cập trong một số câu trả lời ở trên: "Chỉnh sửa cấu hình" - "Biến môi trường" và:

SPRING_PROFILES_ACTIVE=local

1
Các var env thực sự nên được SPRING_PROFILES_ACTIVE.
Josh M.

Tôi đã thêm nó vào "Chạy cấu hình" của IDEA "tùy chọn VM" như "spring.profiles.active" và nó hoạt động. Có lẽ một hình thức khác như urs được sử dụng trên toàn hệ thống trong các thuộc tính hệ thống?
WesternGun

Nếu bạn thêm nó vào ~/.profilehoặc tương tự, bạn phải sử dụng SPRING_PROFILES_ACTIVE- spring.profiles.activecó thể chỉ hoạt động như một đối số trên dòng lệnh.
Josh M.

1
À .. vậy bạn có nghĩa giống như tôi nghi ngờ; env hệ thống thực không chỉ là env ứng dụng. OK tôi thực hiện chỉnh sửa.
WesternGun

8

Tôi đã kết thúc việc thêm phần sau vào build.gradle của mình:

bootRun {
  environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "local"
}

test {
  environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "test"
}

Vì vậy, bây giờ khi chạy bootRun từ IntelliJ, nó mặc định là cấu hình "cục bộ".

Trên các môi trường khác của chúng tôi, chúng tôi chỉ đơn giản sẽ đặt biến môi trường 'XUÂN_PHẦN_PHẦN_ACTIVE' trong Tomcat.

Tôi đã nhận được điều này từ một nhận xét được tìm thấy ở đây: https://github.com/spring-projects/spring-boot/pull/592


6

Một nguyên nhân có thể xảy ra có thể là do bạn không truyền các tham số dòng lệnh vào phương thức chính của ứng dụng. Tôi đã phạm sai lầm tương tự vài tuần trước.

public static final void main(String... args) {
    SpringApplication.run(Application.class, args);
}

Cảm ơn đã trả lời và đề nghị, tuy nhiên tôi đang chuyển các đối số trong.
dleerob

Điều này thực sự đã khắc phục vấn đề của tôi. Vì một số lý do khi tôi tạo dự án bằng Gradle, nó không tự động tạo Applicationlớp của tôi nên nó đã làm bằng tay từ bộ nhớ. Bỏ lỡ argsbước này và do đó, hộp "Hồ sơ hoạt động" trong cấu hình chạy không hoạt động - Tôi phải chuyển thủ công trong -Dspring.profiles.activehộp tùy chọn VM.
Xaero Degreaz

3

Tôi sử dụng phiên bản cộng đồng Intellij. Chuyển đến "Chạy / Gỡ lỗi cấu hình"> tab Người chạy> Biến môi trường> nút bấm "...". Thêm: SPRING_PROFILES_ACTIVE = cục bộ

spring.profiles.active


3

Đối với Spring Boot 2.1.0 trở lên, bạn có thể sử dụng

mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar


2
Trong dòng lệnh của bạn sẽ làspring-boot:run -Dspring-boot.run.profiles=local
Ông K.

với spring-boot: chạy đây là câu trả lời
kakabali

2

Trong trường hợp của tôi, tôi đã sử dụng cấu hình bên dưới tại các tùy chọn VM IntelliJ, nó không chọn cấu hình cục bộ nhưng sau khi khởi động lại, IntelliJnó đã chọn chi tiết cấu hình IntelliJvà dịch vụ bắt đầu chạy.

-Dspring.profiles.active=local

0

Thử cái này. Chỉnh sửa tập tin build.gradle của bạn như sau.

ext { profile = project.hasProperty('profile') ? project['profile'] : 'local' }


-3

Đặt -Dspring.profiles.active=localtheo đối số chương trình.


Tôi đã loại bỏ các trích dẫn từ câu hỏi của tôi ở trên. Tôi không thực sự sử dụng dấu ngoặc kép, tôi chỉ cố gắng thể hiện chính xác những gì tôi đã đưa vào các trường cấu hình đang chạy
dleerob

5
ý bạn là tùy chọn VM!
Michail Michailidis

Câu trả lời này rất sai lệch vì các đối số chương trình sẽ không được ứng dụng nhận ra!
yuranos

Câu trả lời này sẽ không hoạt động, như được đề cập bởi những người khác, nó phải nằm trong Tùy chọn VM trong IntelliJ Idea và không có trong các đối số của chương trình
trừu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.