5
votes

I have 2 property files a.properties and b.properties I've added the to application context as:

<context:property-placeholder location="classpath:a.properties" />
<context:property-placeholder location="classpath:b.properties"/>

First file with properties contains db connection details(this works well) Second - contains properties that are used by some specific bean. In that bean I use these properties via @Value annotation

@Value("#{qw.er}")
private String someA;    
@Value("#{as.df}")
private String someB;

However I get exception during startup:

 org.springframework.expression.spel.SpelEvaluationException: 
EL1008E:(pos 0): Field or property 'qw' cannot be found on object of type 
'org.springframework.beans.factory.config.BeanExpressionContext'

What I'm doing wrong?

Is it possible yo use 2 context:property-placeholder in one file?

PS: Properties qw.er and as.df exist only in file b.properties

1
Check out this. You can use @Value("#{myProperties['github.oauth.clientId']}") - GokcenG
actually, haven't understood what is myProperties in @Value("#{myProperties['github.oauth.clientId']}") - maks
Sorry I've misunderstood your question. You can use <util:properties id="config" location="classpath:b.properties" /> and then @Value("#{config['as.df']}") will be helpful. I will look for usage of <context:property-placeholder also. By the way, the error says Spring is looking for beans named qw/as and fields in them named er/df. - GokcenG
am I right? when using property-placeholder one should use ${} as placeholders, but not #{} - maks
Yes it seems you are right. I've added an answer with a blog that explains mechanism. - GokcenG

1 Answers

9
votes

It is explained here

After defining your properties you should use

@Value("${qw.er}")
private String someA;

Notice $ sign.