Spring 4 @Value where property default is a java system property -
in spring 4, using @value annotation, right way specify system property default if specified property not exists?
whereas works no-default case:
@value("${myapp.temp}") private string tempdirectory;
this doesn't work when need default:
@value("#{myapp.temp ?: systemproperties.java.io.tmpdir}") private string tempdirectory;
nor this:
@value("#{myapp.temp ?: systemproperties(java.io.tmpdir)}") private string tempdirectory;
both of these give me exception @ time spring trying create bean:
org.springframework.beans.factory.beancreationexception: error creating bean name 'configurationservice': invocation of init method failed; nested exception java.lang.nullpointerexception
can done?
i tried following , worked me:
@value("${myapp.temp:#{systemproperties['java.io.tmpdir']}}") private string tempdirectory;
the missing parts believe not using ?:
, needing #{}
. according answer:
${...}
property placeholder syntax. can used dereference properties.
#{...}
spel syntax, far more capable , complex. can handle property placeholders, , lot more besides.
so happening telling spring first interpret myapp.temp
property placeholder syntax using ${}
syntax. use :
instead of ?:
(which called elvis operator) since elvis operator applies spring expression language expressions, not property placeholder syntax. third part of our statement #{systemproperties['java.io.tmpdir']}
telling spring interpret next expression spring expression , allows system properties.
Comments
Post a Comment