2011-05-12 11 views
5

में फ्रीमार्कर कैशिंग को अक्षम करने के लिए कैसे मैं फ्रीमार्कर विचारों के साथ वसंत एमवीसी v3 का उपयोग कर रहा हूं और कैशिंग अक्षम नहीं कर सकता। मैंने दृश्य में झूठ को कैश सेट करके कोशिश की (रेस-सर्वलेट.एक्सएमएल) लेकिन काम नहीं किया।स्प्रिंग एमवीसी

मूल रूप से मैं freemarker में कुछ बदलाव करना पसंद है और केवल

कोई संकेत कैसे करने के लिए (/ आवेदन को पुन: प्रारंभ ओ डब्ल्यू) ताज़ा साथ ब्राउज़र में इन परिवर्तनों को देखना चाहते हैं क्या?

उत्तर

1

क्या आपने FreeMarker documentation चेक किया था, जिसमें फ्रीमार्कर Configuration स्तर पर टेम्पलेट कैशिंग को प्रभावित करने के तरीके के बारे में कुछ संकेत शामिल हैं। मुझे यकीन नहीं है कि क्या आपके पास स्प्रिंग एमवीसी के अंदर से फ्रीमार्कर Configuration ऑब्जेक्ट तक पहुंच है, लेकिन यदि आपके पास है, तो ऊपर वर्णित प्रलेखन पृष्ठ आपको संभावित समाधान की ओर इंगित कर सकता है।

0

मुझे वही समस्या थी जिसे मैं केवल कस्टम टेम्पलेट लोडर को लागू करके हल कर सकता था।

protected void init() throws Exception { 
    freemarkerConfig = new Configuration(); 
    freemarkerConfig.setObjectWrapper(ObjectWrapper.DEFAULT_WRAPPER); 
    freemarkerConfig.setTemplateLoader(new CacheAgnosticTemplateLoader(new DefaultResourceLoader(), pdfTemplatePath)); 
} 

protected static class CacheAgnosticTemplateLoader extends SpringTemplateLoader { 
    public CacheAgnosticTemplateLoader(ResourceLoader resourceLoader, String templateLoaderPath) { 
     super(resourceLoader, templateLoaderPath); 
    } 

    @Override 
    public long getLastModified(Object templateSource) { 
     // disabling template caching 
     return new Date().getTime(); 
    } 
} 
0

ऐसा लगता है कि हाल ही में जारी FreeMarker संस्करण 2.3.17, यह करने के लिए एक कानूनी और सरल तरीके में दिखाई दिया है: freemarker.cache.NullCacheStorage यहाँ काम कर कोड है।

+1

केवल कॉन्फ़िगरेशन का उपयोग करके NullCacheStorage को सेट करने के तरीके पर कोई उदाहरण? –

3

मेरी एक्सएमएल में निम्नलिखित सफल रहा था:

<bean id="freemarkerMailConfiguration" class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean"> 
    <property name="templateLoaderPaths" value="classpath:emailtemplates/task,classpath:emailtemplates/user"/> 
    <!-- Activate the following to disable template caching --> 
    <property name="freemarkerSettings" value="cache_storage=freemarker.cache.NullCacheStorage" /> 
</bean> 

यह मेरा मेल config है, लेकिन freemarkerConfig दिलचस्प चार आप भी किया जाना चाहिए।

2

रूप manual द्वारा परिभाषित:

आप टेम्पलेट फ़ाइल को बदलते हैं, तो FreeMarker फिर से लोड होगा और टेम्पलेट अपने आप टेम्पलेट अगले समय मिलता फिर से पार्स। हालांकि, यह जांचने के बाद कि फ़ाइल बदल दी गई है, समय उपभोग कर सकता है, वहां एक कॉन्फ़िगरेशन स्तर सेटिंग है जिसे '` देरी' कहा जाता है। यह वह समय है जो के लिए अंतिम जांच के बाद से एक निश्चित टेम्पलेट का एक नया संस्करण है क्योंकि फ्रीमार्कर फिर से जांच करेगा। यह डिफ़ॉल्ट रूप से 5 सेकंड पर सेट है। आप तुरंत टेम्पलेट्स के परिवर्तन देखना चाहते हैं, तो यह 0.

करने के लिए सेट के आसपास खोज के बाद, विन्यास कुंजी freemarker.template.Configuration javadocs, at the setSetting(key, value) method में था। तो, संक्षेप में, कॉन्फ़िगरेशन template_update_delay से तत्काल परिवर्तन पहचान के लिए सेट करें।

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> 
    <property name="templateLoaderPath" value="/WEB-INF/ftl/"/> 
    <property name="freemarkerSettings"> 
     <props> 
      <prop key="template_update_delay">0</prop> 
      <prop key="default_encoding">UTF-8</prop> 
     </props> 
    </property> 
</bean> 
+0

संपत्ति का नाम 'templateLoaderPaths' है, आपको याद आती है। क्या वसंत इसे 'टेम्पलेट लोडरपाथ' में बदल देता है? – hiway

+0

यह टेम्पलेटलोडरपाथ और टेम्पलेट लोडरपाथ दोनों मिला है। Http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/ui/freemarker/FreeMarkerConfigurationFactory.html#setTemplateLoaderPath-java.lang.String- – bertie

1

मैंने कैश को अक्षम करने की कोशिश कर रहे पिछले दो दिनों (पूरी तरह से इस परियोजना के लिए नोट) बर्बाद कर दिया। यह पता चला है कि मेरे पास setup.xml में दो विकल्प एंटरजेरलिंग और एंटी रिसोर्स लॉकिंग सेट हैं। तब टेम्पलेट्स हमेशा

1

मैं एक्सएमएल साथ freemarker कॉन्फ़िगर करने के लिए विन्यास लेकिन @Configuration एनोटेट वर्गों के साथ का उपयोग न संचित किया जाएगा; क्योंकि मैं बल्कि वसंत-बूट शैली का कारण बनता हूं।तो अगर आप इस तरह freemarker's कैश अक्षम कर सकते हैं:

@Bean 
public FreeMarkerConfigurer freeMarkerConfigurer() throws IOException, TemplateException 
{ 
    FreeMarkerConfigurer configurer = new FreeMarkerConfigurer() 
    { 

     @Override 
     protected void postProcessConfiguration(freemarker.template.Configuration config) throws IOException, TemplateException 
     { 
      ClassTemplateLoader classTplLoader = new ClassTemplateLoader(context.getClassLoader(), "/templates"); 
      ClassTemplateLoader baseMvcTplLoader = new ClassTemplateLoader(FreeMarkerConfigurer.class, ""); //TODO tratar de acceder a spring.ftl de forma directa 
      MultiTemplateLoader mtl = new MultiTemplateLoader(new TemplateLoader[] 
      { 
       classTplLoader, 
       baseMvcTplLoader 
      }); 
      config.setTemplateLoader(mtl); 
      config.setCacheStorage(new NullCacheStorage()); 
     } 
    }; 
    configurer.setDefaultEncoding("UTF-8"); 
    configurer.setPreferFileSystemAccess(false); 
    return configurer; 
} 

कुंजी में है:

config.setCacheStorage (नई NullCacheStorage());

लेकिन क्या आप भी बजाय इस निर्देश का उपयोग कर सकते हैं:

config.setTemplateUpdateDelayMilliseconds(0); 

यह आप के लिए काम करना चाहिए।