Để những người khác đã định cấu hình ứng dụng của họ như ứng dụng của tôi được hưởng lợi từ những gì tôi đã trải qua ...
Không có giải pháp nào ở trên phù hợp với tôi vì tôi có một ./config
thư mục ngay dưới cơ sở dự án của mình với 2 tệp:
application.properties
application-dev.properties
Trong đó, application.properties
tôi có:
spring.profiles.active = dev # set my default profile to 'dev'
Trong application-dev.properties
tôi có:
server_host = localhost
server_port = 8080
Điều này là do đó khi tôi chạy lọ béo của mình từ CLI, các *.properties
tệp sẽ được đọc từ ./config
dir và tất cả đều tốt.
Chà, hóa ra các tệp thuộc tính này hoàn toàn ghi đè webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
cài đặt trong @SpringBootTest
thông số kỹ thuật Spock của tôi. Bất kể tôi đã thử gì, ngay cả khi webEnvironment
đặt thành RANDOM_PORT
Spring sẽ luôn khởi động vùng chứa Tomcat được nhúng trên cổng 8080 (hoặc bất kỳ giá trị nào tôi đã đặt trong ./config/*.properties
tệp của mình ).
Cách DUY NHẤT tôi có thể khắc phục điều này là thêm một chú thích rõ ràng properties = "server_port=0"
vào @SpringBootTest
thông số kỹ thuật tích hợp Spock của tôi:
@SpringBootTest (webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = "server_port=0")
Sau đó, và chỉ sau đó, Spring cuối cùng mới bắt đầu quay Tomcat trên một cổng ngẫu nhiên. IMHO đây là một lỗi khung kiểm tra Spring, nhưng tôi chắc chắn rằng họ sẽ có ý kiến riêng về điều này.
Hy vọng điều này đã giúp ai đó.