定时任务类:

package com.cairenhui.sec.task;import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Date;
import java.util.List;
import java.util.Map;import javax.mail.internet.MimeMessage;import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;import com.cairenhui.sec.service.ObsUserHkInfoService;
import com.cairenhui.sec.util.ExcelUtil;
import com.cairenhui.sec.utils.PropertiesUtils;/*** * @author jinxd 2014-12-29 从数据库中导出excel,然后调用邮件发送接口,发送邮件*/
@Component
public class HKTask {@Autowiredprivate ObsUserHkInfoService obsUserHkInfoService;@Autowiredprivate JavaMailSenderImpl mailSender;private static final Logger log = Logger.getLogger(HKTask.class);/*** 港股通业务,通过OBS_USER_HK_INFO表,每天23:55导出excel,并发送邮件*/public void sendHKInfoEmailJob() {long t1 = System.currentTimeMillis();log.info("--------------  执行港股通定时任务 start --------------------" + t1);try {@SuppressWarnings("unchecked")List<Map<String, Object>> list = obsUserHkInfoService.findTheSameDay();// 查询数据if (list.size() > 0) {StringBuilder fileName = new StringBuilder();String name = "HKStockCount_" + (new Date()).getTime();// 表格名字String encoderName = "";try {encoderName = URLEncoder.encode(name, "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}fileName.append(encoderName).append(".xls");// 建立excel表格OutputStream os = new FileOutputStream("c:\\temp\\" + fileName);// linux和windows路径不一样String[] titleArr = new String[] { "编号", "用户ID", "姓名", "客户资金账号", "客户风险等级", "知识测评分数", "指定交易", "沪A账号", "账户资产金额", "创建时间", "完成时间", "处理意见", "处理状态(4成功,5失败)", "备注" };String[] codeArr = new String[] { "OUHI_ID", "USER_ID", "CLIENT_NAME", "FUND_ACCOUNT", "CORP_RISK_LEVEL", "PAPER_SCORE", "REG_FLAG", "STOCK_ACCOUNT_A", "ASSET_BALANCE_VALUE", "CREATE_TIME", "FINISH_TIME", "RESULT_COMMENT", "STATUS", "REMARK" };ExcelUtil.export(os, list, titleArr, codeArr, name);log.info("--------------  导出excel成功,建立临时文件end --------------------" + (System.currentTimeMillis() - t1) + "ms");String sPath = "c:\\temp\\" + fileName.toString();// linux和windows路径不一样String toMail = PropertiesUtils.get("mail.hk.send.to", "");// mail.properties里面配置String fromMail = PropertiesUtils.get("mail.send.from", "");// 是否需要发邮件,根据配置是否为空来判断if (!toMail.isEmpty()) {// 将excel作为附件发送,并删除本地的excel文件String subject = "港股通开户信息";String content = (new Date()).toString() + "_港股通开户信息报表";MimeMessage mailMessage = mailSender.createMimeMessage();MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage, true, "utf-8");messageHelper.setTo(toMail);// 接收方邮箱messageHelper.setFrom(fromMail);// 发送方邮箱messageHelper.setSubject(subject);// 设置邮件主题messageHelper.setText(content, true);// 设置邮件主题内容FileSystemResource fileR = new FileSystemResource(new File(sPath));// 读取附件// 这里的方法调用和插入图片是不同的。messageHelper.addAttachment("HKStockCount.xls", fileR); // 设置附件log.info("--------------  发送邮件开始  --------------");mailSender.send(mailMessage); // 发送邮件log.info("--------------  发送邮件成功,任务结束 end --------------------" + (System.currentTimeMillis() - t1) + "ms");} else {log.info("-------------- 发件邮箱或收件邮箱未配置,不发送港股通开户信息邮件  --------------------");}File file = new File(sPath);// 路径为文件且不为空则进行删除if (file.isFile() && file.exists()) {file.delete();log.info("--------------  临时文件删除成功 --------------------");}}else{log.info("--------------  当日没有开通港股通信息记录 --------------------");log.info("--------------  港股通定时任务 end ---------------------------");}} catch (Exception e) {log.error("sendHKInfoEmailJob异常:", e);e.printStackTrace();}}}
ExcelUtil.export方法:
<pre name="code" class="java">public static void export(OutputStream os, List<Map<String, Object>> list, String[] titleArr,String[] codeArr, String name){try {//创建一个工作簿,也就是整个文档WritableWorkbook wbook = Workbook.createWorkbook(os);//设置字体WritableFont wfont = new WritableFont(WritableFont.ARIAL, 10,WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,Colour.BLACK);//定义单元格格式WritableCellFormat wcf = new WritableCellFormat(wfont);double maxSheetSize = 60000.0;int sheetNum = (int) Math.ceil(list.size() / maxSheetSize);for(int num = 0; num < sheetNum; num++){WritableSheet wsheet = wbook.createSheet(name + "("+(num+1)+")", num);String title=null;for(int i=0; i<titleArr.length; i++){title = titleArr[i];wsheet.addCell(new Label(i, 0, title, wcf));}for(int i = num*(int)maxSheetSize ; i < (num+1)*(int)maxSheetSize && i < list.size(); i++){Map<String, Object> m = list.get(i);int temp = i - num*(int)maxSheetSize + 1;for(int j=0; j<codeArr.length; j++){String value = String.valueOf(m.get(codeArr[j])==null?"":m.get(codeArr[j]));wsheet.addCell(new Label(j, temp, value));}}}wbook.write();wbook.close();os.close();}catch(Exception e){log.info("exception heppended in "+ExcelUtil.class+" cause: ", e);}}

quartz.xml:

<!-- 港股通:定义要使用哪个bean中的哪个方法作为要定时执行的任务 --><bean id="HKInfoSendJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="HKTask" /> </property> <property name="targetMethod"> <value>sendHKInfoEmailJob</value></property> </bean><!-- 港股通:触发器的bean的设置 --><bean id="HKInfoSendJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail"><ref bean="HKInfoSendJob" /></property><property name="cronExpression"><value>0 46 09 * * ?</value></property></bean><!-- 任务调度工厂 --><!-- 启动定时器,triggers属性接受【一组】触发器 --><bean id="schedulerFactory" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <!-- <ref local="channelFinishJobTrigger"/> --><ref local="pollingBusinessJobTrigger"/><ref local="HKInfoSendJobTrigger"/></list> </property> </bean>

配置文件:

####邮件系统参数设置开始#邮件服务器地址
mail.server.host=smtp.163.com#邮件服务器端口
mail.server.port=25#邮件服务器登录用户名、密码
mail.server.username=jin459114374@163.com
mail.server.password=05702611054#开户验证身份 true/false
mail.server.auth=true#邮件发送地址
mail.send.from=jin459114374@163.com#邮件接收地址
mail.hk.send.to=jinxd@cairenhui.com#邮件内容:邮箱绑定
mail.content.bind=mail.content.bind####邮件系统参数结束

java定时任务:oracle导出excel后,发送excel作为附件的邮件相关推荐

  1. 解决导出CSV后在EXCEL打开纯数字前面0丢失问题

    解决导出CSV后在EXCEL打开纯数字前面0丢失问题 参考文章: (1)解决导出CSV后在EXCEL打开纯数字前面0丢失问题 (2)https://www.cnblogs.com/linn/p/102 ...

  2. 用simple mapi 发送一个带附件的邮件

    使用 MAPI 实现邮件发送 原 作:deltacat,修改中 最后更新:2004.09.16 版权声明:随意转载,敬请保持文档及说明完整性 关键字: VC 邮件发送 MAPI 一.简述 实际上,本文 ...

  3. 在中WebBrowser加载Excel后获取excel对象

    在最新的Visual Studio 2005中,为我们提供了一个WebBrowser的封装控件,这个控件隐藏了底层的axWebBrowser控件,我们就利用WebBrowser控件来完成我们的Exce ...

  4. Java实现Oracle导出数据到Excel

    1.导入相应的jar包(jxl.jar 和 数据库连接的jar包) 2.写数据库连接的工具类 import java.sql.Connection; import java.sql.DriverMan ...

  5. oracle导出一个表数据库,excel怎么导出多个表格数据库数据-一个excel表格中有多个sheet,如何将其导入oracle数......

    一个excel表格中有多个sheet,如何将其导入oracle数... 解决方案如下: 可以新建一个查询,查询你所说的2个表中的所有数据 运行查询,这样查询结果就包含了你要的数据,再把查询结果导出 就 ...

  6. Java使用EasyExcel导出简单、复杂excel,以及多个excel打包导出下载zip

    EasyExcel是一款阿里开源的一款非常优秀Excel导入导出工具,使用内存小,处理速度快,使用方便,正好最近项目中有用到多个excel导出下载的功能,便记录下 EasyExcel使用git地址:G ...

  7. Java POI导入/导出(规则/非规则)excel

    Java使用poi组件导出excel报表,能导出excel报表的还可以使用jxl组件,但jxl想对于poi功能有限,jxl应该不能载excel插入浮动层图片,poi能很好的实现输出excel各种功能, ...

  8. oracle导出数据词典到excel工具,OracleToExcel

    OracleToExcel是一款可以将Oracle中的数据导出到excel中的工具,它支持单个表.所有表和SQL查询数据,支持输出clob和blob字段在Oracle数据库管理中比较常用,支持批量导出 ...

  9. c#操作excel后关闭excel.exe的方法

    C#和Asp.net下excel进程一被打开,有时就无法关闭,   尤其是website.对关闭该进程有过GC.release等方法,但这些方法并不是在所有情况下均适用.  于是提出了kill   p ...

  10. Java定时任务手工触发-使用Arthas

    1. 前言 在测试环境经常需要手工触发Java应用中的定时任务,如果定时任务没有使用Quartz,Java应用中也没有提供其他方法手工触发定时任务,可以使用Arthas快速实现以上目的. 以下使用Ar ...

最新文章

  1. js 实现多选框(复选框) 和单选框,下拉框功能完整示例代码附效果图
  2. mysql怎么防止误操作_MySQL数据库防止人为误操作的实例讲解
  3. react 显示当前时间_React获取最近三个月的日期组件
  4. Redmine环境搭建
  5. 【数据结构与算法】AVL树核心算法的Java实现
  6. 时间:2014年3月27日20:08:01网站建表实战与优化意识
  7. android 编译sdk,android编译sdk
  8. Android4.4 多媒体开发(五)----OpenMax简介
  9. 如何安装 罗技“优联技术”无线鼠标、无线键盘?
  10. 计算机桌面文件如何发送给qq好友,怎么把电脑里的文件夹发给qq好友
  11. Gale-Shapley 稳定匹配算法的C++实现
  12. 选用什么的域名后缀好
  13. java17长期支持版本_Java 8后的首个长期支持版本Java 11
  14. Oracle导出数据中的prompt,set feedback 等是什么意思
  15. 计算机系统与维护专科毕业论文,计算机系统维护毕业设计论文
  16. 如何办理杭州市民卡|非杭户籍人员个人申领流程
  17. SQL2005数据库备份如何还原到SQL2000数据库中
  18. 职场菜鸟捕食指北【初入职场篇】
  19. 世界上最快的计算机-泰坦和天河二号
  20. c#机器人聊天软件_C#winForm 聊天只能机器人(完整版)

热门文章

  1. 小学生python编程写游戏_小学生开始学Python,开发AI的首选编程语言:推荐一波Python书单...
  2. 公共行政领域的7大数据科学应用场景案例
  3. 名帖98 赵孟頫 小楷《黄庭经》
  4. 制造业管理软件如何帮助企业解决仓库管理难题?
  5. GO项目性能优化大赏
  6. 自动定时发送邮件的方法 —— 定时执行专家V6.8
  7. 武汉加油!中国加油!小峯加油!大家加油!
  8. 局域网频繁掉线解决办法
  9. Automatic Targetless LiDAR-CameraCalibration: A Survey论文解读
  10. 除了摆地摊or送外卖,程序猿如何体面的赚零花钱?