私はscalaアプリケーションを設定する方法が必要です。 ConfiggyはScalaに移行するように思われましたが、これは廃止されました。https://github.com/robey/configgy#readmeとなり、この機能はOstrichにあります。オーストリッチはどのように構成に使用されますか?
設定のためだけにオーストリッチを使用する方法のコード例はありますか?私は統計を収集することに興味がありません。
私はscalaアプリケーションを設定する方法が必要です。 ConfiggyはScalaに移行するように思われましたが、これは廃止されました。https://github.com/robey/configgy#readmeとなり、この機能はOstrichにあります。オーストリッチはどのように構成に使用されますか?
設定のためだけにオーストリッチを使用する方法のコード例はありますか?私は統計を収集することに興味がありません。
私は正式な回答も知っていますが、誰も答えなかったので、私は周りを突くことにしました。申し訳ありませんが、この答えはかなり包括的ではない場合。
私が見つけた最良の例はcom.twitter.ostrich.admin.RuntimeEnvironment
で、特に主にloadConfig
を見た場合に見つかりました。
クラスT
のインスタンスを設定したいとします。次のように基本的な考え方は次のとおりです。
com.twitter.util.Config[T]
と評価さScalaのソースコードが含まれているjava.io.File
を取得します。Config[T]
を有効にするには、def apply(): T
メソッドが必要です。実装の詳細を設定ファイルから外しておくには、プロジェクトにConfig[T]
を拡張したクラスを定義したいと思うでしょう。このクラスを使用して、デフォルト/必須フィールドを定義することもできます。com.twitter.util.Eval
インスタンスをインスタンス化し、を呼び出してConfig[T]
インスタンスを取得します。config.validate()
を呼び出します。config.apply()
に電話して、T
の完全構成インスタンスを取得します。ここで私は新しいWidgetService
を設定する簡単な例です:
class WidgetService(val port: Int)
class WidgetConfig extends com.twitter.util.Config[WidgetService] {
var port = required[Int]
def apply(): WidgetService = {
new WidgetService(port)
}
}
object MyApp extends App {
val configFile = new java.io.File("mywidget_config.scala")
val eval = new com.twitter.util.Eval
val config = eval[com.twitter.util.Config[WidgetService]](configFile)
config.validate()
val widgetService = config()
println(widgetService.port)
}
そして、ここではmywidget_config.scala
です:
new WidgetConfig {
port = 8000
}
注:あなたはあなたがこれを置けば変更を加える必要がありパッケージで。簡潔さのためにデフォルトパッケージですべてをやった。依存関係を動作させるために
、私は私のSBTの設定にこれを追加しました:
libraryDependencies += "com.twitter" % "util" % "1.10.1"
は非常に複雑に見えます –
スカラファイルに値を書き戻すことは可能ですか?もしそれが私が古い良い.propertiesファイルを好むよりも簡単ではないならば、 – Matroska
Matroska:スカラファイルに値を書き戻す組み込みのサポートはありませんが、一般的なケースのためにそれを行うコードを書くことは可能ですConfigのmissingValuesメソッドがどのようにフィールドをイントロスペクトできるか)。しかし、あなたの設定で厄介なことをすると、その情報が失われる可能性があります( 'port = 1024 + 1'を読み込みますが、' port = 1025'を書き戻します)。 – Mike
を私は 'Configgy'の交換を書きました。それは、ほとんどのレガシー設定ファイル、akka設定ファイル、およびJavaプロパティと互換性があります。 https://github.com/paradigmatic/Configrity – paradigmatic