java - Using ConfigurationProperties to fill Map in generic way -
i'm wondering, if there generic way fill map properties know prefix.
assuming there bunch of properties like
namespace.prop1=value1 namespace.prop2=value2 namespace.idontknowthisnameatcompiletime=anothervalue
i'd have generic way fill property inside map, like
@component @configurationproperties("namespace") public class mygenericprops { private map<string, string> propmap = new hashmap<string, string>(); // setter , getter propmap omitted public set<string> returnallkeys() { return propmap.keyset(); } }
or there convenient way collect properties prefix, instead of iterating on propertysources in environment?
thanks hansjoerg
as long you're happy having every property added map, rather don't know in advance, can @configurationproperties
. if want grab that's beneath namespace
need use empty prefix , provide getter map named namespace
:
@configurationproperties("") public class customproperties { private final map<string, string> namespace = new hashmap<>(); public map<string, string> getnamespace() { return namespace; } }
spring boot uses getnamespace
method retrieve map can add properties it. these properties:
namespace.a=alpha namespace.b=bravo namespace.c=charlie
the namespace
map contain 3 entries:
{a=alpha, b=bravo, c=charlie}
if properties nested more deeply, example:
namespace.foo.bar.a=alpha namespace.foo.bar.b=bravo namespace.foo.bar.c=charlie
then you'd use namespace.foo
prefix , rename namespace
, getnamespace
on customproperties
bar
, getbar
respectively.
note should apply @enableconfigurationproperties
configuration enable support @configurationproperties
. can reference beans want processed using annotation, rather providing @bean
method them, or using @component
have them discovered component scanning:
@springbootapplication @enableconfigurationproperties(customproperties.class) public class yourapplication { // … }
Comments
Post a Comment