天天看點

Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼

目錄

  • 1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境
  • 2.編寫java程式代碼
    • 2.1 建立java項目
    • 2.2 建立lib目錄,指定jar存放位置
    • 2.3 編寫調用api的代碼
    • 2.4 JSONObject解析擷取的json資料
    • 2.5 main方法中調用并執行程式
  • 3.代碼打包
  • 4.linux中部署定時任務,執行java程式
  • 5.最後,附上java源碼

1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境

Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼

這裡jdk的環境配置不是重點,不做介紹,請參考本人另一教程。

linux安裝jdk,并配置java環境變量

2.編寫java程式代碼

2.1 建立java項目

java項目的建立,代碼的編寫均在Windows 10 下進行,使用得IDE是idea。如圖所示,接下來的操作一路next即可,裡不再贅述。

Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼

2.2 建立lib目錄,指定jar存放位置

Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼

再選擇file,點選project structure (或者快捷鍵Ctrl+Alt+Shift+S),打開如下;添加剛才建立的lib目錄為jar包存放位置。

Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼
Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼
Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼
Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼

配置好後,将json解析的包放到lib中(文末有連結)

Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼

2.3 編寫調用api的代碼

public static void interfaceUtil(String path) {
        try {
            URL url = new URL(path);
            //打開和url之間的連接配接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");//GET和POST必須全大寫
            conn.connect();
            //擷取URLConnection對象對應的輸入流
            InputStream is = conn.getInputStream();
            //構造一個字元流緩存
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String str = new String(br.readLine().getBytes(), "UTF-8");//解決中文亂碼問題
           
           /*
           *
           *這裡是對得到的json字元串進行解析,下一點有介紹
           *
           */

            //關閉流
            is.close();
            //斷開連接配接
            conn.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
           

2.4 JSONObject解析擷取的json資料

try {
                JSONArray jsonArray = new JSONObject(str).getJSONArray("result");
                JSONObject jsonObject1 = (JSONObject) jsonArray.get(0);
                String variety = (String) jsonObject1.getJSONObject("2").get("variety");//名稱
                String maxpri = (String) jsonObject1.getJSONObject("2").get("maxpri");//最高價
                String minpri = (String) jsonObject1.getJSONObject("2").get("minpri");//最低價
                String quantpri = (String) jsonObject1.getJSONObject("2").get("quantpri");//漲跌幅
                String time = (String) jsonObject1.getJSONObject("2").get("time");//更新時間
                String gold = "品種: " + variety + " 最高價: " + maxpri + " 最低價: " + minpri + " 漲跌幅: " + quantpri + " 更新時間: " + time;
                System.out.println(gold);
            } catch (JSONException e) {
                e.printStackTrace();
            }
           

2.5 main方法中調用并執行程式

public static void main(String[] args) {

    interfaceUtil("http://web.juhe.cn:8080/finance/gold/bankgold?key=f088a42235385bf15fe7a118ad1fa38d");//get請求

}
           

運作結果如下

Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼

3.代碼打包

接下來将代碼打成jar包(包含第三方包),同樣打開project structure,添加自己的項目

Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼
Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼

點選apply,然後開始打包,選擇Build,找到Build Artifacts,然後build打包

Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼
Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼

得到的jar包的存儲位置:

Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼

看見該目錄下有兩個jar包,一個是項目,一個是第三方依賴(json解析的一個包)

Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼

4.linux中部署定時任務,執行java程式

将上面得到的兩個jar包導入Ubuntu中。(記住這兩個jar儲存放的位置)

Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼

下面進行定時任務設定,crontab –e進行設定,(前提是已經安裝crontab,具體步驟這裡不做介紹請參看本人另一教程)這篇文章中有大量篇幅講述cron定時任務的用法

教你如何使用Linux中的curl神器定時爬取資料并批量發到别人郵箱

Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼
Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼
28 21 * * *  /usr/java/jdk1.8.0_241/bin/java -jar /home/lk/Downloads/javaPojs/JavaPro_jar/JavaPro.jar > /home/lk/1.txt
           

解釋一下上面的代碼

最後,開啟cron服務;

指令:

sudo service cron start

然後可以檢視執行情況。

Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼

上面顯示已經執行。我們可以回到目标位置,發現1.txt中确有我們需要的資料

Linux下定時執行java程式,調用api擷取黃金實時價格1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境2.編寫java程式代碼3.代碼打包4.linux中部署定時任務,執行java程式5.最後,附上java源碼

5.最後,附上java源碼

以及完整項目打包好的jar包,以及json包的連結

package com;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * @author lk
 * @date 2020/4/17 0016 15:19
 * @description:
 */
public class GoldApi {

    public static void interfaceUtil(String path) {
        try {
            URL url = new URL(path);
            //打開和url之間的連接配接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");//GET和POST必須全大寫
            conn.connect();
            //擷取URLConnection對象對應的輸入流
            InputStream is = conn.getInputStream();
            //構造一個字元流緩存
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String str = new String(br.readLine().getBytes(), "UTF-8");//解決中文亂碼問題
            try {
                JSONArray jsonArray = new JSONObject(str).getJSONArray("result");
                JSONObject jsonObject1 = (JSONObject) jsonArray.get(0);
                String variety = (String) jsonObject1.getJSONObject("2").get("variety");//名稱
                String maxpri = (String) jsonObject1.getJSONObject("2").get("maxpri");//最高價
                String minpri = (String) jsonObject1.getJSONObject("2").get("minpri");//最低價
                String quantpri = (String) jsonObject1.getJSONObject("2").get("quantpri");//漲跌幅
                String time = (String) jsonObject1.getJSONObject("2").get("time");//更新時間
                String gold = "品種: " + variety + " 最高價: " + maxpri + " 最低價: " + minpri + " 漲跌幅: " + quantpri + " 更新時間: " + time;
                System.out.println(gold);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            //關閉流
            is.close();
            //斷開連接配接
            conn.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        interfaceUtil("http://web.juhe.cn:8080/finance/gold/bankgold?key=f088a42235385bf15fe7a118ad1fa38d");//get請求
    }
}

           

完整項目連結:

連結:https://pan.baidu.com/s/1moTiK416x22NsjZcKmSrTw

提取碼:d3w2