工作总结

一、项目配置及启动
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
原文地址:https://www.cnblogs.com/lhl-shubiao/p/9772119.html