在作为多线程编程中一般会用线程池去开启一个多线程:(单独开启也可)
<!-- 定时任务 -->
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="${task.core_pool_size}" />
<property name="maxPoolSize" value="${task.max_pool_size}" />
<property name="queueCapacity" value="${task.queue_capacity}" />
<property name="keepAliveSeconds" value="${task.keep_alive_seconds}" />
</bean>
要么用executorserivce生成定时任务的线程池
这里要注意既然用了线程池就要保证线程池是全局性的,获取单例方式实现,
这样才有线程池的意义,为了公用,这样的话一般会抽象成一个公用的类(单例)
类中:
@Component
public class SendEmailServiceImpl implements SendEmailService {
@Autowired
private JavaMailSender mailSender;
@Autowired
private TaskExecutor taskExecutor;
/* 使用SpringMail发送邮件 */
@Override
public void sendEmail(String sendFrom, String sendTo, String subject, String htmlMessage) throws MessagingException {
final MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true, "utf-8");
helper.setSubject(subject);
helper.setFrom(sendFrom);
helper.setTo(sendTo);
helper.setText(htmlMessage, true);
taskExecutor.execute(new Runnable(){
@Override
public void run() {
try {
SendEmailServiceImpl.this.mailSender.send(message);
} catch (MailException e) {
System.out.println("Error Email send to " );
e.printStackTrace();
}
}
});
}
}