zoukankan      html  css  js  c++  java
  • 工作总结

    一、项目配置及启动
    1、启动dp工程需要注意事项:
        Project:xxx
        Main class:com.cn.MainProcess
    
        Arguments:
        Program arguments:
        -cwap_process_hooks cwapJettyProcessHook,com.cn.Hook
        VM arguments:-Xms512M -Xmx1024M -XX:MaxPermSize=1024M
        other:${workspace_loc:xxx/target/xxx-1.0.0.0/lib}
    2、自动化测试工具的配置:
       Main
        Project:simulators-dep-instnauth
        Main class:com.ebs.automationtools.simulatorcommon.engine.SimulatorsManager
        Arguments
        Program arguments:
        1 1 D:	estReport
        VM arguments:-DUSE_SYNC_DELAY=true -Dtt_home=D:	estReport	arget
    3、tomcat容器+eclipse工具启动dw工程注意点:
       1> 工程本身clean,install,容器的clean.
       2> timeouts超时时间配置,pom中检查是否存在一个构件多个版本。
    二、J2ee技术点
        批量处理:
        public void batchInsert(final List<Object> vv) {
            final TsJdbcTemplate jsts = TsJdbcSingletonProvider.get().getTsJdbcTemplateByTable("xxx", "table");
            jsts.execute(new TransactionCallbackWithoutResult() {
                @Override
                protected void doInTransactionWithoutResult(TransactionStatus status) {
                    StringBuffer sb = new StringBuffer();
                    sb.append("INSERT INTO table");
                    sb.append("(SR_NO_ID, xxx, xxx, LGN_MTHD, xxx, xxx, xxx, xxx, xxx, CRT_TM, CRTR, UPDTR, UPD_TM)");
                    sb.append("VALUES(TSDEV.SEQ_xxx.NEXTVAL,?,?,?,?,?,?,?,?,?,?,?,?,?)");
                    List<Object[]> param = new ArrayList<Object[]>();
                    for (Object vv: vv) {
                        Object[] arrays = new Object[13];
                        arrays[0] = vv.getUserCode();
                        arrays[1] = vv.getAgencyUserCode();
                        arrays[2] = vv.getLoginMode();
                        arrays[3] = vv.getLoginEncryptInfo();
                        arrays[4] = vv.getGroupCode();
                        arrays[5] = vv.getInstnCode();
                        arrays[6] = vv.getCfetsInstnCode();
                        arrays[7] = vv.getLoginTime();
                        arrays[8] = vv.getLoginIp();
                        arrays[9] = vv.getCreateTime();
                        arrays[10] = "xxx";
                        arrays[11] = "xxx";
                        arrays[12] = new Date();
                        param.add(arrays);
                    }
                    jsts.batchUpdate(sb.toString(), param);//批量增删改
                }
            });
        }
        
        1、事物应用:TransactionTemplate(不需要显式开始事物,甚至不需要显式提交事物,模板完成;异常时通过setRollbackOnly显式回滚事物), TransactionCallbackWithoutResult
        final TsJdbcTemplate tsjt = TsJdbcSingletonProvider.get()
                                   .getTsJdbcTemplateByTable("xxx", "table1", "table2");
                tsjt.execute(new TransactionCallbackWithoutResult() {
                    @Override
                    protected void doInTransactionWithoutResult(TransactionStatus status) {
                        tsjt.update(insertSql,
                                new Object[] {userCode,
                                offlineUser.getAgencyUserCode(), offlineUser.getLoginMode(),
                                offlineUser.getLoginEncryptInfo(), offlineUser.getGroupCode(),
                                offlineUser.getInstnCode(), offlineUser.getCfetsInstnCode(),
                                new Date(), offlineUser.getLoginIp(), new Date(),
                                "xxx", "xxx", new Date() });
                        
                        tsjt.update(deleteSql, new Object[] {userCode, token});
                    }
                });
                
        2、spring:query使用
        List<Object> query = TsJdbcSingletonProvider.get().getTsJdbcTemplateByTable("xxx", "table")
                    .query(sql, new Object[] { userCode, loginMethod }, new RowMapper<Object>() {
                        @Override
                        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
                            Object vo = new Object();
                            vo.setUserCode(rs.getString("xxx"));
                            vo.setAgencyUserCode(rs.getString("xxx"));
                            vo.setLoginMode(rs.getString("LGN_MTHD"));
                            vo.setLoginEncryptInfo(rs.getString("xxx"));
                            vo.setGroupCode(rs.getString("xxx"));
                            vo.setInstnCode(rs.getString("INSTN_CD"));
                            vo.setCfetsInstnCode(rs.getString("xxx"));
                            vo.setLoginTime(rs.getDate("xxx"));
                            vo.setLoginIp(rs.getString("xxx"));
                            return vo;
                        }
                    });
            if (null != query && query.size() > 0) {
                return query.get(0);
                
                
        3、
        场景:RPC模式,上游(1:yes, 2: no) 下游(2:yes, 1:no)
        
        上游demo
        public static final Map<String, String> upMap = new HashMap<String, String>();
    
        static {
            methodMap.put("1", "2");
            methodMap.put("2", "1");
        }
        
        下游demo
        public static final Map<String, String> bottomMap = new HashMap<String, String>();
        
        static {
            bottomMap.put("2", "1");
            bottomMap.put("1", "2");
        }
        备注:如果只是单向映射,只需做一个即可
        4、工具类
        /**
         * 格式化日期的模型
         * 
         * 
         */
        private static String[] parseDatePatterns = {
            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm:ss.SSS", "yyyy-MM", 
            "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm:ss.SSS", "yyyy/MM",
            "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm:ss.SSS", "yyyy.MM"};
        
        
        public static Date parseDate(String str) {
            if (str == null) {
                return null;
            }
            try {
                return org.apache.commons.lang3.time.DateUtils.parseDate(str, parseDatePatterns);
            } catch (ParseException e) {
                logger.warn("parse date error", e);
                return null;
            }
        }
        =========================================================================================
       
        public static String formatDate(Date date, String partten) {
            if (date == null) {
                return null;
            }
            return DateFormatUtils.format(date, partten);
            //import org.apache.commons.lang.time.DateFormatUtils;
        }
        ==========================================================================================
        /**
         * parseDate
         * 传过来过去时时间,设置当前的时分秒,并返回JDateTime
         * @param date
         * @param partten
         * @return
         * @author liuhanlin 2017年7月25日
         * JDateTime:import jodd.datetime.JDateTime;
         */
        public static JDateTime parseDate(Date date) {
            if (date == null) {
                date = new Date();
            }
            JDateTime before = new JDateTime(date);
            JDateTime after = new JDateTime();
            after.setHour(before.getHour());
            after.setMinute(before.getMinute());
            after.setSecond(before.getSecond());
            return after;
        }
        ===========================================================================================
        /**
         * JDateTime to Date
         * 
         */
        public Date jDateTimeToDate(JDateTime dateTime){
            if(dateTime == null){
                return null;
            }
            return DateUtils.parseDate(dateTime.toString());
        }
        ===========================================================================================
        ===========================================================================================
        Object equals方法重写
    
        import org.apache.commons.lang3.builder.EqualsBuilder;
        import org.apache.commons.lang3.builder.HashCodeBuilder;
        import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
    
        import com.google.gson.Gson;
    
        public abstract class BaseBean implements Serializable {
    
        private static final long serialVersionUID = -7813614632590835438L;
    
        @Override
        public boolean equals(Object obj) {
            return EqualsBuilder.reflectionEquals(this, obj);
        }
    
        @Override
        public int hashCode() {
            return HashCodeBuilder.reflectionHashCode(this);
        }
    
        @Override
        public String toString() {
            return ReflectionToStringBuilder.toString(this);
        }
    
        public String toJson() {
            Gson gson = new Gson();
            return gson.toJson(this);
        }
    ·}
    
        
        
        
    三、理论
        1、集群:表达的是提升单位时间内的执行效率(是否搭建集群关键要看单机是否能够满足业务需求,对数据进行评估后的结果)
        2、分布式:缩短单个任务的执行时间
        3、HA常用三种工作方式
           1>主从方式:主机正常工作,备机监控主机状况,当主机宕机后,备机接管主机的一切负载,待主机恢复后,手动或者自动切换至主机运行
             数据的一致性通过共享存储系统解决
           2>双机双工方式:不存在主备说法,两台机器同时运行各自服务且互相监测,一台宕机后,另一个台立即接管它,应用服务系统的关键数据存放在共享存储系统中
           3>集群工作方式:多台主机一起工作,各自运行一个或多个服务;各为服务定义一个或多个备用主机,当某个主机故障时,运行在其上的服务就可以被其他主机接管
    
    四、Study
        Reflect API
        1、加载Class对象的两种方式:
           1> Class<?> c = Class.forName("xxx");
           2> ParamControlPO po =(ParamControlPO)Thread.currentThread().getContextClassLoader().loadClass("com.cn.bean.po.ParamControlPO").newInstance();
        2、oracle-sql
           1> order by 排序一般都是存在于select子句的末尾;其后面可以跟多个条件(首先按照第一个条件进行排序,若第一个条件为空则按照第二个条件排序,依次类推)
           2> between and:是个闭区间;表示>=between后面的值,<=and后面的值(前面加not 表示取反范围)
           3> 拼接:||
           4> NVL(表达式1,表达式2):如果表达式1的值null,则返回表达式2的值,否则返回表达式1的值
           5> group by: 分组查询,后面可以跟多个条件进行分组(切记select中的字段不可以单独出现,必须出现在group by子句或者组函数中)
           6> to_date(str, pattern), to_char(sysdate, pattern) 【pattern:yyyy-MM-dd hh24:mi:ss】
           7> concat(str1, str2):若str1位空,返回str2,否则返回拼接起来的值
           8> NOT EXISTS, EXISTS
              SELECT * FROM table WHERE  EXISTS(SELECT 1 FROM TSDEAL.table t WHERE t.PRDCT_CD IS NOT NULL);
           9> decode的几种用法
                   select empno,decode(empno,7369,'smith',7499,'allen',7521,'ward',7566,'jones','unknow') as name from emp where rownum<=10
  • 相关阅读:
    关于一个标准的poi下载文件模板 可拿来来直接使用
    关于史上最简单的导出(导出excal)
    关于spring MVC的面试题
    关于响应式布局(pc端访问自适应 手机端访问自适应)
    密码生成器
    关于poi的导出(POI)
    关于MUI一个很实用的前端框架
    (转载)插画版Kubernetes指南(小孩子也能看懂的kubernetes教程)
    (转载)Python tips: 什么是*args和**kwargs?
    python编程中的if __name__ == 'main': 的作用和原理
  • 原文地址:https://www.cnblogs.com/lhl-shubiao/p/9772119.html
Copyright © 2011-2022 走看看