diff --git a/src/main/java/com/hxjt/dataupload/DataUploadApplication.java b/src/main/java/com/hxjt/dataupload/DataUploadApplication.java index 88bc0c9..8f39384 100644 --- a/src/main/java/com/hxjt/dataupload/DataUploadApplication.java +++ b/src/main/java/com/hxjt/dataupload/DataUploadApplication.java @@ -2,9 +2,12 @@ package com.hxjt.dataupload; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication -//@ComponentScan({"net.xdclass.controller","net.xdclass.package2"}) +@EnableScheduling +@EnableAsync public class DataUploadApplication { public static void main(String[] args) { diff --git a/src/main/java/com/hxjt/dataupload/controller/VideoController.java b/src/main/java/com/hxjt/dataupload/controller/VideoController.java index 4b31919..f24acfa 100644 --- a/src/main/java/com/hxjt/dataupload/controller/VideoController.java +++ b/src/main/java/com/hxjt/dataupload/controller/VideoController.java @@ -1,38 +1,69 @@ package com.hxjt.dataupload.controller; +import com.hxjt.dataupload.task.AsyncTask; +import com.hxjt.dataupload.utils.JsonData; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; /** - * 视频控制器 + * liwenxuan */ - -//@Controller @RestController @RequestMapping("/api/v1/video") public class VideoController { - - +@Autowired +private AsyncTask asyncTask; @RequestMapping("list") - //@GetMapping("list") - //@PostMapping("list") - //@ResponseBody public Object list(){ Map map = new HashMap<>(); - map.put("1","面试专题课程"); - map.put("2","SpringCloud微服务课程"); + map.put("1","asdfdsa"); + map.put("2","S6543465"); return map; } + @GetMapping("async") + public JsonData testAsync(){ + long begin = System.currentTimeMillis(); + /*asyncTask.task1(); + asyncTask.task2(); + asyncTask.task3();*/ + Future task4 = asyncTask.task4(); + Future task5 = asyncTask.task5(); + for(;;){ + if(task4.isDone() && task5.isDone()){ + try { + String task4Result = task4.get(); + System.out.println(task4Result); + + String task5Result = task5.get(); + System.out.println(task5Result); + }catch (InterruptedException e){ + e.printStackTrace(); + }catch (ExecutionException e){ + e.printStackTrace(); + }finally { + break; + } + + } + } + + long end = System.currentTimeMillis(); + return JsonData.buildSuccess(end-begin); + } + } diff --git a/src/main/java/com/hxjt/dataupload/schedule/doubleprevention/VideoOrderTask.java b/src/main/java/com/hxjt/dataupload/schedule/doubleprevention/VideoOrderTask.java new file mode 100644 index 0000000..6e2269a --- /dev/null +++ b/src/main/java/com/hxjt/dataupload/schedule/doubleprevention/VideoOrderTask.java @@ -0,0 +1,15 @@ +package com.hxjt.dataupload.schedule.doubleprevention; + +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + + +@Component +public class VideoOrderTask { + @Scheduled(fixedRate = 500000) + public void sum(){ + System.out.println(LocalDateTime.now()+"当前交易额"+Math.random()); + } +} diff --git a/src/main/java/com/hxjt/dataupload/task/AsyncTask.java b/src/main/java/com/hxjt/dataupload/task/AsyncTask.java new file mode 100644 index 0000000..7b467d9 --- /dev/null +++ b/src/main/java/com/hxjt/dataupload/task/AsyncTask.java @@ -0,0 +1,56 @@ +package com.hxjt.dataupload.task; + +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.AsyncResult; +import org.springframework.stereotype.Component; + +import java.util.concurrent.Future; + +@Component +@Async +public class AsyncTask { + + public void task1(){ + try { + Thread.sleep(4000L); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("task 1"); + } + public void task2(){ + try { + Thread.sleep(4000L); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("task 2"); + } + public void task3(){ + try { + Thread.sleep(4000L); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("task 3"); + } + public Future task4(){ + try { + Thread.sleep(4000L); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("task 4"); + return new AsyncResult("task4"); + } + public Future task5(){ + try { + Thread.sleep(4000L); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("task 5"); + return new AsyncResult("task5"); + } + +} diff --git a/src/main/java/com/hxjt/dataupload/utils/HttpUtils.java b/src/main/java/com/hxjt/dataupload/utils/HttpUtils.java new file mode 100644 index 0000000..5c91898 --- /dev/null +++ b/src/main/java/com/hxjt/dataupload/utils/HttpUtils.java @@ -0,0 +1,248 @@ +package com.hxjt.dataupload.utils; + +import com.alibaba.fastjson.JSONObject; +import org.apache.http.ParseException; +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.BasicResponseHandler; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicHeader; +import org.apache.http.protocol.HTTP; +import org.apache.http.util.EntityUtils; +import org.apache.tomcat.util.http.fileupload.ByteArrayOutputStream; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; + +/** + * 工具类,用于发送get,post请求 + */ + +public class HttpUtils { + + + public static String doGet(String httpurl) { + HttpURLConnection connection = null; + InputStream is = null; + BufferedReader br = null; + String result = null;// 返回结果字符串 + try { + // 创建远程url连接对象 + URL url = new URL(httpurl); + // 通过远程url连接对象打开一个连接,强转成httpURLConnection类 + connection = (HttpURLConnection) url.openConnection(); + // 设置连接方式:get + connection.setRequestMethod("GET"); + // 设置连接主机服务器的超时时间:15000毫秒 + connection.setConnectTimeout(15000); + // 设置读取远程返回的数据时间:60000毫秒 + connection.setReadTimeout(60000); + // 发送请求 + connection.connect(); + // 通过connection连接,获取输入流 + if (connection.getResponseCode() == 200) { + is = connection.getInputStream(); + // 封装输入流is,并指定字符集 + br = new BufferedReader(new InputStreamReader(is, "UTF-8")); + // 存放数据 + StringBuffer sbf = new StringBuffer(); + String temp = null; + while ((temp = br.readLine()) != null) { + sbf.append(temp); + sbf.append("\r\n"); + } + result = sbf.toString(); + } + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + // 关闭资源 + if (null != br) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + if (null != is) { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + connection.disconnect();// 关闭远程连接 + } + + return result; + } + + public static String doPost(String url, String param) { + + String result = ""; + DataOutputStream dataOutputStreamSend = null; + InputStream inputStream = null; + ByteArrayOutputStream dataOutputStream = null; + try { + URL httpUrl = new URL(url); + HttpURLConnection urlConnection = (HttpURLConnection)httpUrl.openConnection(); + // 设置超时时间 + urlConnection.setConnectTimeout(10000); + urlConnection.setReadTimeout(30000); + + urlConnection.setRequestMethod("POST"); + // 设置通用请求类型 + urlConnection.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); + urlConnection.setRequestProperty("Charset", "UTF-8"); + // 设置链接状态 + urlConnection.setRequestProperty("connection", "keep-alive"); + + // post请求,参数要放在http正文内,因此需要设为true, 默认情况下是false; + urlConnection.setDoOutput(true); + // 设置是否从httpUrlConnection读入,默认情况下是true; + urlConnection.setDoInput(true); + // Post 请求不能使用缓存 + urlConnection.setUseCaches(false); + // 设置本次连接是否自动处理重定向 + urlConnection.setInstanceFollowRedirects(true); + + urlConnection.connect(); + // ++++++++++++++++++++++++++++++++++ + // TODO 写入参数 + dataOutputStreamSend = new DataOutputStream(urlConnection.getOutputStream()); + dataOutputStreamSend.write(param.getBytes()); + dataOutputStreamSend.flush(); + // +++++++++++++++++++++++++++++++ + if (urlConnection.getResponseCode() == 200) { + // 获取返回流 + result = getResult(urlConnection.getInputStream()); + } + } catch (IOException e) { + // url格式错误 + e.printStackTrace(); + } + return result; + } + + private static String getResult(InputStream inputStream) { + String result = ""; + ByteArrayOutputStream dataOutputStream = null; + try { + byte[] buf = new byte[1024]; + int n; + dataOutputStream = new ByteArrayOutputStream(); + + while (((n = inputStream.read(buf)) != -1)) { + dataOutputStream.write(buf, 0, n); + } + dataOutputStream.toByteArray(); + result = new String(dataOutputStream.toByteArray(), "UTF-8"); + } catch (IOException e) { + e.printStackTrace(); + } + return result; + } + + + /** + * post 发送数据 + */ + public static String sendPost(String message,String url) { + + String response = ""; + CloseableHttpClient httpClient = HttpClients.createDefault(); + ResponseHandler responseHandler = new BasicResponseHandler(); + try { + + // API地址 + httpClient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost(url); + + // 构建消息实体 + StringEntity requestEntity = new StringEntity(message, "utf-8"); + requestEntity.setContentEncoding("UTF-8"); + // 构造消息头 + // 发送Json格式的数据请求 + httpPost.setHeader("Content-type", "application/json"); + httpPost.setEntity(requestEntity); + //发送post请求获取响应值 + String returnValue = httpClient.execute(httpPost, responseHandler); + if (returnValue != null) { + response = returnValue; + } + } catch (Exception e) { + + System.err.println(e); + } finally { + try { + httpClient.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + System.err.println(e); + } + } + return response; + } + + + /** + * 发送post请求 + * @param url 路径 + * @param jsonObject 参数(json类型) + * @param encoding 编码格式 + * @return + * @throws ParseException + * @throws IOException + */ + public static String send(String url, JSONObject jsonObject, String encoding, String userKey, String userToken) throws ParseException, IOException{ + String body = ""; + //创建httpclient对象 + CloseableHttpClient client = HttpClients.createDefault(); + //创建post方式请求对象 + HttpPost httpPost = new HttpPost(url); + //装填参数 + StringEntity s = new StringEntity(jsonObject.toString(), "utf-8"); + s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, + "application/json")); + //设置参数到请求对象中 + httpPost.setEntity(s); + +// System.out.println("请求参数:"+nvps.toString()); + + //设置header信息 + //指定报文头【Content-type】、【User-Agent】 + httpPost.setHeader("Content-type", "application/json"); + httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); + httpPost.setHeader("user-token",userToken); + httpPost.setHeader("user-key",userKey); + System.out.println("请求地址:"+url); + System.out.println("请求Key:"+userKey); + System.out.println("请求token:"+userToken); + //执行请求操作,并拿到结果(同步阻塞) + CloseableHttpResponse response = client.execute(httpPost); + //获取结果实体 + org.apache.http.HttpEntity entity = response.getEntity(); + if (entity != null) { + //按指定编码转换结果实体为String类型 + body = EntityUtils.toString(entity, encoding); + } + EntityUtils.consume(entity); + //释放链接 + response.close(); + return body; + } + + + + + +} \ No newline at end of file diff --git a/src/main/java/com/hxjt/dataupload/utils/JsonData.java b/src/main/java/com/hxjt/dataupload/utils/JsonData.java new file mode 100644 index 0000000..3ff907d --- /dev/null +++ b/src/main/java/com/hxjt/dataupload/utils/JsonData.java @@ -0,0 +1,91 @@ +package com.hxjt.dataupload.utils; + +public class JsonData { + + /** + * 状态码 0表示成功过,1表示处理中,-1 表示失败 + */ + private Integer code; + /** + * 信息表示 + */ + private String msg; + /** + * 业务数据 + */ + private Object data; + + + + public JsonData(){} + + public JsonData(Integer code, Object data, String msg){ + this.code = code; + this.data = data; + this.msg = msg; + } + + + /** + * 成功,不用返回数据 + * @return + */ + public static com.hxjt.dataupload.utils.JsonData buildSuccess(){ + return new com.hxjt.dataupload.utils.JsonData(0,null,null); + } + + /** + * 成功,返回数据 + * @param data + * @return + */ + public static com.hxjt.dataupload.utils.JsonData buildSuccess(Object data){ + return new com.hxjt.dataupload.utils.JsonData(0,data,null); + } + + + /** + * 失败,固定状态码 + * @param msg + * @return + */ + public static com.hxjt.dataupload.utils.JsonData buildError(String msg){ + return new com.hxjt.dataupload.utils.JsonData(1 ,null,msg); + } + + + /** + * 失败,自定义错误码和信息 + * @param code + * @param msg + * @return + */ + public static com.hxjt.dataupload.utils.JsonData buildError(Integer code , String msg){ + return new com.hxjt.dataupload.utils.JsonData(code ,null,msg); + } + + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } +}