Неудовлетворенная зависимость выражается через поле 'freemarkerConfig' - PullRequest
1 голос
/ 23 марта 2019

Я хочу отправлять электронные письма, используя 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? Можете ли вы дать мне совет?

Ответы [ 2 ]

1 голос
/ 23 марта 2019
expected single matching bean but found 2: getFreeMarkerConfiguration,freeMarkerConfiguration

Может возникнуть ситуация, когда вы создаете несколько бинов одного типа и хотите подключить только один из них со свойством.В таких случаях появляется вышеуказанная ошибка. Почему это случилось?


Решение 1: Используйте @Resource вместо @Autowired См. Это


Решение 2: Используйте @Qualifier См. Это


Решение 3: Используйте @Primaray См. Это

1 голос
/ 23 марта 2019

Проблема не в том, что у вас есть несколько конфигов Freemarker, а в двух. Обратите особое внимание на последнюю часть сообщения об исключении:

Нет доступного квалифицирующего компонента типа freemarker.template.Configuration: ожидаемый единственный соответствующий компонент, но найден 2 : getFreeMarkerConfiguration, freeMarkerConfiguration

Spring Boot уже поставляется с FreeMarkerAutoConfiguration. Скорее всего, вы пришли с другим, который вы определили вручную, вы могли бы проверить это?

Пожалуйста, придерживайтесь раздела Freemarker в application.properties или другими словами: настройте свое приложение со свойствами spring.freemarker.* Spring Boot.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...