Freemarker 模板位置和 Spring 批处理管理
Freemarker template location and Spring Batch Admin
我正在使用 Spring Batch Admin 作为我的 Spring Batch 项目和 Spring Boot 的 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 的默认模板加载器不会被覆盖,而是用作后备?
或者是否有任何其他解决方案,例如将资源放在特定位置?
感谢@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
.
我正在使用 Spring Batch Admin 作为我的 Spring Batch 项目和 Spring Boot 的 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 的默认模板加载器不会被覆盖,而是用作后备?
或者是否有任何其他解决方案,例如将资源放在特定位置?
感谢@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/
并且模板加载器可见必须通过
<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
.