定时任务
/**
* 定时任务
*
*/
@Component
@EnableScheduling
public class test {
private static Logger log = Logger.getLogger(SendMailTask.class);
/**
* 定时发送邮件
*
* @param
* @throws
*/
@Scheduled(cron = "0 30 9 * * *")//每天九点半发送邮件
public void dailyTask() throws Exception {
SimpleMailSender sms = new SimpleMailSender();
try {
sms.sendMail("邮件标题", "邮件内容", "1", "123456@163.com");// 发送邮件
} catch (Exception e) {
e.printStackTrace();
log.error("Error msg: " + e.getMessage());
}
}
}
定时任务每次执行都会重复两次,原因是代码重复扫描了
解决办法:
1、修改tomcat配置文件server.xml----------验证失败
设置点Host,将appBase属性由默认的“webapps”设置为空("")
或context 的 "daoBase"设置为空("")
2、修改web.xml
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--加上了这个 定时器就不会同时执行两次了-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
这里设置配置文件为空后,也就扫描不到配置文件内的资源文件了,重复扫描的问题是解决了,但是系统没办法访问了
3、把定时任务放到不会自动扫描的路径下
原来的定时任务放在controller目录下
配置文件配置了<context:component-scan base-package="com.*.*.controller" />
把定时任务移出这个目录,问题解决了
ApplicationContext-mvc.xml
<context:component-scan base-package="com.*.*.controller" />
<context:component-scan base-package="com.json" />