昨日書いた YAML に追加で、、、
https://oboe2uran.hatenablog.com/entry/2020/07/24/124904
以下のように、clist キーに配列がある場合、
address: group: info1: A info2: 120 clist: - 21 - 22 - 23 aaa: bbb: ABC
この clist を読むための List を、@Value アノテーションで指定できるかと思ったら、
どうしてもできない。
次のように、あくまでも、clist の上のキーを prefix にした @ConfigurationProperties を
付与したクラス定義の元、同じ名称の List フィールドでしか読めず、
更に、List 宣言で初期化までやらないとならない。
@Value{"${address.clist}") というアノテーションを付与した List で読むというのは、
SpringBoot ではできないのである。
以下のように、しないとならない。
import java.util.ArrayList; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * Setting */ @ConfigurationProperties(prefix="address") @Component public class Setting{ public Map<String, Object> group; @Value("${aaa.bbb}") public String name; private List<Integer> clist = new ArrayList<>(); public List<Integer> getClist(){ return clist; } public void setGroup(Map<String, Object> m) { group = m; } public Map<String, Object> getGroup(){ return group; } }
@Value を書かせたり、書くとダメだったり、こういう辻褄の合わないところが、
Spring が嫌いなところだ。
Spring 信仰者からは、辻褄が合わないんじゃなくて、
いやそれはこうい理由だと提示されるかもしれないけど。。。