2014-07-26 17 views
10

Tôi là một ứng dụng Akka sử dụng nhiều giá trị cấu hình (địa chỉ IP, số cổng) được xác định trong resource/application.conf. Tôi đang sử dụng plugin sbt-assembly để tạo bình uber và sau đó triển khai lọ này.Ghi đè nhiều giá trị cấu hình trong cấu hình Typesafe khi sử dụng một uberjar để triển khai

Có cách nào để ghi đè toàn bộ tệp application.conf bằng cách sử dụng tệp khác nằm ngoài thùng uber không? (Ví dụ, các giá trị trong file conf mới được sử dụng)

Trả lời

18

Có nhiều cách khác nhau để đạt được điều đó:

  1. Bạn có thể thiết lập một classpath bao gồm application.conf từ thư mục bên ngoài và xuất hiện trên classpath trước classpath khác các mục như bình của bạn. Để làm điều đó bạn có thể sử dụng thường xuyên java -classpath myconfdir:theapp.jar và chỉ định rõ ràng lớp chính.

  2. Bạn có thể bao gồm một tệp conf khác vào tệp của mình với chỉ thị include "application" trong tệp conf của bạn.

  3. Bạn có thể đặt biến môi trường trong application.conf sẽ trỏ đến tệp cần bao gồm. Bạn đặt env trong shell sau đó.

  4. Bạn có thể ghi đè giá trị theo chương trình: config.withValue("hostname", ConfigValueFactory.fromAnyRef("localhost"). ActorSystem lấy một đối tượng Conf hoặc tải từ conf mặc định nếu không được cung cấp.

  5. Cách dễ nhất cho đến lúc này là chỉ cần chọn một tệp khác với đối số dòng lệnh java -Dconfig.resource=/dev.conf.

Để biết thêm chi tiết, tham khảo tài liệu chính thức here.

+4

Cảm ơn vì điều đó, Aleksey. Câu trả lời của bạn đã chỉ cho tôi tại '-Dconfig.file = ...' đó là những gì tôi đã làm sau đó. –

1

tôi đã có thể lập trình ghi đè lên cấu hình mặc định với AKKA:

val customConf = 
     ConfigFactory.parseString(s""" 
      akka { 
       persistence.snapshot-store.local{ 
       dir = target/snapshot 
       } 
       persistence.journal.leveldb.dir = target/journal 
      } 
     """) 
val config = customConf.withFallback(original).resolve()  
logger.info(config.root().render()) 
val system = ActorSystem("iSystem", config) 
1

Chúng tôi làm điều đó trong sản như sau:

#deploy_prod.conf 
include "application" 

akka.remote.hostname = "prod.blah.com"  

# Example of passing in S3 keys 
s3.awsAccessKeyId="YOUR_KEY" 
s3.awsSecretAccessKey="YOUR_SECRET_KEY" 

Các tập tin trên phải kết thúc bằng .conf. Nó có tất cả các cấu hình cụ thể của môi trường sản xuất và sống bên ngoài bình, do đó bạn triển khai một tạo phẩm Akka giống hệt nhau cho tất cả các máy chủ. Nó sẽ ghi đè lên bất cứ điều gì trong application.conf.

Sau đó, trong kịch bản khởi động:

java -Dconfig.file=/full/path/deploy_prod.conf -jar your.jar com.your.Main 
Các vấn đề liên quan