Pontoはタイプセーフなプロパティファイルへのアクセサを生成するライブラリです。
タイプセーフなプロパティファイルへのアクセサをaptによって自動生成することにより、 プロパティファイルのキー名の入力間違いなどによるバグをコンパイル時に検出することができます。
また、キー名の最後に _int, _date など型情報を追加することにより文字列以外の定数もアクセサクラスから直接 int や java.util.Date などの型で取得できます。
Properties properties = new Properties();
ClassLoader loader = ClassLoader.getSystemClassLoader();
try{
properties.load(loader.getResourceAsStream("ponto.properties"));
}catch (Exception e){}
properties.getProperty("setting.key1");
// => "value1"
// "setting.key1" が本当に存在するのかわからない。
// (コンパイル時に検出できない)
PontoResource.setting.key1();
// => "value1"
// aptにより自動生成された PontoResourceクラスから安全にプロパティを取得できる。
// (存在しないキーを指定した場合コンパイルエラーになる)
<dependencies>
<dependency>
<groupId>in.tombo</groupId>
<artifactId>ponto</artifactId>
<version>1.0.9</version>
</dependency>
</dependencies>
src/main/resources/ponto.properties
setting.key1=value1
setting.key2._int=123
setting.key3._long=123412341234
setting.key4._float=123.123
setting.key5._double=123123.123123
setting.key6._date=2014-01-01
setting.key7._timestamp=2014-01-01 01:02:03
setting.key8._boolean=true
src/main/java/your/package/PontoConfig.java
@ConstantResource
public class PontoConfig {
}
target/generated-sources/annotations に in.tombo.ponto.PontoResource というクラスファイルが生成される。
このクラスを使ってタイプセーフにプロパティファイルにアクセスじゃー!
開発時とプロダクションでは、プロパティファイルの値を切り替えたい場合があります。 具体的にはDBの接続IPであるとか、ホスト名とかそういう情報です。 PONTO では PONTO_ENV という環境変数の値で、読み込むプロパティファイルを上書きするプロパティファイルを設定することができます。
例えば setting.properties を読み込んでいる時、 PONTO_ENV に develpment を指定して起動すると setting_development.properties も同時読み込みます。
この時、プロパティの値はsetting_development.properties → setting_properties の順序で解決されます。
@ConstantResource に指定できる引数
パラメータ名 | 型 | 説明 | デフォルト値 |
---|---|---|---|
value | String[] | propertiesファイルを複数指定することができる。 .properties と .xml 形式の2つのプロパティファイルの書式に対応している。 |
{"ponto.properties"} |
packageName | String | 自動生成されるクラスのパッケージを指定 | "in.tombo.ponto" |
className | String | 自動生成されるクラスのクラス名を指定 | "PontoResource" |
keyStyle | KeyStyle | アクセサのスタイルを選択できる。 Hierarchical は PontoResource.setting.key1() のようにアクセスできる。 Flat は PontoResource.setting_key1() のようにアクセスできる。 |
KeyStyle.Hierarchical |
envKey | String | 上書きするプロパティファイルを決定する時の環境変数名を指定する。 | PONTO_ENV |
envDefault | String | 上書きするプロパティファイルを決定するときの環境変数が存在しなかった場合のデフォルト値を指定する。 | development |
scanPeriod | long | プロパティファイルをリロードするまでの時間をミリ秒単位で指定する。 0以下指定時は再読み込みを行わない。 |
-1L |
MIT-LICENSE
言わずと知れた京都の飲み屋街、先斗町である。