2016-03-01 1 views
-1

Мне нужно воспользоваться услугами весны. В одном я настройку javaMailSender следующим образом:Можно ли сконфигурировать конфигурацию одной конфигурации весеннего проекта для другого весеннего проекта

@Configuration 
@PropertySource("classpath:application.properties") 
public class EmailConfiguration { 

    @Value("${mail.host}") 
    String host; 
    @Value("${mail.username}") 
    String username; 
    @Value("${mail.password}") 
    String password; 
    @Value("${mail.smtp.auth}") 
    String auth; 
    @Value("${mail.smtp.port}") 
    String port; 
    @Value("${mail.smtp.starttls.enable}") 
    String enable; 
    @Value("${mail.smtp.fallback}") 
    String fallback; 
    @Value("${mail.smtp.ssl.enable}") 
    String ssl; 

    @Bean 
    public JavaMailSender javaMailSender() 
    { 
     JavaMailSenderImpl msender=new JavaMailSenderImpl(); 
     Properties mailProperties=new Properties(); 
     mailProperties.put("mail.smtp.auth",auth); 
     mailProperties.put("mail.smtp.ssl.enable",ssl); 
     mailProperties.put("mail.smtp.fallback",fallback); 
     mailProperties.put("mail.smtp.starttls.enable",enable); 
     msender.setJavaMailProperties(mailProperties); 
     msender.setHost(host); 
     msender.setPort(Integer.parseInt(port)); 
     msender.setUsername(username); 
     msender.setPassword(password); 
     return msender; 
    } 
} 

сейчас в другом весеннем сервисе, который является в основном весной bacth работы, я автоматическим связыванием зависимости следующим образом:

public class NotificationItemProcessor implements ItemProcessor<NotificationInstance, NotificationInstance> { 

    private static final Logger logger = LoggerFactory.getLogger(Application.class.getName()); 
    @Autowired 
    JavaMailSender javaMailSender; 
    @Autowired 
    Connection connection; 
    @Autowired 
    Queue queue; 

    @Override 
    public NotificationInstance process(NotificationInstance notificationInstance) 
    { 
     if(notificationInstance !=null) 
     { 
      NotificationChannel channelAdaptor; 

      NotificationChannel channel = NotificationChannelFactory.getSingleton().getChannelInstance(NotificationChannelType.valueOf(notificationInstance.getTargetType().toUpperCase())); 
      notificationInstance.setRetries(notificationInstance.getRetries()+1); 
      logger.info("Trying to send notification for id {}",notificationInstance.getNotificationId()); 
      Boolean status=channel.send(notificationInstance, javaMailSender); 
      updateStatus(notificationInstance, status); 
      return notificationInstance; 
     } 
     else 
      return null; 
    } 

    public void updateStatus(NotificationInstance notificationInstance, Boolean status) 
    { 
     if(status) 
      notificationInstance.setStatus(NotificationStatus.SENT.toString()); 
     else if (notificationInstance.getRetries() < 5) 
      notificationInstance.setStatus(NotificationStatus.QUEUED.toString()); 
     else 
      notificationInstance.setStatus(NotificationStatus.FAILED.toString()); 
    } 
} 

плюса я включил зависимость первой услуги во второй службе pom.xml. После запуска первой службы, которая работает хорошо, когда я начинаю вторую услугу, я получаю ошибку следующим образом:

framework.beans.factory.NoSuchBeanDefinitionException: Нет квалификационную боб типа [org.springframework.mail.javamail. JavaMailSender], найденный для зависимости: ожидается как минимум 1 компонент, который квалифицируется как кандидат autwire для этой зависимости. Зависимость от аннотаций: {@ org.springframework.beans.factory.annotation.Autowired (обязательно = истина)}

Решение Я попытался с обоих @Import ("") и @ComponentScan (""). Я не получаю ошибку времени компиляции, но во время выполнения я получаю исключение NullPointerException для объекта JavaMailSender.

ответ

1

Вы должны «рассказать» о своем контексте, что хотите добавить этот компонент в контекст вашего приложения.

можно сделать, просмотрев пакет, в котором этот класс находится (EmailConfiguration).

  1. xml config - добавить <context:component-scan base-package="com.example.conf" /> в вашу конфигурацию xml.

  2. java config - добавить @ComponentScan("com.example.conf") в один из классов конфигурации.

2

Вы также можете импортировать EmailConfiguration класс из класса конфигурации вашего пружинный пакетного приложения.

@Import(EmailConfiguration.class) 
@Configuration 
public class BatchConfig { 
.... 
}