2014-09-01 3 views
6

काम नहीं करता है। मेरे पास स्प्रिंग बूट (नवीनतम 1.1.5.RELEASE) और थाइमेलीफ पर आधारित वेब ऐप काम कर रहा है।
अब मैं ईमेल भेजने और थिमलाफ को टेम्पलेटिंग इंजन के रूप में उपयोग करने के लिए कार्यक्षमता जोड़ना चाहता हूं।

pom.xml में मैं जोड़ें:
स्प्रिंग बूट टेम्पलेट के रूप में थाइमेलीफ का उपयोग करके ईमेल भेज रहा है - कॉन्फ़िगरेशन

<dependency> 
    <groupId>org.springframework.integration</groupId> 
    <artifactId>spring-integration-mail</artifactId> 
</dependency> 

<dependency> 
    <groupId>javax.mail</groupId> 
    <artifactId>mail</artifactId> 
    <version>1.4.7</version> 
</dependency> 
<dependency> 
    <groupId>javax.activation</groupId> 
    <artifactId>activation</artifactId> 
    <version>1.1.1</version> 
</dependency> 

इस ट्यूटोरियल के बाद:

@Configuration 
public ThymeleafReplaceConfigurator { 
    @Bean 
    public JavaMailSender getJavaMailSenderImpl(){ 
     JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); 

     Properties props = new Properties(); 
     /* some properties here */ 

     javaMailSender.setJavaMailProperties(props); 

    return javaMailSender; 
    } 

    @Bean 
    public ClassLoaderTemplateResolver emailTemplateResolver(){ 
     ClassLoaderTemplateResolver emailTemplateResolver = new ClassLoaderTemplateResolver(); 
     emailTemplateResolver.setPrefix("/mails/"); 
     emailTemplateResolver.setSuffix(".html"); 
     emailTemplateResolver.setTemplateMode("HTML5"); 
     emailTemplateResolver.setCharacterEncoding("UTF-8"); 
     emailTemplateResolver.setOrder(1); 

     return emailTemplateResolver; 
    } 

    @Bean 
    public ServletContextTemplateResolver defaultWebTemplateResolver(){ 
     ServletContextTemplateResolver webTemplateResolver = new ServletContextTemplateResolver(); 
     webTemplateResolver.setPrefix("/templates/"); 
     webTemplateResolver.setSuffix(".html"); 
     webTemplateResolver.setTemplateMode("HTML5"); 
     webTemplateResolver.setCharacterEncoding("UTF-8"); 
     webTemplateResolver.setOrder(2); 

     return webTemplateResolver; 
    } 

    @Bean 
    public SpringTemplateEngine templateEngine(){ 
    SpringTemplateEngine templateEngine = new SpringTemplateEngine(); 
    templateEngine.setTemplateResolver(emailTemplateResolver()); 
    templateEngine.setTemplateResolver(defaultWebTemplateResolver()); 
    return templateEngine; 
    } 

    @Bean 
    public ThymeleafViewResolver thymeleafViewResolver() { 
     ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver(); 

     thymeleafViewResolver.setTemplateEngine(templateEngine()); 
     thymeleafViewResolver.setCharacterEncoding("UTF-8"); 

     return thymeleafViewResolver; 
    } 
} 

फ़ोल्डर और फ़ाइलों का पेड़ है: http://www.thymeleaf.org/doc/articles/springmail.html
पूरा (कोई एक्सएमएल) इस तरह जावा विन्यास मिला जैसे:

src 
    main 
    resources 
     templates 
     login.html 
     error.html 
     mails 
     exampleMail.html 

लेकिन यह काम नहीं करता है। एप्लिकेशन सही ढंग से शुरू होता है लेकिन पृष्ठों तक पहुंच (जो इस कॉन्फ़िगरेशन के बिना काम करता है) अपवाद का कारण बनता है:

अनुरोध प्रसंस्करण विफल रही; नेस्टेड अपवाद है org.thymeleaf.exceptions.TemplateInputException: टेम्पलेट "लॉगिन" को हल करने में त्रुटि, टेम्पलेट मौजूद नहीं हो सकता है या किसी भी कॉन्फ़िगर किए गए टेम्पलेट रिजॉलर्स

द्वारा एक्सेस नहीं किया जा सकता है। मैंने विभिन्न उपसर्गों को webTemplateResolver.setPrefix में रखने की कोशिश की लेकिन सफलता के बिना ।
इसके अलावा मैंने थाइमेलीफ के पुराने संस्करण में बग की सूचना दी है, लेकिन ऐसा लगता है कि यह तय किया गया था और मेरे पास नया संस्करण है।

क्या कोई इस कॉन्फ़िगरेशन में गलत पहचान को देखता है?

+0

समस्या यह है कि आप बहुत अधिक कॉन्फ़िगर कर रहे हैं। स्प्रिंग बूट पहले से ही टेम्पलेट इंजन के साथ-साथ आपके लिए दृश्य रिज़ॉल्यूशन को कॉन्फ़िगर करता है। अलग-अलग रिज़ॉलर्स के साथ दो बार 'सेट टेम्पलेट रीसोलवर' को भी कॉल करना ज्यादा नहीं होगा लेकिन पिछले एक को ओवरराइड करेगा। मैं सबकुछ हटाने का सुझाव देता हूं लेकिन ईमेल कॉन्फ़िगरेशन और 'ईमेल टेम्पलेट रीसोलवर' सब कुछ स्प्रिंग बूट द्वारा संभाला जाएगा। –

+0

बहुत धन्यवाद एम। डीनियम, अब यह काम करता है जैसे यह करना चाहिए। असल में मुझे नहीं पता था कि स्वत: कॉन्फ़िगर किया गया स्प्रिंग बूट बॉक्स के बाहर मेरा अतिरिक्त टेम्पलेट रिज़ॉल्वर देखेगा :) –

+0

जब तक मैंने ऑटो कॉन्फ़िगरेशन के स्रोत को नहीं देखा तब तक मैंने तब तक नहीं किया। –

उत्तर

17

मुख्य समस्या यह है कि आप बहुत अधिक कॉन्फ़िगर कर रहे हैं।

वसंत बूट पहले से ही TemplateEngine के साथ-साथ ThymeleafViewResolver कॉन्फ़िगर करता है। इसके लिए ThymeleafAutoConfiguration देखें। यदि आप look at that class आपको यह भी देखेंगे कि यह आपके आवेदन में आपके पास ITemplateResolver उदाहरणों का स्वतः पता लगाएगा और यह इसे SpringTemplateEngine में जोड़ देगा।

समाधान सब कुछ सरल है लेकिन ईमेल कॉन्फ़िगरेशन और emailTemplateResolver को हटा देता है। बाकी सब कुछ वसंत बूट द्वारा संभाला जाएगा।

@Configuration 
public class ThymeleafEmailConfiguration { 
    @Bean 
    public JavaMailSender getJavaMailSenderImpl(){ 
     JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); 

     Properties props = new Properties(); 
     /* some properties here */ 

     javaMailSender.setJavaMailProperties(props); 

     return javaMailSender; 
    } 

    @Bean 
    public ClassLoaderTemplateResolver emailTemplateResolver(){ 
     ClassLoaderTemplateResolver emailTemplateResolver = new ClassLoaderTemplateResolver(); 
     emailTemplateResolver.setPrefix("/mails/"); 
     emailTemplateResolver.setSuffix(".html"); 
     emailTemplateResolver.setTemplateMode("HTML5"); 
     emailTemplateResolver.setCharacterEncoding("UTF-8"); 
     emailTemplateResolver.setOrder(1); 

     return emailTemplateResolver; 
    } 
} 
+2

थाइमेलीफ-2.1.4 के साथ। यदि आप "/" उपसर्ग करते हैं तो क्लासलोडर टेम्पलेट रीसोलवर का उपयोग करके टेम्पलेट रेसोल्यूशन में कुछ समस्या प्रतीत होती है। यह ईमेल टेम्पलेट Resolver.setPrefix ("मेल /") सेट करके काम करेगा; ध्यान दें कि "/" को "/ mails" के सामने हटा दिया गया है। –

संबंधित मुद्दे