同步外部接口数据的一些记录和分享

https://blog.csdn.net/jsnhux/article/details/80116921

https://blog.csdn.net/jsnhux/article/details/80116921

同步外部接口数据的一些记录和分享

灵葱 2018-04-28 10:03:49  2086  收藏 1
展开
1、spring boot之定时器任务
@Component
public class JobScheduler {

    protected final static Logger logger = LoggerFactory.getLogger(JobScheduler.class);

    @Autowired
    private IResponsionService responsionService;

    //每天凌晨两点执行
    @Scheduled(cron = "0 0 2 * * ?")
    //@Scheduled(cron="0/10 * *  * * ? ")//每10秒执行一次
    public void checkUserLoginStatus() {
        logger.info("定时任务开始......");
        long begin = System.currentTimeMillis();
        try{
            int falg = responsionService.updateCloseJobOrder();
        }catch (Exception e){
            logger.error(e.getMessage());
        }
        long end = System.currentTimeMillis();
        logger.info("定时任务结束,共耗时:[" + (end-begin) / 1000 + "]秒");
    }
}
 
2、OKHttp请求接口数据
 OkHttpClient client = new OkHttpClient();//创建OkHttpClient对象。

        FormBody.Builder formBody = new FormBody.Builder();//创建表单请求体

        formBody.add("username","zhangsan");//传递键值对参数


        Request request = new Request.Builder()//创建Request 对象。
                .url("http://www.baidu.com")
                .post(formBody.build())//传递请求体
                .build();

        try{
            Response response = client.newCall(request).execute();

            if (response.isSuccessful()) {
                String msg = response.body().string();
                System.out.println(msg);
            } else {
                System.out.println("连接服务器失败返回错误代码" + response.code());
            }
        }catch(Exception e){

        }
 
在调用外部接口获取数据的时候,用于接受数据的参数类型(dto的属性)最好简单一点,简单不易出错的类型一般有:Long,Integer,String等,一些“偏僻”的类型例如Byte,BigDecimal,LocalDateTime,Date等必要的时候(如果不是经常参与运算,只是用来数据的展示等)用String类接收,这样能避免通过Json对象转Java对象的时候出现问题。
下面写一下Json字符串转java对象:

String msg = response.body().string();  //msg是符合json格式的字符串
ReciveResultDTO resultDTO=JSON.parseObject(msg,ReciveResultDTO.class); 
1
2
注意:这里用的JSON是阿里巴巴的 com.alibaba.fastjson.JSON
maven引入fastjson的配置:

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>fastjson</artifactId>
   <version>1.2.32</version>
</dependency>
1
2
3
4
5
3、数据源的使用
数据源的切换:

//用法1:
//使用@DataSource注解在方法级别切换数据源(推荐)

@DataSource(DataSourceNames.WDS_INFO)
public int getCountUnReadBycid(MessageInfoDTO messageInfoDTO){
    return   messageDAO.getCountByUnread(messageInfoDTO);
}
//@DataSource配置的数据源有效范围在本方法内, 就是本方法内无论调用多少次DAO查询都会使用该数据源.

//@DataSource注解只能加在Service方法上, 加在DAO上是无效的.

//在Service方法内调用本实例的其他方法, 将导致其他方法的@DataSource配置失效. 例如:

@DataSource(DataSourceNames.WDS_INFO)
public void method1(MessageInfoDTO messageInfoDTO){
    //此处使用数据源WDS_INFO
    messageDAO.getCountByUnread(messageInfoDTO);
    //调用method2不会使用数据源RDS_COMMON
    method2();
}

@DataSource(DataSourceNames.RDS_COMMON)
public void method2(){
    readDAO.readSomething();
}
/**因为在method1方法内部调用method2, 导致AOP失效, @DataSource注解不会被读取, 所以method2执行的时候依然使用WDS_INFO数据源. 这种情况需要用到下面的手动切换数据源.*/


//用法2:
/**手动切换数据源(不推荐)
手动切换数据源需要考虑数据源的作用范围以及回收, 如果使用不慎很容易出现BUG, 所以推荐使用DataSource注解的方式切换数据源*/

try {
    DataSourceHolder.putDataSource(DataSourceNames.RDS_COMMON);
    //do your work
} finally {
    DataSourceHolder.removeDataSource(DataSourceNames.RDS_COMMON);
}

/**调用DataSourceHolder.putDataSource切换到你想设置的数据源
此时可以发起DAO调用, 无论调用多少次, 都会使用你手动设置的数据源.
如果发起对其他Service的调用, 而且Service方法上有@DataSource注解, 则在Service方法范围内会使用该注解配置的数据源, 调用完成会退回成你手动设置的数据源.
手动设置数据源的话, 大部分情况下需要在finally块中删除你设置的数据源, 以免对后面代码的数据源产生影响.*/
 
4、Mybatis 批量插入数据
Dao:

//批量同步来电通话记录
Integer batchInsertInRecords(List<CallRecordDTO> list);
1
2
Xml:

<insert id="batchInsertInRecords">
    INSERT INTO t_call_record_tr(
        in_id,unique_id,combo_cost,
        ...
    ) VALUES
    <foreach collection="list" item="item" index="index" separator="," >
        <trim prefix="(" suffix=")">
            #{item.id},#{item.unique_id},
            <choose>
                <when test="item.combo_cost != null and item.combo_cost !=''">
                    #{item.combo_cost},
                </when>
                <otherwise>
                    '',
                </otherwise>
            </choose>
            ...
        </trim>
    </foreach>
</insert>
 

————————————————
版权声明:本文为CSDN博主「灵葱」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jsnhux/article/details/80116921

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值