回顾
- jax-ws规范 (wsdl,soap协议 UDDI)
- 电子保运 (1.电子保运,2.查询报运结果)
- echarts
- 统计分析
1 定时任务调度(重点)
定时任务 : 在规定的时候范围或者时间节点下自动的执行java方法
quartz框架 : 是一个使用简单,和spring无缝集成的定时任务框架
##1.1 quartz中的相关概念
- 定时任务类
- JobDetail (任务描述) : 配置定时执行的类和类中的方法
- triiger(触发器) : 描述执行的时间, 执行方法
- 调度容器 : 管理所有的triiger
配置定时任务类的步骤如下:
(1) 添加定时任务类
(2) 将quartz于spring整合
applicationContext-task.xml配置文件内代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<description>quartz与Spring整合</description>
<!--定时任务类交给spring容器管理-->
<bean id="myTask" class="cn.itcast.web.task.MyTask"></bean>
<!--配置jobdetail-->
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!--注入定时任务类-->
<property name="targetObject" ref="myTask"></property>
<!--注入类中的方法名称-->
<property name="targetMethod" value="task"></property>
</bean>
<!--配置trigger-->
<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail"></property>
<!--配置执行时间 cron表达式-->
<property name="cronExpression" value="0/5 * * * * ?"></property>
</bean>
<!--配置定时调度容器-->
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<array>
<ref bean="myTrigger"></ref>
</array>
</property>
</bean>
</beans>
(3) 启动tomcat, 测试定时环境是否搭建成功
1.2 cron表达式(重点)
七子表达式 秒 分 时 日 月 周 年
0-59 0-59 0-23 1-31 1-12 1-7(周日-周六)
符号:
年可以省略
m/n : 从m开始,每个N执行
* : 任意
? : 出现在日和周上,表示放弃
a,b,c,d : 指定执行时间
m-n : 从m开始到n 整数开始
L : last最后
m#n : 第n个m
cron表达式举例(一定要看懂)
百度: cron在线生成器
1.3 定时发送邮件
每天早上8点30分,自动的查询数据库,找到今日需要交货的购销合同.
给企业的管理员发送一封邮件
2 pdf报表Jasper
Jasper Report :是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成 PDF
jasper Report框架 开发使用步骤:
2.1 生命周期(开发步骤)
- 设计(Design )阶段
设置pdf的模板,设置展示的样式
使用 jasper stutio工具设计模板
.jrxml 文件 -->编译 . japer文件 - 执行(Execution )阶段
java代码中
数据填充
数据 + .jasper对象 - 输出(Export )阶段
Java代码
下载或者在线预览pdf
2.2 入门案例
2.2.1安装studio模板设计工具
2.2.2 设计模板
2.2.3 java代码生成pdf
创建PdfController
/**
* 1.导入坐标
* 2.导入模板文件
* 3.数据填充
*/
@RequestMapping("/exportPdf")
public void exportPdf() throws Exception {
//1.加载模板的路径
String path = session.getServletContext().getRealPath("/")+"/jasper/test01.jasper";
//2.创建JasperPrint对象,需要填充数据
/**
* 1.模板路径
* 2.map集合
* 3.JrDataSoure
*
*/
JasperPrint jp = JasperFillManager.fillReport(path,new HashMap<>(),new JREmptyDataSource());
//3.输出pdf文件
JasperExportManager.exportReportToPdfStream(jp,response.getOutputStream());//1.japserPrint对象 ,2.outputstream
}
2.2.4 中文处理
- 在设计模板的时候,需要明确指定中文字体
- 在java程序中需要导入中文字体
将 fonts.xml 文件 stsong.TTF 和 jasperreports extension.properties 导入项目resource文件夹下
3 数据填充
通过java代码向pdf模板中动态的添加数据
3.1 Map类型数据填充
/**
* 案例二: map类型参数
*/
@RequestMapping("/exportPdf2")
public void exportPdf2() throws Exception {
//1.加载模板的路径
String path = session.getServletContext().getRealPath("/")+"/jasper/test02.jasper";
//2.创建JasperPrint对象,需要填充数据
/**
* map类型的数据
*/
Map map = new HashMap<>();
map.put("username","张三");
map.put("age",12);
map.put("address","北京顺义");
map.put("companyName","传智播客");
JasperPrint jp = JasperFillManager.fillReport(
path,map,new JREmptyDataSource());
//3.输出pdf文件
JasperExportManager.exportReportToPdfStream(jp,response.getOutputStream());//1.japserPrint对象 ,2.outputstream
}
总结 : 单一对象转化为map集合
3.2 List(JrDataSource数据源)类型数据填充
/**
* 案例三: 传入list集合( JrDataSource)
*/
@RequestMapping("/exportPdf3")
public void exportPdf3() throws Exception {
//1.加载模板的路径
String path = session.getServletContext().getRealPath("/")+"/jasper/test03.jasper";
//2.创建JasperPrint对象,需要填充数据
/**
* JrDataSource类型的数据
* list集合
*/
List<ItcastUser> list = new ArrayList<>();
for(int i=0;i<10;i++) {
ItcastUser user = new ItcastUser();
user.setUsername("用户"+i);
user.setAge(10 + i);
user.setCompanyName("企业"+i);
list.add(user);
}
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(list);
JasperPrint jp = JasperFillManager.fillReport(
path,new HashMap<>(),dataSource);
//3.输出pdf文件
JasperExportManager.exportReportToPdfStream(jp,response.getOutputStream());//1.japserPrint对象 ,2.outputstream
}
4 报运单Pdf文件生成
@RequestMapping("/exportPdf")
public void exportPdf(String id) throws Exception {
//1.根据id查询报运单
Export export = exportService.findById(id);
//2.根据报运单id查询所有的商品
ExportProductExample example = new ExportProductExample();
ExportProductExample.Criteria criteria = example.createCriteria();
criteria.andExportIdEqualTo(id);
List<ExportProduct> list = exportProductService.findAll(example);
//3.加载模板的路径
String path = session.getServletContext().getRealPath("/")+"/jasper/export.jasper";
//4.创建JasperPrint对象,需要填充数据
// Map map = new HashMap();
// map.put("customerContract",export.getCustomerContract());
Map<String, Object> map1 = BeanMapUtils.beanToMap(export);
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(list); //list数据
JasperPrint jp = JasperFillManager.fillReport(path,map1,dataSource);
//5.输出pdf文件
JasperExportManager.exportReportToPdfStream(jp,response.getOutputStream());
}
作业:
1.练习定时任务
2.报运单pdf
3.预习第14天