Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dynamic Placeholder substitution in properties in java

Tags:

I wanted to substitute the placeholder dynamically in properties in a java application. Like

 WelcomeMessage=Welcome Mr. {firstName} {lastName} !!! 

These firstName and LastName variable needs to be substituted dynamically. Should we use velocity template engine for the same? Or are there any other opensource frameworks for the same?

Thanks, Manish

like image 480
manish Avatar asked Feb 05 '10 07:02

manish


People also ask

How use placeholder in application properties file?

Spring Boot - Using ${} placeholders in Property Files We just need to use ${someProp} in property file and start the application having 'someProp' in system properties or as main class (or jar) argument '--someProp=theValue'. This feature allows us to use 'short' command line arguments.


2 Answers

You can use the MessageFormat class of Java SE. It allows you to do exactly what you ask for.

In your case the below code snippet must do the trick, assuming props contains all the properties loaded from your file.

MessageFormat.format((String) props.get("WelcomeMessage"), "First", "Last"); 

Note that your properties files should have index of parameters instead of named parameters as below.

WelcomeMessage=Welcome Mr. {0} {1} !!! 
like image 118
Chandra Sekar Avatar answered Sep 19 '22 14:09

Chandra Sekar


Velocity is rather old and unpleasant, in my opinion, there are nicer ways to do this:

  • StringTemplate is the simplest of the template engines, and good enough for what you need (see syntax examples here).
  • If you're already using Spring 3, it has the PropertyPlaceholderHelper class which can do this also, but I wouldn't use Spring just to get hold of this one class.
like image 26
skaffman Avatar answered Sep 19 '22 14:09

skaffman