日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/3 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 同步外部接口数据的一些记录和分享 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

總結

以上是生活随笔為你收集整理的同步外部接口数据的一些记录和分享的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。