7

With Springboot 1.4.4 I could use the VelocityEngine as bean directly. The configuration I did with the application.properties:

spring.velocity.properties.resource.loader=jar
spring.velocity.properties.jar.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
spring.velocity.properties.jar.runtime.log.logsystem.class=org.apache.velocity.runtime.log.SimpleLog4JLogSystem
spring.velocity.properties.jar.runtime.log.logsystem.log4j.category=velocity
spring.velocity.cache=true
spring.velocity.charset=UTF-8

In Springboot 1.5.x there is no Velocity Support anymore. What is the best way do integrate this configuration in Springboot 1.5.x?

I already added the dependency:

<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity</artifactId>
    <version>1.7</version>
</dependency>

And created the Bean:

@Bean
VelocityEngine velocityEngine(){
    return new VelocityEngine();
}

But the Properties are missing.

With

@Autowired
ConfigurableEnvironment configurableEnvironment;

I could parse the Properties, but it feels wrong.

1
  • 2
    Spring suggests that you use FreeMarker instead of Velocity. You could see if you could change your code to use FreeMarker instead of Velocity; FM templates are almost the same as Velocity templates, so it shouldn't be too hard to change.
    – Jesper
    Commented Feb 8, 2017 at 9:40

1 Answer 1

5

I will follow Jespers advice to use FreeMarker.

In order to answer my question, if someone cannot switch technologies but wants to move to Springboot 1.5.x, here as an easy solution: Properties need to be changed, remove spring.velocity.properties:

resource.loader=jar
jar.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
jar.runtime.log.logsystem.class=org.apache.velocity.runtime.log.SimpleLog4JLogSystem
jar.runtime.log.logsystem.log4j.category=velocity
jar.resource.loader.cache=true
input.encoding=UTF-8

Add the properties created the Bean:

@Bean
VelocityEngine velocityEngine(){
    Properties properties = new Properties();
    properties.load(this.getClass().getResourceAsStream("/application.properties"));
    return new VelocityEngine(properties);
}

One important drawback is, with that solution you cannot change your property file name without changing it for the Velocity engine as well. So it removes some of the flexibility of Springboot.

Not the answer you're looking for? Browse other questions tagged or ask your own question.