Question: I want to reload velocity template as it's changed. For this I've set the followings, but reload doesn't work when I manually change a .vm file inside `META-INF/template/` .

```
velocimacro.library.autoreload = true
[spring|file|class].resource.loader.cache = false

```

Any idea? Here is my velocityEngine bean

```
<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
    <property name="resourceLoaderPath" value="classpath:META-INF/template/" />
    <property name="preferFileSystemAccess" value="false" />
    <property name="velocityProperties">
        <props>
            <prop key="spring.resource.loader.cache">false</prop>
            <prop key="file.resource.loader.cache">false</prop>
            <prop key="class.resource.loader.cache">false</prop>
            <prop key="velocimacro.library.autoreload">true</prop>

            <prop key="resource.loader">spring</prop>
            <prop key="directive.foreach.counter.name">counter</prop>
            <prop key="directive.foreach.counter.initial.value">0</prop>
            <prop key="spring.resource.loader.class">
                org.springframework.ui.velocity.SpringResourceLoader
            </prop>
        </props>
    </property>
</bean>

```

Answer: 
As `setResourceLoaderPath` [doc](http://static.springsource.org/spring/docs/2.0.3/api/org/springframework/ui/velocity/VelocityEngineFactory.html#setResourceLoaderPath%28java.lang.String%29) says:

> 
> Note that resource caching will be enabled in any case. With the file resource loader, the last-modified timestamp will be checked on access to detect changes. **With SpringResourceLoader, the resource will be cached forever (for example for class path resources).**
> 
> 
> ...
> 
> 
> To enforce the use of SpringResourceLoader, i.e. to not resolve a path as file system resource in any case, turn off the "preferFileSystemAccess" flag. See the latter's javadoc for details.
> 
> 
> 

Then for `setPreferFileSystemAccess`

> 
> Set whether to prefer file system access for template loading. **File system access enables hot detection of template changes.**
> 
> 
> If this is enabled, VelocityEngineFactory will try to resolve the specified "resourceLoaderPath" as file system resource (which will work for expanded class path resources and ServletContext resources too).
> 
> 
> Default is "true". **Turn this off to always load via SpringResourceLoader (i.e. as stream, without hot detection of template changes)**, which might be necessary if some of your templates reside in an expanded classes directory while others reside in jar files.
> 
> 
> 

So looks like there are a few things that contribute to the problem. Using `SpringResourceLoader` with `classpath:` pseudo-protocol makes Spring cache the template infinitely. On top of that `preferFileSystemAccess` is disabled which makes sure that template is never accessed through the file system.
I had the same issue in the past, so I've written this blog entry: [Spring-mvc + Velocity + DCEVM](http://blog.rafaelsanches.com/2012/02/02/spring-mvc-velocity-dcevm/) 

The principal idea is to use this at least at development time:

```
webapp.resource.loader.class = org.apache.velocity.tools.view.WebappResourceLoader
webapp.resource.loader.path = /WEB-INF/views/
webapp.resource.loader.cache = true
webapp.resource.loader.modificationCheckInterval = 2

```

I've found that it works better than the SpringResourceLoader because now in my templates I can have includes like these: 

```
#parse("/parts/header.vm")

```

Where the path of the header is in /WEB-INF/views/header.vm