web-dev-qa-db-ja.com

Spring .propertiesファイル:要素を配列として取得

次のように、Springを使用して.propertiesファイルからプロパティ属性をロードしています。

file: elements.properties
base.module.elementToSearch=1
base.module.elementToSearch=2
base.module.elementToSearch=3
base.module.elementToSearch=4
base.module.elementToSearch=5
base.module.elementToSearch=6

Spring xmlファイル

file: myapplication.xml
<bean id="some"
      class="com.some.Class">
      <property name="property" value="#{base.module.elementToSearch}" />
</bean>

そして、私のClass.Java

file: Class.Java
public void setProperty(final List<Integer> elements){
    this.elements = elements;
}

ただし、デバッグ時には、パラメータ要素はリストの最後の要素のみを取得するため、6つの要素のリストではなく、値が「6」の1つの要素のリストがあります。

値のみを追加するなどの別のアプローチを試してみました#{base.module}が、プロパティファイルにパラメーターが見つかりません。

回避策は、次のように、コンマで区切られたリストをelements.propertiesファイルに含めることです。

base.module.elementToSearch=1,2,3,4,5,6

それを文字列として使用して解析しますが、より良い解決策はありますか?

76
RamonBoza

次のようなプロパティファイルで配列を定義する場合:

base.module.elementToSearch=1,2,3,4,5,6

このような配列をJavaクラスに次のようにロードできます。

  @Value("${base.module.elementToSearch}")
  private String[] elementToSearch;
155
svlada

また、コンマ以外の別の区切り文字を使用する場合は、それも使用できます。

@Value("#{'${my.config.values}'.split(',')}")
private String[] myValues;   // could also be a List<String>

そして

あなたのアプリケーションのプロパティであなたが持つことができる

my.config.values=value1, value2, value3
23
R K Punjal

Spring 4.0以降でそれを行う方法の例を次に示します

application.propertiesコンテンツ:

some.key=yes,no,cancel

Javaコード:

@Autowire
private Environment env;

...

String[] springRocks = env.getProperty("some.key", String[].class);
23
Juha Hanka