2013-09-04 24 views
5

Tôi muốn thiết lập hồ sơ sử dụng tập tin application.properties với sự gia nhập:Làm cách nào để đặt Cấu hình bằng application.properties trong Spring?

mode=master 

Làm thế nào để thiết lập spring.profiles.active trong tập tin context.xml của tôi? init-param chỉ hoạt động trong ngữ cảnh web.xml.

<init-param> 
    <param-name>spring.profiles.active</param-name> 
    <param-value>"${mode}"</param-value> 
</init-param> 

Trả lời

8

Có một số cách để thay đổi cấu hình hoạt động, không có cách nào lấy trực tiếp từ tệp thuộc tính.

  • Bạn có thể sử dụng <init-param> như bạn đang làm trong câu hỏi của mình.
  • Bạn có thể cung cấp một số hệ thống tại ứng dụng khởi động -Dspring.profiles.active="master"
  • Bạn có thể lấy ConfigurableEnvironment từ ApplicationContext của bạn và setActiveProfiles(String...) lập trình với context.getEnvironment().setActiveProfiles("container");

Bạn có thể sử dụng một ApplicationListener để nghe khởi ngữ cảnh. Giải thích về cách thực hiện điều đó here. Bạn có thể sử dụng một ContextStartedEvent

ContextStartedEvent event = ...; // from method argument 
ConfigurableEnvironment env = (ConfigurableEnvironment) event.getApplicationContext().getEnvironment(); 
env.setActiveProfiles("master"); 

Bạn có thể nhận được giá trị "master" từ một thuộc tính tập tin như bạn thấy phù hợp.

+0

Vấn đề là được sử dụng trong Spring MVC mà tôi không sử dụng. Tương đương với trong lõi lò xo là gì? – luksmir

+2

@luksmir Không có tương đương. Nếu bạn kiểm soát việc tạo ngữ cảnh, chỉ cần sử dụng phương thức thứ ba và 'setActiveProfiles()'. –

+0

Cảm ơn lời giải thích không có thay thế cho setActiveProfiles() trong trường hợp của tôi. – luksmir

2

Bạn có thể sử dụng một biến môi trường, biến hệ thống (tùy chọn -D cho JVM hoặc ứng dụng) hoặc đặt nó trong JNDI (java:. Comp/env/Bạn không thể tuy nhiên đặt nó trong một thuộc tính tập tin, vì nó là cần thiết trước khi có thuộc tính cụ thể tập tin được đọc.

có thêm thông tin trong @Profile javadocs.

một giải pháp khác là tạo ra ApplicationContextInitializer thực hiện của riêng bạn mà đọc một tập tin nhất định và kích hoạt hồ sơ cá nhân cho .

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