nar*_*ana 2 java email spring spring-boot
我知道我可以使用以下属性来自动创建一个JavaMailSenderbean:
spring.mail.host=hostname
spring.mail.port=587
spring.mail.username=username
spring.mail.password=password
Run Code Online (Sandbox Code Playgroud)
但是,如何定义这些属性来创建两个 JavaMailSenderbean,以便我可以从不同的 SMTP 服务器发送电子邮件?
我尝试定义以下属性:
# Properties for sender 1
spring.mail.host=hostname
spring.mail.port=587
spring.mail.username=username
spring.mail.password=password
# Properties for sender 2
spring.mail.host1=hostname2
spring.mail.port1=587
spring.mail.username1=username2
spring.mail.password1=password2
Run Code Online (Sandbox Code Playgroud)
但是,这并不像我预期的那样工作,那么如何JavaMailSender使用 Spring boot创建两个bean?
g00*_*00b 13
Spring boot 只会JavaMailSender在找到spring.mail.*属性后立即初始化一个。如果需要多个bean,则必须自己定义这些bean。如果你只需要属性主机、端口、用户名和密码,你可以使用这个简单的配置:
@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();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您还想进行配置,这将不起作用spring.mail.properties.*。为此,您的配置会稍微复杂一些,因为您必须执行以下操作:
MailProperties使用相同的bean,@ConfigurationProperties如您在上面看到的那样。MailProperties在如春天启动内做了类似的方式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
Run Code Online (Sandbox Code Playgroud)
之后,您可以自动装配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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3225 次 |
| 最近记录: |