【问题标题】:Unsatisfied dependency expressed through field 'freemarkerConfig'通过字段“freemarkerConfig”表示的不满足的依赖关系
【发布时间】:2019-08-14 07:31:54
【问题描述】:

我想使用 Apache Freemaker 发送电子邮件我试过这个:

@Service
public class EMailSender {

    @Autowired
    private Configuration freemarkerConfig;

    public void sendMail(String to, String subject, String content) {
        try {               freemarkerConfig.setClassForTemplateLoading(this.getClass(), "/templates");

            EmailRegistrationModel obj = new EmailRegistrationModel();
            obj.setMailSubject("Test");

            Map<String, Object> model = new HashMap<String, Object>();
            model.put("title", "Some name");
            obj.setModel(model);

            String data = geFreeMarkerTemplateContent(model);    
            helper.setText(data, true);

            mailSender.send(message);
        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
    }

    private String geFreeMarkerTemplateContent(Map<String, Object> model){
        StringBuffer content = new StringBuffer();
        try{
         content.append(FreeMarkerTemplateUtils.processTemplateIntoString( 
                 freemarkerConfig.getTemplate("emails_activate.html"), model));
         return content.toString();
        }catch(Exception e){
            System.out.println("Exception occured while processing fmtemplate:"+e.getMessage());
        }
          return "";
    }
}

配置对象:

public class EmailRegistrationModel {       
    private String mailContent;     
    private Map<String, Object> model;
    ....
}

当我部署我得到的代码时:

Error creating bean with name 'EMailSender': Unsatisfied dependency expressed through field 'freemarkerConfig'; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'freemarker.template.Configuration' available: expected single matching bean but found 2: getFreeMarkerConfiguration,freeMarkerConfiguration

你知道我该如何解决这个问题吗?我想我需要添加一些freemarker配置?你能给我一些建议吗?

【问题讨论】:

    标签: java spring spring-boot freemarker


    【解决方案1】:
    expected single matching bean but found 2: getFreeMarkerConfiguration,freeMarkerConfiguration
    

    当您创建多个相同类型的 bean 并希望仅将其中一个与属性关联时,可能会出现这种情况。在这种情况下,就会出现上述错误。 Why this happened?


    解决方案 1: 使用@Resource 而不是@Autowired Refer This


    解决方案 2:使用 @Qualifier Refer This


    解决方案 3:使用 @Primaray Refer This

    【讨论】:

      【解决方案2】:

      问题不在于你需要很少的 Freemarker 配置,而是需要两个。特别注意异常信息的最后一部分:

      没有可用的“freemarker.template.Configuration”类型的合格 bean:预期的单个匹配 bean,但找到了 2 个:getFreeMarkerConfiguration,freeMarkerConfiguration

      Spring Boot 已经带有 FreeMarkerAutoConfiguration。很可能您附带了另一个您手动定义的,您能验证一下吗?

      请坚持application.properties 中的Freemarker 部分,或者换句话说:使用Spring Boot 的spring.freemarker.* 属性配置您的应用程序。

      【讨论】:

        猜你喜欢
        • 2019-11-09
        • 2018-11-02
        • 2019-08-03
        • 1970-01-01
        • 1970-01-01
        • 2022-11-13
        • 2016-12-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多