• 28:----------------spring 定时任务 scheduled


    1.配置spring.xml

    openRateScheduledService :定时任务类
    cron="0 49 12 * * ?" :时间设置
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:task="http://www.springframework.org/schema/task" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">
    
    <task:executor id="taskExecutor" pool-size="10" />
    
    <task:scheduled-tasks >
    <task:scheduled ref="openRateScheduledService" method="doTask" cron="0 49 12 * * ?"/>
    </task:scheduled-tasks>
    
    </beans>

    2.配置web.xml

    classpath:spring/applicationContext-quartz.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>dapail</display-name>
    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/classes/spring/applicationContext-*.xml</param-value>
    </context-param>
    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    classpath:spring/applicationContext-core-spec.xml
    classpath:spring/applicationContext-quartz.xml
    classpath:spring/applicationContext-dao.xml
    classpath:spring/applicationContext-service.xml
    classpath:spring/applicationContext-transaction.xml
    classpath:spring/applicationContext-redis.xml
    </param-value>
    </context-param>
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/mvc-dispatcher.xml</param-value>
    </init-param>
    </servlet>
    <servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>*.action</url-pattern>
    </servlet-mapping>
    <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    
    <context-param>
    <param-name>spring.profiles.active</param-name>
    <param-value>dev</param-value>
    </context-param>
    <context-param>
    <param-name>spring.profiles.default</param-name>
    <param-value>dev</param-value>
    </context-param>
    <context-param>
    <param-name>spring.liveBeansView.mbeanDomain</param-name>
    <param-value>dev</param-value>
    </context-param>
    </web-app>

    3.Java

    package com.dapail.manager.service.task;
    
    import java.math.BigDecimal;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.dapail.common.IResult;
    import com.dapail.common.ResultData;
    import com.dapail.manager.cache.CmdCache;
    import com.dapail.manager.mapper.WorkerMapper;
    import com.dapail.util.MLogger;
    
    /**
     * 开机率统计
     * 
     * @author Administrator
     *
     */
    @Service
    public class OpenRateScheduledService {
    
        // 指令
        @Autowired
        private CmdCache cmdCache;
    
        @Autowired
        private WorkerMapper workerMapper;
    
        // 每天凌晨两点执行 记录所有账户 上一天的机器使用率
        public void doTask() {
            long begin = System.currentTimeMillis();
            MLogger.info("/" + begin + "t_stats_open_rate start");
            // 往前推一天
            Calendar c1 = Calendar.getInstance();
            int paDay = c1.get(Calendar.DATE);
            c1.set(Calendar.DATE, paDay - 1);
            String daytime = new SimpleDateFormat("yyyyMMdd").format(c1.getTime());
            String cmdKey = daytime;
            // 循环账户 t_ratio
            List<Object> acc = workerMapper.getAccountList();
            IResult accRes = new ResultData(acc);
            for (int i = 0; i < accRes.size(); i++) {
                // 账户类别
                String account_type = accRes.get(i).get("ACCOUNT_TYPE").toString();
    
                // 账户id
                String account_id = accRes.get(i).get("ACCOUNT_ID").toString();
                // 账户下机器列表
                List<Object> maAccList = workerMapper.getRatioByAccId(account_id);
                IResult maAccIR = new ResultData(maAccList);
                
                // 名下所有机器
                int accAllNum = maAccIR.size();
                // 当日开机率
                String openPercent = "0";
                
                if (maAccIR.size()>0) {
                    String[] machineId = new String[maAccIR.size()];
                    // 账户下机器列表
                    for (int j = 0; j < maAccIR.size(); j++) {
                        // 机器id
                        machineId[j] = maAccIR.get(j).get("MACHINE_ID").toString();
                    }
                    MLogger.info("/机器列表:t_stats_open_rate start+machineId:" + machineId + "");
                    
    
                    // 当日 机器数加1
                    List<String> ma = cmdCache.getMaOpenTime(cmdKey, machineId);
                    int maOpenNum = 0;
                    for (int j = 0; j < ma.size(); j++) {
                        if (ma.get(j) != null && ma.get(j).equals("")) {
                            maOpenNum = maOpenNum + 1;
                        }
                    }
                    BigDecimal maOpenNumb1 = new BigDecimal(String.valueOf(maOpenNum));
                    BigDecimal accAllNumb2 = new BigDecimal(String.valueOf(accAllNum));
                    // 小数点保留0位
                    openPercent = String.format("%.0f",
                            maOpenNumb1.divide(accAllNumb2, 2, BigDecimal.ROUND_HALF_UP).doubleValue() * 100);
                }
                
                
                
    
                Map<String, Object> map = new HashMap<String, Object>();
    
                // 经销商
                if (account_type.equals("3")) {
                    account_type = "2";
                }
                // 棋牌室
                if (account_type.equals("2")) {
                    account_type = "1";
                }
    
                map.put("other_id", account_id);
                map.put("type", account_type);
                map.put("open_time", daytime);
                map.put("open_rate", openPercent);
                map.put("open_details", "");
                map.put("timestamps", System.currentTimeMillis() / 1000);
                // 插入一条
                MLogger.info("/插入一条:t_stats_open_rate start+account_id:" + account_id + "+account_type:" + account_type
                        + "+daytime:" + daytime + "+openPercent:" + openPercent + "");
                workerMapper.insertStateOpen(map);
    
            }
            // 执行数据库操作了哦...
            long end = System.currentTimeMillis();
            MLogger.info("/" + end + "t_stats_open_rate start");
        }
    }
  • 相关阅读:
    BZOJ 3514 Codechef MARCH14 GERALD07加强版
    WT
    Codeforces 348
    POI 2010
    Codeforces 336
    MVC实例及用三层架构实现对学生信息的增删改查
    欠拟合和过拟合
    线性回归案例
    梯度下降法介绍
    线性回归的损失函数和梯度下降
  • 原文地址:https://www.cnblogs.com/coriander/p/7170111.html
Copyright © 2020-2023  润新知