Spring与Quartz Spring读取xml quartz整合进spring配置文件

前言:demo每天定时从数据库拉取数据并导出到Excel

目录结构:

 

 

 SqlMapConfig.xml文件配置:

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--
        environments 运行环境,可以配置多个
        default="development"  默认,值=development  开发环境
        environment 运行环境,配置一个
         id="development"  id唯一性的属性 值=id="development"  开发环境
         id="product"  生产环境
         id="test"     测试环境
    -->
    <environments default="development">
        <environment id="development">
            <!--
                 transactionManager 事务管理配置
                 type="JDBC"  使用的是最原始的JDBC的事务处理机制
                 type="MANAGERED" 不管理事务
            -->
            <transactionManager type="JDBC" />
            <!--
                dataSource 配置数据源,连接池
                type="POOLED" 使用连接池
                MyBatis自带连接池  (type=""UNPOOLED)
            -->
            <dataSource type="POOLED">
                <!--配置的是,数据库连接四大信息-->
                <property name="driver" value="oracle.jdbc.driver.OracleDriver" />
                <property name="url" value="jdbc:oracle:thin:@xxx" />
                <property name="username" value="xxx" />
                <property name="password" value="xxx" />
            </dataSource>
        </environment>
<!--
        <environment id="produce">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatisProduce?characterEncoding=utf8" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>

        <environment id="test">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatisTest?characterEncoding=utf8" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>-->

    </environments>
    <!--
      配置的是映射关系  ORM Java对象和数据表
    -->
    <mappers>
        <!--
               单独的映射关系
               resource资源,映射文件的路径
               UserMapper.xml 配置的是数据表user的SQL语句
        -->
        <mapper resource="UserMapper.xml" />
    </mappers>
</configuration>

 

 UserMapper.xml文件:

<?xml version="1.0" encoding="utf-8" ?>
        <!DOCTYPE mapper
                PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="test">
    <!--超出电子围栏-->
    <!--先清理临时表-->
    <update id="truncateTable">
        truncate table temp_wxclassrecord1
    </update>
    <!--执行存储过程-->
    <select id="executeTemp" statementType="CALLABLE">
    {
        call temp_wxmin(
            to_char(sysdate-2,'yyyy-mm-dd')
        )
    }
    </select>
    <!--查询导出-->
    <select id="queryOutOfRange" resultType="com.ydfind.demo.springtimer.pojo.OutOfRangeUser">
        select s.areaname,g.shortname,t.carnum from pro_studenttraininfo t left join gen_driveschool g on t.schoolcode = g.driveschoolcode
        left join sys_areainfo s on s.xzqh=g.regionname
        where t.classid in (
        select distinct t.classid from temp_wxclassrecord1 t where t.reason = '超出电子围栏培训'
        ) and t.starttime<![CDATA[>=]]>trunc(sysdate-2) and t.starttime<![CDATA[<]]>trunc(sysdate-1)
    </select>
<!--
       配置,数据表user模糊查询
       ${参数名} 写参数名字,固定写为value
       #{}  ${} 获取参数的区别
         ${}  适合于特殊场景, SQL语句中的参数是 列名或者表名的时候
         select * from user order by
    -->
    <!--<select id="queryUserByUsername" resultType="com.ydfind.demo.springtimer.pojo.PeriodUser" parameterType="String">
        select * from user where username like #{value}
    </select>-->

</mapper>

 QuartzOutOfRange类(job类)

package com.ydfind.demo.springtimer;

import com.ydfind.demo.springtimer.mybatis.OutOfRange;

public class QuartzOutOfRange {
    public void doTask(){
        try{

            OutOfRange OutOfRange = new OutOfRange();
            //查询方法
            OutOfRange.queryOutOfRange();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

 OutOfRange类(业务操作)

package com.ydfind.demo.springtimer.mybatis;

import com.ydfind.demo.springtimer.utils.ExcelUtil;
import junit.framework.Test;
import org.apache.commons.io.FileUtils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

public class OutOfRange {

    //日期号
    private static String datenum;
    private static String datenumstart;
    private long ms;
    private static org.slf4j.Logger logger = LoggerFactory.getLogger(OutOfRange.class);
    public void queryOutOfRange() throws IOException {
        logger.error("执行开始,时间为:" + new SimpleDateFormat("yyyyMMdd HH:mm:ss:SSS").format(new Date()));
        datenumstart = new SimpleDateFormat("yyyyMMdd HH-mm-ss-SSS").format(new Date());
        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行SQL
        //先清理临时表
        int i = sqlSession.update("test.truncateTable");
        //执行存储过程
        Object selectOne = sqlSession.selectOne("test.executeTemp");
        //查询导出
        List<Object> userList = sqlSession.selectList("test.queryOutOfRange");
        datenum = new SimpleDateFormat("yyyyMMdd HH-mm-ss-SSS").format(new Date());
        logger.error("执行结束,时间为:" + new SimpleDateFormat("yyyyMMdd HH:mm:ss:SSS").format(new Date()));
        SimpleDateFormat sdf = new SimpleDateFormat("yyyymmdd hh-mm-ss-SSS");
        try {
            Date d1 = sdf.parse(datenumstart);
            Date d2 = sdf.parse(datenum);
            ms = d2.getTime() - d1.getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        logger.error("此次耗时::" + ms + "ms");
        //关闭连接
        sqlSession.close();

        //设置表头信息
        String sheetTitle = "超出电子围栏" + datenum.substring(0,8);
        String[] title = {"地区", "学校","牌号"};
        byte b[] = ExcelUtil.export(sheetTitle, title, userList);
        //设置保存地址
        File f = new File("D:\\jszc_data\\"+datenum.substring(0,8)+"\\"+sheetTitle+".xls");
        try {
            FileUtils.writeByteArrayToFile(f, b, true);
        } catch (IOException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

 POJO实体类OutOfRangeUser

package com.ydfind.demo.springtimer.pojo;

import java.util.Date;

public class OutOfRangeUser {
    //地区
    private String areaname;
    //学校
    private String shortname;
    //牌号
    private String carnum;

    @Override
    public String toString() {
        return "OutOfRangeUser{" +
                "areaname='" + areaname + '\'' +
                ", shortname='" + shortname + '\'' +
                ", carnum='" + carnum + '\'' +
                '}';
    }

    public String getAreaname() {
        return areaname;
    }

    public void setAreaname(String areaname) {
        this.areaname = areaname;
    }

    public String getShortname() {
        return shortname;
    }

    public void setShortname(String shortname) {
        this.shortname = shortname;
    }

    public String getCarnum() {
        return carnum;
    }

    public void setCarnum(String carnum) {
        this.carnum = carnum;
    }
}

 UtileExcel(导出Excel工具类)

package com.ydfind.demo.springtimer.utils;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;

public class ExcelUtil {
    //导出Excel
    public static byte[] export(String sheetTitle, String[] title, List<Object> list) {

        HSSFWorkbook wb = new HSSFWorkbook();//创建excel表
        HSSFSheet sheet = wb.createSheet(sheetTitle);
        sheet.setDefaultColumnWidth(20);//设置默认行宽

        //表头样式(加粗,水平居中,垂直居中)
        HSSFCellStyle cellStyle = wb.createCellStyle();
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
        //设置边框样式
        cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
        cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
        cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
        cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框

        HSSFFont fontStyle = wb.createFont();
        fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

        cellStyle.setFont(fontStyle);

        //标题样式(加粗,垂直居中)
        HSSFCellStyle cellStyle2 = wb.createCellStyle();
        cellStyle2.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
        cellStyle2.setFont(fontStyle);

        //设置边框样式
        cellStyle2.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
        cellStyle2.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
        cellStyle2.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
        cellStyle2.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框

        //字段样式(垂直居中)
        HSSFCellStyle cellStyle3 = wb.createCellStyle();
        cellStyle3.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中

        //设置边框样式
        cellStyle3.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
        cellStyle3.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
        cellStyle3.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
        cellStyle3.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框

        //创建表头
        HSSFRow row = sheet.createRow(0);
        row.setHeightInPoints(20);//行高

        HSSFCell cell = row.createCell(0);
        cell.setCellValue(sheetTitle);
        cell.setCellStyle(cellStyle);

        sheet.addMergedRegion(new CellRangeAddress(0,0,0,(title.length-1)));

        //创建标题
        HSSFRow rowTitle = sheet.createRow(1);
        rowTitle.setHeightInPoints(20);

        HSSFCell hc;
        for (int i = 0; i < title.length; i++) {
            hc = rowTitle.createCell(i);
            hc.setCellValue(title[i]);
            hc.setCellStyle(cellStyle2);
        }

        byte result[] = null;

        ByteArrayOutputStream out = null;

        try {
            //创建表格数据
            Field[] fields;
            int i = 2;

            for (Object obj : list) {
                fields = obj.getClass().getDeclaredFields();

                HSSFRow rowBody = sheet.createRow(i);
                rowBody.setHeightInPoints(20);

                int j = 0;
                for (Field f : fields) {

                    f.setAccessible(true);

                    Object va = f.get(obj);
                    if (null == va) {
                        va = "";
                    }

                    hc = rowBody.createCell(j);
                    hc.setCellValue(va.toString());
                    hc.setCellStyle(cellStyle3);

                    j++;
                }

                i++;
            }

            out = new ByteArrayOutputStream();
            wb.write(out);
            result =  out.toByteArray();
        } catch (Exception ex) {
            Logger.getLogger(ExcelUtil.class.getName()).log(Level.SEVERE, null, ex);
        } finally{
            try {
                if(null != out){
                    out.close();
                }
            } catch (IOException ex) {
                Logger.getLogger(ExcelUtil.class.getName()).log(Level.SEVERE, null, ex);
            } finally{
                try {
                    wb.close();
                } catch (IOException ex) {
                    Logger.getLogger(ExcelUtil.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
        return result;
    }



    //Excel数据导入
    /*public static List<User> imp(String url) {
        //List集合
        List<User> list = new ArrayList<User>();
        try {
            jxl.Workbook wb = null;
            InputStream is = new FileInputStream(url);
            wb = Workbook.getWorkbook(is);

            int sheetSize = wb.getNumberOfSheets();
            Sheet sheet = wb.getSheet(0);
            int row_total = sheet.getRows();
            //从第2行开始读取Excel
            for (int j = 2; j < row_total; j++) {

                Cell[] cells = sheet.getRow(j);
                //封装到pojo
                User user = new User();
                *//*user.setId(Integer.parseInt(cells[0].getContents()));
                user.setName(cells[1].getContents());
                user.setUsername(cells[2].getContents());
                user.setPassword(Integer.parseInt(cells[3].getContents()));*//*

                list.add(user);

                *//*System.out.print(cells[0].getContents());
                System.out.print(cells[1].getContents());
                System.out.print(cells[2].getContents());*//*
                System.out.println(user);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (BiffException e) {
            e.printStackTrace();
        }
        return list;
    }*/
}

 main方法执行

关于打jar包的坑://打成jar包运行时,getFile()方法获取不到jar包里文件路径

package com.ydfind.demo.springtimer;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.support.FileSystemXmlApplicationContext;


public class MyQuartzMainApp {
    private static Logger logger = LoggerFactory.getLogger(MyQuartzMainApp.class);
    public static void main(String[] args){
        try{
            //打成jar包运行时,getFile()方法获取不到jar包里文件路径
            //new ClassPathXmlApplicationContext("classpath:quartz_period.xml");
            new FileSystemXmlApplicationContext(ClassLoader.getSystemResource("quartz_period.xml").getFile());

        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

 

posted @ 2020-12-22 15:47  龙流笔记  阅读(246)  评论(0)    收藏  举报