CDI は Dependecy Injection と Context に関する仕様であるため、そのままではそのような構成はありません。しかし、サードパーティのプロジェクトが新しいポータブル機能を追加できるようにする非常に強力な拡張メカニズムも提供します (つまり、すべての CDI 実装で動作し、サーバーに関連付けられていません)。CDI 拡張機能を提供する最も重要なプロジェクトはApache Deltaspikeです。朗報です。必要なものを提供してくれます。
したがって、プロジェクトに deltaspike-core を追加する必要があります。Maven を使用する場合は、この依存関係を pom.xml に追加する必要があります。
<dependency>
<groupId>org.apache.deltaspike.core</groupId>
<artifactId>deltaspike-core-api</artifactId>
<version>0.4</version>
</dependency>
<dependency>
<groupId>org.apache.deltaspike.core</groupId>
<artifactId>deltaspike-core-impl</artifactId>
<version>0.4</version>
</dependency>
その後、プロパティのファイル名を気にしない場合はMETA-INF/apache-deltaspike.properties
、プロジェクトに追加してプロパティを入れてください。複数のファイルが必要な場合、または名前を選択したい場合は、次のPropertyFileConfig
ように各ファイルのインターフェイスを実装する必要があります。
public class MyCustomPropertyFileConfig implements PropertyFileConfig
{
@Override
public String getPropertyFileName()
{
return "myconfig.properties";
}
}
その後、このような値を注入できるようになります
@ApplicationScoped
public class SomeRandomService
{
@Inject
@ConfigProperty(name = "endpoint.poll.interval")
private Integer pollInterval;
@Inject
@ConfigProperty(name = "endpoint.poll.servername")
private String pollUrl;
...
}
Deltaspike のドキュメントから抜粋したこの例でわかるように、文字列だけでなく、Integer、Long、Float、Boolean フィールドにも値を挿入できます。より具体的なものが必要な場合は、独自のタイプを提供できます。Deltaspike の構成ドキュメントは、ここにあります。