项目一 13 定时任务调度 cron表达式 pdf报表jasper

回顾

  • 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 中文处理

  1. 在设计模板的时候,需要明确指定中文字体

在这里插入图片描述

  1. 在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天

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值