Freemarker 模板位置和 Spring Batch Admin

Posted

技术标签:

【中文标题】Freemarker 模板位置和 Spring Batch Admin【英文标题】:Freemarker template location and Spring Batch Admin 【发布时间】:2016-08-10 12:48:11 【问题描述】:

我将 Spring Batch Admin 与 Spring Boot 一起用作我的 Spring Batch 项目的 Web 前端。

Batch Admin 提供了一些使用 Freemarker 设置布局的模板。我添加了更多模板,这些模板存储在src/main/webapp/web/layouts/html 中,并且资源包含在打包过程中到 .jar 文件中。

当我启动应用程序时,找不到我自己的布局(“layouts/html/myOwn.ftl not found”是错误消息)。

我可以通过像这样添加 FreeMarkerConfigurer 来解决这个问题:

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPath"><value>classpath:/WEB-INF/</value></property>
 </bean>

但是,当我这样做时,会找到我自己的模板,但标准模板已消失(如 layouts/html/home.ftl)。

有没有办法提供两个路径或两个模板加载器,这样 Spring Batch Admin 的默认模板加载器不会被覆盖而是用作后备?

或者是否有任何其他解决方案,例如将资源放在特定位置?

【问题讨论】:

还有一个名为templateLoaderPaths 的属性(注意末尾的“s”),您可以在其中指定多个位置(例如:***.com/questions/36330590/…)。我不知道 Spring Batch Admin 从哪里加载模板。 【参考方案1】:

感谢@ddekany,我想出了以下解决方案。

Freemarker 的必要配置:

<bean id="freemarkerConfig" class="org.springframework.batch.admin.web.freemarker.HippyFreeMarkerConfigurer">
    <property
        name="templateLoaderPaths"
        value="classpath:/WEB-INF/web,classpath:/org/springframework/batch/admin/web"
    />

    <property name="preferFileSystemAccess" value="false" />
    <property name="freemarkerVariables">
        <map>
            <entry key="menuManager" value-ref="menuManager" />
        </map>
    </property>
    <property name="freemarkerSettings">
        <props>
            <prop key="default_encoding">UTF-8</prop>
            <prop key="output_encoding">UTF-8</prop>
        </props>
    </property>
</bean>

第一个属性templateLoaderPaths(注意附加的 s)允许指定用逗号分隔的多个路径。这两个路径是我自己的路径classpath:/WEB-INF/web和默认Spring Boot Admin文件的路径classpath:/org/springframework/batch/admin/web

menuManager 的附加配置是必要的,否则导航中的菜单条目会消失。

自定义freemarker布局文件存储在默认位置src/main/webapp/WEB-INF/web/layouts/html/,模板加载器必须包含在jar构建中才能看到

    <resources>
        <!-- copy the Freemarker templates -->
        <resource>
            <targetPath>WEB-INF</targetPath>
            <filtering>false</filtering>
            <directory>$basedir/src/main/webapp/WEB-INF</directory>
        </resource>
    </resources>

在项目的pom.xml

【讨论】:

以上是关于Freemarker 模板位置和 Spring Batch Admin的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Boot / FreeMarker 中加载图像时出现问题

Spring Boot 揭秘与实战 实用技术篇 - FreeMarker 模板引擎

找不到Freemarker模板,spring配置

来自数据库的带有 Freemarker 模板的 Spring Mail

在Freemarker模板中检查Spring安全角色和已记录的用户名

使用 Spring 从 freemarker 获取模板