spring集成quartz,出现内存益出
最近开发一个文档系统,要实现定时搜索数据库并且发送通知邮件。加入了quartz之后,每分钟定时执行一次,发现系统执行了120次左右,就会报内存益出。具体代码如下: applicationContext.xml 配置 <?xml version="1.0" encoding="UTF-8"?><!-- 配置数据源 --> java:comp/env/jdbc/JavaOA_DB <!-- 配置BlobHandler--> <!-- 配置SessionFactory --> classpath:hibernate.cfg.xml <!-- 配置事务管理器--> PROPAGATION_REQUIRED,readOnly PROPAGATION_REQUIRED,readOnly PROPAGATION_REQUIRED PROPAGATION_REQUIRED,readOnly <!-- 触发器--><!-- 在每分钟的0秒时执行一次--><!-- property name="cronExpression" value="0 0 0 * * ?" /--> <!-- 触发器调度控制器 -->执行类:public class ScheduledJob implements Job { public void execute(JobExecutionContext context)throws JobExecutionException { try{ executeTask(); } catch (Exception e) { e.printStackTrace(); } } //计划任务写在这里,这里的代码会在spring中配置的定时器被触发时执行 @SuppressWarnings({ "unchecked"}) public void executeTask(){ ApplicationContext appCxt = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml","applicationContext-document.xml"}); IDocumentService documentService=(IDocumentService)appCxt.getBean("documentService"); IDepartmentManagerService departmentManagerService=(IDepartmentManagerService)appCxt.getBean("departmentManagerService"); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR, 30); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String timeStr=sdf.format((calendar.getTime())).toString(); System.out.println("timeStr========="+timeStr); String hql; hql="select distinct document from Document document where document.d_state='Y' and document.censor_date<='"+timeStr+"' and document.censor_state='N'"; List<Document> documentList=documentService.getSelectedDocument(hql); try{ Properties props = new Properties(); props.put("mail.smtp.host","www.126.com"); //设置SMTP发件服务器地址 props.put("mail.smtp.auth","true"); //邮件服务器是否要验证 PopupAuthenticator auth = new PopupAuthenticator(); Session session = Session.getInstance(props, auth); //获取邮件会话 MimeMessage message = new MimeMessage(session); //消息,相当于一张白纸 Address addressFrom = new InternetAddress("SystemMail@126.com"); Address addressCopy = new InternetAddress("yangwl@126.com"); //抄送地址 message.setFrom(addressFrom); Iterator it=documentList.iterator(); while(it.hasNext()){ Document document=(Document)it.next(); //通过发行部门找出部门经理的邮件地址 String publish_departmentId=document.getPublish_departmentId(); String hql1="select distinct dm from DepartmentManager dm where dm.de_id='"+publish_departmentId+"' and dm.email!=''"; List<DepartmentManager> departmentManagerList =departmentManagerService.getAllDepartmentManager(hql1); InternetAddress[] address=new InternetAddress[departmentManagerList.size()]; Iterator it1=departmentManagerList.iterator(); int i=0; while(it1.hasNext()) { DepartmentManager departmentManager=(DepartmentManager)it1.next(); String email=departmentManager.getEmail(); if(email!=null&&!"".equals(email)){ address[i]=new InternetAddress(email);} i++; } document.setCensor_state("Y"); documentService.saveOrUpdateDocument(document); message.setSubject("文件重审通知"); StringBuffer theMessage = new StringBuffer(); theMessage.append("您好:"); theMessage.append(document.getPublish_department()+"有文件需要重审,文件名为:《"+document.getD_name()+"》。请及时按以下链接登陆进行查看。"); theMessage.append("www.javaoa.com"); theMessage.append(""); theMessage.append("注意:"); theMessage.append("这是一个不受监控的电子邮件地址,请不要答复此邮件;"); message.setContent(theMessage.toString(), "text/html;charset=gb2312"); message.addRecipients(Message.RecipientType.TO,address); message.addRecipient(Message.RecipientType.CC,addressCopy); message.saveChanges(); Transport transport = session.getTransport("smtp"); transport.connect("www.126.com", "SystemMail", "123"); transport.sendMessage(message, message.getAllRecipients()); session.setDebug(true); transport.close(); } }catch (Exception e) { e.printStackTrace(); } } } catalina.bat set JAVA_OPTS=-Xms512m -Xmx1500m -XX:PermSize=128M -XX:MaxPermSize=128m 异常贴图: