如何将spring.freemarker.template-loader-path指向依赖项jar中的模板?

时间:2019-03-29 15:52:44

标签: spring-boot dependencies external freemarker application.properties

我有2个项目。一个项目(A)包含我的所有核心功能,例如我的实体/服务/ dao等。它还包含许多.ftl模板,我希望在其他项目(B)中加以利用并重用。我已经成功地获得了(B)来利用(A)中的类,但是我对重用freemarker模板没有任何运气。

项目(B)是一个Spring Boot应用程序(v2.1.3),所以我认为使用application.property:spring.freemarker.template-loader-path是正确的,而不是定义一个新的@Bean。 / p>

由于是春季启动应用程序,因此默认情况下且没有此属性,该项目将在项目自己的src/main/resources/templates位置中查找,但我的目的是使项目(A)没有自己的模板,并且对于我的控制器返回在项目(B)中找到的模板。

在我的Maven依赖关系中,层次结构如下:

projectA-0.0.1.jar
    templates
        folder1
            exampleA.ftl
        folder2
            exampleB.ftl

当前,我的控制器设置为返回诸如return new ModelAndView("folder1/exampleA")之类的内容,其中上下文前缀为src / main / resources / templates /

有人知道我需要赋予spring.freemarker.template-loader-path属性的值的正确格式,以便指向我的依赖项jar中的模板而不是本地src / main / resources / templates吗?

4 个答案:

答案 0 :(得分:0)

所以spring.freemarker.template-loader-path= classpath:/ templates / 是我最初的问题的答案,但是并不能解决我的问题。

将以下@Bean添加到我的配置类中,记入@ddekany

@Bean public FreeMarkerConfigurationFactoryBean getFreeMarkerConfiguration() { FreeMarkerConfigurationFactoryBean bean = new FreeMarkerConfigurationFactoryBean(); bean.setTemplateLoaderPath("classpath:/templates/"); return bean; }

看来,尽管我可以使用属性,但由于其他因素,在我的方案中仍需要使用@Bean

答案 1 :(得分:0)

这对我不起作用。 但是这种方法确实有效:

    @Bean
    @Primary
    public FreeMarkerConfigurationFactoryBean getFreeMarkerConfiguration() throws IOException {
        FreeMarkerConfigurationFactoryBean bean = new FreeMarkerConfigurationFactoryBean();
        ClassTemplateLoader ctl = new ClassTemplateLoader(getClass(), "/templates");
        bean.setPostTemplateLoaders(ctl);
        return bean;
    }

答案 2 :(得分:0)

我最终得到了以下豆子。如果您不使用spring-freemarker-starter maven依赖项。我使用的是simpleJavamail,因此不需要所有依赖项。

<div class="slideshow-container">

<!-- Full-width images with number and caption text -->
<div class="mySlides1">
  <div class="numbertext">1 / 3</div>
  <img src="https://images.unsplash.com/photo-1584397953202-2c15e86b09cb?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:100%; height: 850px; border-radius: 25px; position: relative; top: 280px;">
</div>

<div class="mySlides1">
  <div class="numbertext">2 / 3</div>
  <img src="https://images.unsplash.com/photo-1584269655525-c2ec535de1d0?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=500&q=60" style="width:100%; height: 850px; border-radius: 25px; position: relative; top: 280px;">
</div>

<div class="mySlides1">
  <div class="numbertext">3 / 3</div>
  <img src="https://images.unsplash.com/photo-1584459578334-c4ba449af8f9?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=634&q=80" style="width:100%; height: 850px; border-radius: 25px; position: relative; top: 280px;">
</div>
<div class="mySlides1">
  <div class="numbertext">3 / 3</div>
  <img src="https://images.unsplash.com/photo-1584381296550-99dfc0837d42?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:100%; height: 850px; border-radius: 25px; position: relative; top: 280px;">
</div>
<div class="mySlides1">
  <div class="numbertext">3 / 3</div>
  <img src="https://images.unsplash.com/photo-1584397953202-2c15e86b09cb?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:100%; height: 850px; border-radius: 25px; position: relative; top: 280px;">
</div>

<!-- Next and previous buttons -->
<a class="prev" onclick="plusSlides(-1, 0)">&#10094;</a>
<a class="next" onclick="plusSlides(1, 0)">&#10095;</a>

</div>
<div class="slideshow-container">

<div class="mySlides2">
  <img src="https://images.unsplash.com/photo-1584377160571-1ea5df91fc75?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=717&q=80" style="width:128px; height: 128px;">
</div>
<div class="mySlides2">
  <img src="https://images.unsplash.com/photo-1584450402195-ff360cf81f30?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:128px; height: 128px;">
</div>
<div class="mySlides2">
  <img src="https://images.unsplash.com/photo-1584450402195-ff360cf81f30?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:128px; height: 128px;">
</div>
<!-- Next and previous buttons -->
<a class="prev1" onclick="plusSlides(-1, 1)">&#10094;</a>
<a class="next1" onclick="plusSlides(1, 1)">&#10095;</a>

</div> 
<div class="slideshow-container">

<!-- Full-width images with number and caption text -->
<div class="mySlides3">
  <img src="https://images.unsplash.com/photo-1584450402195-ff360cf81f30?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:100px; height: 850px; border-radius: 25px; position: relative; bottom: 845px; left:530px;">
</div>

<div class="mySlides3">
  <img src="https://images.unsplash.com/photo-1584397953202-2c15e86b09cb?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:100px; height: 850px; border-radius: 25px; position: relative; bottom: 845px; left:530px">
</div>

<div class="mySlides3">
  <img src="https://images.unsplash.com/photo-1584450402195-ff360cf81f30?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:100px; height: 850px; border-radius: 25px; position: relative; bottom: 845px; left:530px">
</div>
<div class="mySlides3">
  <img src="https://images.unsplash.com/photo-1584397953202-2c15e86b09cb?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:100px; height: 850px; border-radius: 25px; position: relative; bottom: 845px; left:530px;">
</div>
<div class="mySlides3">
  <img src="https://images.unsplash.com/photo-1584450402195-ff360cf81f30?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:100px; height: 850px; border-radius: 25px; position: relative; bottom: 845px; left:530px;">
</div>

<!-- Next and previous buttons -->
<a class="prev2" onclick="plusSlides(-1, 2)">&#10094;</a>
<a class="next2" onclick="plusSlides(1, 2)">&#10095;</a>


</div>

答案 3 :(得分:0)

设置为属性:

spring.freemarker.cache=false
spring.freemarker.template-loader-path=file:src/main/resources/templates/

为我工作。