我想创建将在应用程序中使用的Spring引导服务:
具有SNMTP服务器配置的主类:
public class MailConfiguration {
public MailConfiguration() {
// TODO add configuration for SNMP server
}
}
每种情况下具有特定主体的类:
public class NewUserNotifier extends MailConfiguration{
public void sendNewUserNotifier() {
// TODO Implement here logic
}
}
public class TransactionLimitsNotifier extends MailConfiguration {
public void sendTransactionLimitsNotifier() {
// TODO Implement here logic
}
}
当我可以配置一个主类时,如何实现使用@Autowire调用的Spring服务?
答案 0 :(得分:2)
您不需要扩展包含电子邮件配置的类。您只需在其中创建一个方法并用@Bean
对其进行注释,然后spring会将其实例注入到使用@Autowired
进行调用的位置。
将此内容添加到pom.xml的依赖项中(如果尚未添加):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.0.4.RELEASE</version>
</dependency>
如果使用gradle,请将其添加到build.gradle
compile group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '2.0.4.RELEASE'
这是您需要的配置。您将此bean添加到具有@Configuration
批注的类中:
@Bean
public JavaMailSender getJavaMailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("smtp.gmail.com");
mailSender.setPort(587);
mailSender.setUsername("my.gmail@gmail.com");
mailSender.setPassword("password");
Properties props = mailSender.getJavaMailProperties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.debug", "true");
return mailSender;
}
然后,要发送电子邮件,您需要将JavaMailSender
注入一个用@Component
注释的类({{1},@Service
和@Controller
)并开始发送电子邮件:
@Repository