Velocity with Springboot 1.5.x

2019-02-05 05:18发布

问题:

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:

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.