同步外部接口数据的一些记录和分享
https://blog.csdn.net/jsnhux/article/details/80116921
https://blog.csdn.net/jsnhux/article/details/80116921
同步外部接口數(shù)據(jù)的一些記錄和分享
靈蔥 2018-04-28 10:03:49 ?2086 ?收藏 1
展開
1、spring boot之定時器任務(wù)
@Component
public class JobScheduler {
? ? protected final static Logger logger = LoggerFactory.getLogger(JobScheduler.class);
? ? @Autowired
? ? private IResponsionService responsionService;
? ? //每天凌晨兩點執(zhí)行
? ? @Scheduled(cron = "0 0 2 * * ?")
? ? //@Scheduled(cron="0/10 * * ?* * ? ")//每10秒執(zhí)行一次
? ? public void checkUserLoginStatus() {
? ? ? ? logger.info("定時任務(wù)開始......");
? ? ? ? long begin = System.currentTimeMillis();
? ? ? ? try{
? ? ? ? ? ? int falg = responsionService.updateCloseJobOrder();
? ? ? ? }catch (Exception e){
? ? ? ? ? ? logger.error(e.getMessage());
? ? ? ? }
? ? ? ? long end = System.currentTimeMillis();
? ? ? ? logger.info("定時任務(wù)結(jié)束,共耗時:[" + (end-begin) / 1000 + "]秒");
? ? }
}
?
2、OKHttp請求接口數(shù)據(jù)
?OkHttpClient client = new OkHttpClient();//創(chuàng)建OkHttpClient對象。
? ? ? ? FormBody.Builder formBody = new FormBody.Builder();//創(chuàng)建表單請求體
? ? ? ? formBody.add("username","zhangsan");//傳遞鍵值對參數(shù)
? ? ? ? Request request = new Request.Builder()//創(chuàng)建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("連接服務(wù)器失敗返回錯誤代碼" + response.code());
? ? ? ? ? ? }
? ? ? ? }catch(Exception e){
? ? ? ? }
?
在調(diào)用外部接口獲取數(shù)據(jù)的時候,用于接受數(shù)據(jù)的參數(shù)類型(dto的屬性)最好簡單一點,簡單不易出錯的類型一般有:Long,Integer,String等,一些“偏僻”的類型例如Byte,BigDecimal,LocalDateTime,Date等必要的時候(如果不是經(jīng)常參與運算,只是用來數(shù)據(jù)的展示等)用String類接收,這樣能避免通過Json對象轉(zhuǎn)Java對象的時候出現(xiàn)問題。
下面寫一下Json字符串轉(zhuǎn)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、數(shù)據(jù)源的使用
數(shù)據(jù)源的切換:
//用法1:
//使用@DataSource注解在方法級別切換數(shù)據(jù)源(推薦)
@DataSource(DataSourceNames.WDS_INFO)
public int getCountUnReadBycid(MessageInfoDTO messageInfoDTO){
? ? return ? messageDAO.getCountByUnread(messageInfoDTO);
}
//@DataSource配置的數(shù)據(jù)源有效范圍在本方法內(nèi), 就是本方法內(nèi)無論調(diào)用多少次DAO查詢都會使用該數(shù)據(jù)源.
//@DataSource注解只能加在Service方法上, 加在DAO上是無效的.
//在Service方法內(nèi)調(diào)用本實例的其他方法, 將導(dǎo)致其他方法的@DataSource配置失效. 例如:
@DataSource(DataSourceNames.WDS_INFO)
public void method1(MessageInfoDTO messageInfoDTO){
? ? //此處使用數(shù)據(jù)源WDS_INFO
? ? messageDAO.getCountByUnread(messageInfoDTO);
? ? //調(diào)用method2不會使用數(shù)據(jù)源RDS_COMMON
? ? method2();
}
@DataSource(DataSourceNames.RDS_COMMON)
public void method2(){
? ? readDAO.readSomething();
}
/**因為在method1方法內(nèi)部調(diào)用method2, 導(dǎo)致AOP失效, @DataSource注解不會被讀取, 所以method2執(zhí)行的時候依然使用WDS_INFO數(shù)據(jù)源. 這種情況需要用到下面的手動切換數(shù)據(jù)源.*/
//用法2:
/**手動切換數(shù)據(jù)源(不推薦)
手動切換數(shù)據(jù)源需要考慮數(shù)據(jù)源的作用范圍以及回收, 如果使用不慎很容易出現(xiàn)BUG, 所以推薦使用DataSource注解的方式切換數(shù)據(jù)源*/
try {
? ? DataSourceHolder.putDataSource(DataSourceNames.RDS_COMMON);
? ? //do your work
} finally {
? ? DataSourceHolder.removeDataSource(DataSourceNames.RDS_COMMON);
}
/**調(diào)用DataSourceHolder.putDataSource切換到你想設(shè)置的數(shù)據(jù)源
此時可以發(fā)起DAO調(diào)用, 無論調(diào)用多少次, 都會使用你手動設(shè)置的數(shù)據(jù)源.
如果發(fā)起對其他Service的調(diào)用, 而且Service方法上有@DataSource注解, 則在Service方法范圍內(nèi)會使用該注解配置的數(shù)據(jù)源, 調(diào)用完成會退回成你手動設(shè)置的數(shù)據(jù)源.
手動設(shè)置數(shù)據(jù)源的話, 大部分情況下需要在finally塊中刪除你設(shè)置的數(shù)據(jù)源, 以免對后面代碼的數(shù)據(jù)源產(chǎn)生影響.*/
?
4、Mybatis 批量插入數(shù)據(jù)
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>
?
————————————————
版權(quán)聲明:本文為CSDN博主「靈蔥」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/jsnhux/article/details/80116921
總結(jié)
以上是生活随笔為你收集整理的同步外部接口数据的一些记录和分享的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美团外卖折扣设置技巧(美团外卖商家怎样设
- 下一篇: IP暴露接口IP白名单设置