Phát có thể được khởi chạy ở chế độ dev (qua run
), ở chế độ sản xuất (qua start
) hoặc ở chế độ thử nghiệm. Có cách nào để cung cấp một tệp cấu hình khác (conf/application.conf
) tùy thuộc vào chế độ nào được khởi chạy không?Cấu hình tùy thuộc vào chế độ khởi động
Trả lời
Tôi thường có cấu hình cơ bản (application.conf
) và ba cấu hình phụ cho mỗi môi trường. Trong Play Framework 2.4
, bạn có thể thực hiện bằng cách mở rộng GuiceApplicationLoader và hợp nhất cơ sở với conf của môi trường cụ thể của bạn. Bạn có thể tiến lên một bước và cung cấp các mô-đun guice khác nhau cho mỗi môi trường.
Scala phiên bản:
class CustomApplicationLoader extends GuiceApplicationLoader {
override protected def builder(context: Context): GuiceApplicationBuilder = {
val builder = initialBuilder.in(context.environment).overrides(overrides(context): _*)
context.environment.mode match {
case Prod =>
// start mode
val prodConf = Configuration(ConfigFactory.load("prod.conf"))
builder.loadConfig(prodConf ++ context.initialConfiguration).bindings(new ProdModule());
case Dev =>
// run mode
val devConf = Configuration(ConfigFactory.load("dev.conf"))
builder.loadConfig(devConf ++ context.initialConfiguration).bindings(new DevModule());
case Test =>
// test mode
val testConf = Configuration(ConfigFactory.load("test.conf"))
builder.loadConfig(testConf ++ context.initialConfiguration).bindings(new TestModule());
}
}
}
phiên bản Java:
public class CustomApplicationLoader extends GuiceApplicationLoader {
@Override
public GuiceApplicationBuilder builder(ApplicationLoader.Context context) {
final Environment environment = context.environment();
GuiceApplicationBuilder builder = initialBuilder.in(environment);
Configuration config = context.initialConfiguration();
if (environment.isTest()) {
config = merge("test.conf", config);
builder = builder.bindings(new TestModule());
} else if (environment.isDev()) {
config = merge("dev.conf", config);
builder = builder.bindings(new DevModule());
} else if (environment.isProd()) {
config = merge("prod.conf", config);
builder = builder.bindings(new DevModule());
} else {
throw new IllegalStateException("No such mode.");
}
return builder.in(environment).loadConfig(config);
}
private Configuration merge(String configName, Configuration currentConfig) {
return new Configuration(currentConfig.getWrappedConfiguration().$plus$plus(new play.api.Configuration(ConfigFactory.load(configName))));
}
}
Đừng quên bao gồm play.application.loader = "modules.CustomApplicationLoader"
để application.conf
của bạn.
Trong các phiên bản thấp hơn của Play
, có thể đạt được điều gì đó tương tự bằng cách sử dụng lớp GlobalSettings
và ghi đè onLoadConfig
. Tâm trí GlobalSettings
trong số Play 2.4
bị hủy.
Nếu bạn không thích bao gồm test.conf
và test mocks
từ TestModule
vào bản dựng sản xuất của mình, bạn có thể filter
các tệp có sbt.
Và thêm' play.application.loader = "modules.CustomApplicationLoader" 'vào' application.conf'? – Reactormonk
Yup. Theo liên kết trong câu trả lời để biết thêm chi tiết. –
Tôi nghĩ rằng chính sách stackoverflow là sao chép/dán những thứ trên vì các liên kết có thể chết. – Reactormonk
Bạn có thể đặt một tập tin cấu hình khác nhau sử dụng một trong 3 cách chơi mang đến cho bạn:
1 - Sử dụng -Dconfig.resource
Nó sẽ tìm kiếm một tập tin cấu hình thay thế trong classpath ứng dụng (bạn thường cung cấp các tệp cấu hình thay thế này vào thư mục/thư mục ứng dụng của bạn trước khi đóng gói ). Play sẽ xem xét conf/do đó bạn không phải thêm conf /.
$/path/to/bin/-Dconfig.resource = prod.conf
2 - Sử dụng -Dconfig.file
Bạn cũng có thể chỉ định một tập tin cấu hình địa phương không được đóng gói vào hiện vật ứng dụng :
$/path/to/bin/-Dconfig.file =/opt/conf/prod.conf
3 - Sử dụng -Dconfig.url
Bạn cũng có thể chỉ định một tập tin cấu hình được nạp từ bất kỳ URL:
$/path/to/bin/ -Dconfig.url = http://conf.mycompany.com/conf/prod.conf
Thanh toán thêm về:
https://www.playframework.com/documentation/2.3.x/ProductionConfiguration
Có, tôi biết cách chỉ định các cấu hình, nhưng tôi đặc biệt tìm cách chỉ định các tùy chọn cấu hình tùy thuộc vào 'run' /' start'/'test', ví dụ: 'javaOptions trong Run' – Reactormonk
Điều này có thể được thực hiện bằng cách tải tệp cấu hình dựa trên môi trường có thể được cung cấp qua -Dmode=staging/dev/prod
và để tải các tệp tôi ghi đè onLoadConfig
của GlobalSettings trong Global.java.
Java snippet-
@Override
public Configuration onLoadConfig(Configuration config, File file,ClassLoader classLoader) {
Configuration updatedConfig = config;
String mode = config.getString("mode");
if (StringUtils.isNotEmpty(mode)) {
try {
File modeFolder = FileUtils.getFile(file, "conf/" + mode);
if (modeFolder.exists()) {
play.api.Configuration modeConfig = config.getWrappedConfiguration();
IOFileFilter fileFilter = new WildcardFileFilter("*.conf");
Collection<File> fileList = FileUtils.listFiles(modeFolder, fileFilter, null);
for (File confFile : fileList) {
modeConfig = modeConfig
.$plus$plus(new play.api.Configuration(ConfigFactory.parseFile(confFile)));
}
updatedConfig = new Configuration(modeConfig);
}
} catch (Exception e) {
Logger.error("Exception while loading configuration for mode : " + mode, e);
}
} else {
Logger.error("Please provide mode in which play application has to start (Ex. play -Dmode=<mode>) ");
}
Đối với mỗi chế độ, tạo một thư mục (tên giống như môi trường) và giữ cấu hình cụ thể môi trường trong thư mục đó.
- 1. Cài đặt ứng dụng khác nhau tùy thuộc vào chế độ cấu hình
- 2. Chế độ xem khác nhau tùy thuộc vào ContentControl (Caliburn.Micro)
- 3. Hình dạng con trỏ Vim tùy thuộc vào chế độ hiện tại
- 4. Chạy dự án sbt ở chế độ gỡ lỗi với cấu hình tùy chỉnh
- 5. Tự động khởi động cấu hình CPU với VisualVM
- 6. Trình khởi động hạn chế tùy chỉnh khởi động mùa xuân không được tiêm dịch vụ
- 7. đặt hằng số cấu hình tùy thuộc vào môi trường trong đường ray
- 8. Khởi động Spring - cấu hình EntityManager
- 9. splash (hình ảnh khởi chạy) ở chế độ ngang?
- 10. Khởi tạo chế độ xem với initWithCoder tùy chỉnh
- 11. Chế độ tự động hoàn thành Emacs khi khởi động
- 12. Không thể khởi động chế độ spark-shell
- 13. Bất kỳ cách nào định cấu hình để định cấu hình chế độ xem chế độ xem mvc chế độ xem trực quan
- 14. Hình nền khác nhau tùy thuộc vào độ phân giải màn hình?
- 15. UIAlertController - thêm chế độ xem tùy chỉnh vào actionheet
- 16. Chế độ xem được ủy quyền hoặc Chế độ xem cấu hình được ủy quyền?
- 17. Cấu hình ghi nhật ký khởi động chương trình khởi động
- 18. Tùy chọn Apache -Cập hình cấu hình không hoạt động
- 19. Nhà cung cấp xác thực tùy chỉnh khởi động Spring với Cấu hình Java FIXED
- 20. Giá trị cấu hình khung chơi trong chế độ xem
- 21. Dừng chế độ tramp chạy khi khởi động emacs
- 22. Chế độ xem đầu vào tùy chỉnh trong Swift
- 23. Thêm chế độ xem tùy chỉnh vào thanh công cụ
- 24. thêm chế độ xem tùy chỉnh vào chế độ xem cảnh báo
- 25. chuyển đổi chế độ xem của hai chế độ xem trong hình động khối lập phương
- 26. Nhiều cấu hình liquibase trong khởi động mùa xuân
- 27. Chế độ xem tùy chỉnh Django vào trang quản trị
- 28. Cách thêm chế độ xem tùy chỉnh vào bố cục?
- 29. Thêm chế độ xem tùy chỉnh vào UINavigationController
- 30. Làm thế nào để cấu hình các thuộc tính động trong khi sử dụng khởi động mùa xuân?
Bạn sử dụng phiên bản 'Playframework' nào? –
@MonCalamari 2,4 atm, sẽ nâng cấp lên 3,0 đôi khi. – Reactormonk