Linux下定时执行java程序,调用api获取黄金实时价格

1. 准备获取纸黄金数据的api,配置Linux下的jdk环境

在这里插入图片描述
这里jdk的环境配置不是重点,不做介绍,请参考本人另一教程。
linux安装jdk,并配置java环境变量

2.编写java程序代码

2.1 建立java项目

java项目的建立,代码的编写均在Windows 10 下进行,使用得IDE是idea。如图所示,接下来的操作一路next即可,里不再赘述。在这里插入图片描述

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

在这里插入图片描述
再选择file,点击project structure (或者快捷键Ctrl+Alt+Shift+S),打开如下;添加刚才建立的lib目录为jar包存放位置。在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
配置好后,将json解析的包放到lib中(文末有链接)在这里插入图片描述

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请求

}

运行结果如下
在这里插入图片描述

3.代码打包

接下来将代码打成jar包(包含第三方包),同样打开project structure,添加自己的项目

在这里插入图片描述在这里插入图片描述
点击apply,然后开始打包,选择Build,找到Build Artifacts,然后build打包
在这里插入图片描述在这里插入图片描述
得到的jar包的存储位置:在这里插入图片描述

看见该目录下有两个jar包,一个是项目,一个是第三方依赖(json解析的一个包)在这里插入图片描述

4.linux中部署定时任务,执行java程序

将上面得到的两个jar包导入Ubuntu中。(记住这两个jar保存放的位置)
在这里插入图片描述
下面进行定时任务设置,crontab –e进行设置,(前提是已经安装crontab,具体步骤这里不做介绍请参看本人另一教程)这篇文章中有大量篇幅讲述cron定时任务的用法
教你如何使用Linux中的curl神器定时爬取数据并批量发到别人邮箱
在这里插入图片描述
在这里插入图片描述

28 21 * * *  /usr/java/jdk1.8.0_241/bin/java -jar /home/lk/Downloads/javaPojs/JavaPro_jar/JavaPro.jar > /home/lk/1.txt

解释一下上面的代码

28 21 * * *   #这一部分表示每天21:28的时候执行后面的命令
/usr/java/jdk1.8.0_241/bin/   #这个是自己的jdk的绝对路径
java -jar /home/lk/Downloads/javaPojs/JavaPro_jar/JavaPro.jar #是运行jar包的命令;中间的路径是该jar报的绝对路径
> /home/lk/1.txt   #表示将输出结果写入/home/lk/目录下的1.txt文件中

最后,开启cron服务;
命令:sudo service cron start
然后可以查看执行情况。
在这里插入图片描述
上面显示已经执行。我们可以回到目标位置,发现1.txt中确有我们需要的数据

在这里插入图片描述

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是lk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值