From 87f31cee183db65f68c4696ac206acb5e947a3e6 Mon Sep 17 00:00:00 2001 From: "WIN-GO9R0BBSA6U\\Administrator" Date: Mon, 19 May 2025 16:12:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BC=82=E6=AD=A5=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 9 +- README.md | 5 + .../AdminClientTemperatureApplication.java | 4 +- .../controller/JdbcDemoController.java | 131 ++++++++++++------ .../entity/Temperature.java | 5 +- .../entity/WebServiceProvince.java | 1 + .../entity/WebServiceWeatherInfo.java | 1 + .../service/impl/TemperatureServiceImpl.java | 2 +- src/main/resources/application.yml | 6 +- 9 files changed, 106 insertions(+), 58 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index cf8f1f6..f259f61 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -6,17 +6,13 @@ + + - - - - - - diff --git a/README.md b/README.md index 1357167..b0d7bab 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,10 @@ # admin-client-temperature +java CompletableFuture异步回调: +https://blog.csdn.net/n0430/article/details/147880286 + + + # Spring-axis #### 介绍 diff --git a/src/main/java/com/rehome/mqttclienttemperature/AdminClientTemperatureApplication.java b/src/main/java/com/rehome/mqttclienttemperature/AdminClientTemperatureApplication.java index 3ac2551..02d2a4b 100644 --- a/src/main/java/com/rehome/mqttclienttemperature/AdminClientTemperatureApplication.java +++ b/src/main/java/com/rehome/mqttclienttemperature/AdminClientTemperatureApplication.java @@ -58,11 +58,11 @@ public class AdminClientTemperatureApplication extends SpringBootServletInitiali try { if (temperatureService != null) { System.out.println("------------------------"); - System.out.println("UseryfController is not empty"); + System.out.println("TemperatureController is not empty"); MqttRSAClient client = new MqttRSAClient(); client.start(temperatureService); } else { - System.out.println("UseryfController is empty"); + System.out.println("TemperatureController is empty"); } } catch (Exception ex) { ex.printStackTrace(); diff --git a/src/main/java/com/rehome/mqttclienttemperature/controller/JdbcDemoController.java b/src/main/java/com/rehome/mqttclienttemperature/controller/JdbcDemoController.java index 97be557..ae2adef 100644 --- a/src/main/java/com/rehome/mqttclienttemperature/controller/JdbcDemoController.java +++ b/src/main/java/com/rehome/mqttclienttemperature/controller/JdbcDemoController.java @@ -17,31 +17,30 @@ import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.concurrent.*; /** - * * 背景 * 现在的数据层的开发,大多会使用如MyBatis或JPA之类的开发工具。这些开发工具给我们的开发过程中带来了极大的便利。 * 但是在一些极端的场景下往往原生的jdbc方式操作数据库更灵活,性能更高。由于部分场景下MyBatis或JPA之类无法满足我的需求,所以我打算自己封装一套查数据库的工具类。 - * + *

* 我们会用到fastjson,druid,mysql所以pom.xml增加依赖如下: * * - * com.alibaba - * fastjson - * 1.2.62 + * com.alibaba + * fastjson + * 1.2.62 * * - * com.alibaba - * druid - * 1.1.9 + * com.alibaba + * druid + * 1.1.9 * * * - * mysql - * mysql-connector-java + * mysql + * mysql-connector-java * - * */ /** @@ -66,6 +65,7 @@ public class JdbcDemoController { public static DataSource ds = new DataSource(); + static { //配置数据源 ds.setId("1"); @@ -88,45 +88,90 @@ public class JdbcDemoController { * @return */ @RequestMapping("/api/list") - public ResponseDto queryList() - { - String sql = "select * from temperature where id = ?"; + public ResponseDto queryList() { - List jdbcParamValues = new ArrayList<>(); - for(int i=0;i<2362254;i++){ + CompletableFuture future = CompletableFuture.supplyAsync(() -> { + String sql = "select * from temperature where id = ?"; + List jdbcParamValues = new ArrayList<>(); + for (int i = 0; i < 2362254; i++) { // try { // Thread.sleep(5); // } catch (InterruptedException e) { // e.printStackTrace(); // } - jdbcParamValues.add(i+1); - - Gson gson = new Gson(); - ResponseDto responseDto = JdbcUtil.executeSql(ds,sql,jdbcParamValues); - String dbQueryResult = gson.toJson(responseDto); - log.info(dbQueryResult); - jdbcParamValues.clear(); - - ResponseTemperatureDto responseTemperatureDto=gson.fromJson(dbQueryResult,ResponseTemperatureDto.class); - if(responseTemperatureDto.isSuccess()&&responseTemperatureDto.getData()!=null&&responseTemperatureDto.getData().size()>0){ - log.info(gson.toJson(responseTemperatureDto.getData().get(0))); - - TemperatureDto dto = responseTemperatureDto.getData().get(0); - - Temperature temperature = new Temperature(); - temperature.setCreateDate(dto.getCreateDate()); - temperature.setDataDate(dto.getDataDate()); - temperature.setDataHour(dto.getDataHour()); - temperature.setDataMinute(dto.getDataMinute()); - temperature.setTopic(dto.getTopic()); - temperature.setHumidity(String.valueOf(dto.getHumidity())); - temperature.setTemperature(String.valueOf(dto.getTemperature())); - temperature.setLocationDesc(dto.getLocationDesc()); - - temperatureService.saveTemperature(temperature); + jdbcParamValues.add(i + 1); + + Gson gson = new Gson(); + ResponseDto responseDto = JdbcUtil.executeSql(ds, sql, jdbcParamValues); + String dbQueryResult = gson.toJson(responseDto); + log.info(dbQueryResult); + jdbcParamValues.clear(); + + ResponseTemperatureDto responseTemperatureDto = gson.fromJson(dbQueryResult, ResponseTemperatureDto.class); + if (responseTemperatureDto.isSuccess() && responseTemperatureDto.getData() != null && responseTemperatureDto.getData().size() > 0) { + log.info(gson.toJson(responseTemperatureDto.getData().get(0))); + + TemperatureDto dto = responseTemperatureDto.getData().get(0); + Temperature temperature = new Temperature(); + temperature.setCreateDate(dto.getCreateDate()); + temperature.setDataDate(dto.getDataDate()); + temperature.setDataHour(dto.getDataHour()); + temperature.setDataMinute(dto.getDataMinute()); + temperature.setTopic(dto.getTopic()); + temperature.setHumidity(String.valueOf(dto.getHumidity())); + temperature.setTemperature(String.valueOf(dto.getTemperature())); + temperature.setLocationDesc(dto.getLocationDesc()); + temperatureService.saveTemperature(temperature); + } + } + return "数据库同步成功"; + }); + + future.thenApply(result -> { + System.out.println("Result: " + result); + return result; + }); + + return ResponseDto.successWithMsg("数据库正在同步..."); + } + + public void completableFutureExample() { + CompletableFuture future = CompletableFuture.supplyAsync(() -> { + // 模拟耗时操作 + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); // 重置中断状态 + } + return 123; + }); + // 非阻塞等待结果,但不返回结果,如果要处理结果,可以使用thenApply等 + future.thenAccept(result -> System.out.println("Result: " + result)).join(); + } + + /** + * 查询测试 + * @return + */ + @RequestMapping("/api/getResult") + public String getResult() { + CompletableFuture future = CompletableFuture.supplyAsync(() -> { + // 模拟耗时操作 + try { + Thread.sleep(1000); + System.out.println("异步处理完成"); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); // 重置中断状态 } - } - return null; + return "数据库同步成功"; + }); + //注意,如果需要异步返回结果,再做后续操作,需要加入join()方法等待异步计算结果后回调,不然异步没有处理完直接主线程结束 + future.thenApply(result -> { + System.out.println("Result: " + result); + return result; + }).join(); + System.out.println("数据库正在同步..."); + return "数据库正在同步..."; } } diff --git a/src/main/java/com/rehome/mqttclienttemperature/entity/Temperature.java b/src/main/java/com/rehome/mqttclienttemperature/entity/Temperature.java index 37843ff..a99d68c 100644 --- a/src/main/java/com/rehome/mqttclienttemperature/entity/Temperature.java +++ b/src/main/java/com/rehome/mqttclienttemperature/entity/Temperature.java @@ -30,8 +30,9 @@ public class Temperature implements Serializable { // @GeneratedValue(strategy = GenerationType.IDENTITY) // @ApiModelProperty(value = "主键") @Id + @ApiModelProperty(value = "主键") @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="temperature_seq") - @SequenceGenerator(name="temperature_seq", sequenceName="temperature_seq_name_appserver") + @SequenceGenerator(name="temperature_seq", sequenceName="temperature_seq_appserver") private Long id; @ApiModelProperty(value = "温度") @@ -60,9 +61,9 @@ public class Temperature implements Serializable { @Column(length=80) private String locationDesc; + //@CreatedDate @ApiModelProperty(value = "创建时间") @Temporal(TemporalType.TIMESTAMP) - @CreatedDate private Date createDate; } diff --git a/src/main/java/com/rehome/mqttclienttemperature/entity/WebServiceProvince.java b/src/main/java/com/rehome/mqttclienttemperature/entity/WebServiceProvince.java index 09ba645..7e364c5 100644 --- a/src/main/java/com/rehome/mqttclienttemperature/entity/WebServiceProvince.java +++ b/src/main/java/com/rehome/mqttclienttemperature/entity/WebServiceProvince.java @@ -20,6 +20,7 @@ public class WebServiceProvince implements Serializable { // @GeneratedValue(strategy = GenerationType.IDENTITY) // @ApiModelProperty(value = "主键") @Id + @ApiModelProperty(value = "主键") @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "webService_province_seq") @SequenceGenerator(name = "webService_province_seq", sequenceName = "webService_province_seq") private Long id; diff --git a/src/main/java/com/rehome/mqttclienttemperature/entity/WebServiceWeatherInfo.java b/src/main/java/com/rehome/mqttclienttemperature/entity/WebServiceWeatherInfo.java index 8c8c547..ddca184 100644 --- a/src/main/java/com/rehome/mqttclienttemperature/entity/WebServiceWeatherInfo.java +++ b/src/main/java/com/rehome/mqttclienttemperature/entity/WebServiceWeatherInfo.java @@ -34,6 +34,7 @@ public class WebServiceWeatherInfo { // @GeneratedValue(strategy = GenerationType.IDENTITY) // @ApiModelProperty(value = "主键") @Id + @ApiModelProperty(value = "主键") @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "webService_weather_info_seq") @SequenceGenerator(name = "webService_weather_info_seq", sequenceName = "webService_weather_info_seq") private Long id; diff --git a/src/main/java/com/rehome/mqttclienttemperature/service/impl/TemperatureServiceImpl.java b/src/main/java/com/rehome/mqttclienttemperature/service/impl/TemperatureServiceImpl.java index 6fe54ac..97a3cb0 100644 --- a/src/main/java/com/rehome/mqttclienttemperature/service/impl/TemperatureServiceImpl.java +++ b/src/main/java/com/rehome/mqttclienttemperature/service/impl/TemperatureServiceImpl.java @@ -37,7 +37,7 @@ public class TemperatureServiceImpl implements TemperatureService { String dataMinute = sdfMinute.format(now); String dataSecond = sdfSecond.format(now); Temperature temperature = new Temperature(); - //temperature.setCreateDate(now); + temperature.setCreateDate(now); temperature.setDataDate(nowDate); temperature.setDataHour(nowHour); temperature.setDataMinute(dataMinute); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index dc6a589..777b528 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -22,10 +22,8 @@ spring: # password: Skyinno251, driverClassName: oracle.jdbc.driver.OracleDriver url: jdbc:oracle:thin:@192.168.1.9:1521/orcl - username: huangwenfei - password: huangwenfei -# username: appserver -# password: appserver + username: appserver + password: appserver jpa: database: oracle # 配置 DBMS 类型 show-sql: true # 配置是否将执行的 SQL 输出到日志