Создание bean-компонентов
Spring boot инициализирует только один JavaMailSender
, как только обнаружит свойства spring.mail.*
.Если вам нужно несколько, вы должны определить эти бины самостоятельно.Если вам нужны только свойства host, port, username и password, вы можете использовать эту простую конфигурацию:
@Configuration
public class MailConfiguration {
@Bean
@ConfigurationProperties(prefix = "spring.mail.primary")
public JavaMailSender primarySender() {
return new JavaMailSenderImpl();
}
@Bean
@ConfigurationProperties(prefix = "spring.mail.secondary")
public JavaMailSender secondarySender() {
return new JavaMailSenderImpl();
}
}
Однако, это не будет работать , если вы также хотите настроить spring.mail.properties.*
также.Чтобы сделать это, ваша конфигурация будет немного более сложной, так как вам нужно будет сделать следующее:
- Создайте два bean-компонента из
MailProperties
, используя тот же @ConfigurationProperties
, как вы можетесм. выше. - Используйте
MailProperties
аналогично тому, как это делает Spring boot в MailSenderPropertiesConfiguration
.
Конфигурация
После этого вы можете использовать свойства spring.mail.primary.*
и spring.mail.secondary.*
, как вы привыкли.Например:
spring.mail.primary.host=host1
spring.mail.primary.port=port1
spring.mail.primary.username=username1
spring.mail.primary.password=password1
spring.mail.secondary.host=host2
spring.mail.secondary.port=port2
spring.mail.secondary.username=username2
spring.mail.secondary.password=password2
Использование
После этого вы можете автоматически подключать как primarySender
, так и secondarySender
.Обязательно используйте аннотацию @Qualifier
, чтобы сообщить Spring, какой:
@Service
public class MailService {
private JavaMailSender primarySender;
private JavaMailSender secondarySender;
public MailService(
@Qualifier("primarySender") JavaMailSender primarySender,
@Qualifier("secondarySender") JavaMailSender secondarySender) {
this.primarySender = primarySender;
this.secondarySender = secondarySender;
}
}