You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
admin-client-temperature/src/main/java/com/rehome/mqttclienttemperature/controller/JdbcDemoController.java

207 lines
7.7 KiB
Java

1 year ago
package com.rehome.mqttclienttemperature.controller;
12 months ago
import com.google.gson.Gson;
1 year ago
import com.rehome.mqttclienttemperature.datasource.DataSource;
import com.rehome.mqttclienttemperature.dto.ResponseDto;
12 months ago
import com.rehome.mqttclienttemperature.dto.ResponseTemperatureDto;
import com.rehome.mqttclienttemperature.dto.TemperatureDto;
import com.rehome.mqttclienttemperature.entity.Temperature;
import com.rehome.mqttclienttemperature.service.TemperatureService;
1 year ago
import com.rehome.mqttclienttemperature.utils.JdbcUtil;
12 months ago
import lombok.extern.slf4j.Slf4j;
import org.apache.http.util.TextUtils;
import org.attoparser.util.TextUtil;
1 year ago
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
12 months ago
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.*;
12 months ago
1 year ago
/**
*
* 使MyBatisJPA便
* jdbcMyBatisJPA
* <p>
1 year ago
* fastjson,druid,mysqlpom.xml
*
* <dependency>
* <groupId>com.alibaba</groupId>
* <artifactId>fastjson</artifactId>
* <version>1.2.62</version>
1 year ago
* </dependency>
* <dependency>
* <groupId>com.alibaba</groupId>
* <artifactId>druid</artifactId>
* <version>1.1.9</version>
1 year ago
* </dependency>
* <!-- Mysql -->
* <dependency>
* <groupId>mysql</groupId>
* <artifactId>mysql-connector-java</artifactId>
1 year ago
* </dependency>
*/
/**
*
1 year ago
* https://download.csdn.net/download/lxyoucan/85094574
* <p>
1 year ago
*
* https://github.com/freakchick/DBApi
* <p>
* SpringBootjdbc
1 year ago
* https://blog.csdn.net/lxyoucan/article/details/124042295
*/
12 months ago
@Slf4j
1 year ago
@RestController
public class JdbcDemoController {
12 months ago
@Resource
private TemperatureService temperatureService;
1 year ago
public static DataSource ds = new DataSource();
1 year ago
static {
//配置数据源
7 months ago
ds.setId("1");
ds.setName("mysql");
ds.setUrl("jdbc:mysql://192.168.3.9:3306/appserver?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true");
7 months ago
ds.setUsername("root");
ds.setPassword("Skyinno251,");
ds.setDriver("com.mysql.cj.jdbc.Driver");
11 months ago
7 months ago
// ds.setId("2");
// ds.setName("oracle");
// ds.setUrl("jdbc:oracle:thin:@192.168.1.9:1521/orcl");
// ds.setUrl("jdbc:oracle:thin:@192.168.3.7:1521/orcl");
7 months ago
// ds.setUsername("appserver");
// ds.setPassword("appserver");
// ds.setDriver("oracle.jdbc.driver.OracleDriver");
1 year ago
}
/**
*
*
1 year ago
* @return
*/
6 months ago
//@RequestMapping("/api/list")
public ResponseDto queryList() {
// 自定义一个线程池,内部包含8个线程
ExecutorService customPool = Executors.newFixedThreadPool(4);
// 自定义一个线程池,内部包含10个线程
ExecutorService executorService = Executors.newFixedThreadPool(10);
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
String sql = "select * from temperature where id = ?";
List<Object> jdbcParamValues = new ArrayList<>();
6 months ago
for (int i = 2305781; i < 2307935; i++) {
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 "数据库同步成功";
}, customPool);
future.thenApply(result -> {
System.out.println("Result: " + result);
return result;
});
return ResponseDto.successWithMsg("数据库正在同步...");
}
public void completableFutureExample() {
CompletableFuture<Integer> 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() {
// 自定义一个线程池,内部包含4个线程
ExecutorService executorService = Executors.newFixedThreadPool(4);
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 模拟耗时操作
try {
Thread.sleep(1000);
System.out.println("异步处理完成");
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // 重置中断状态
12 months ago
}
return "数据库同步成功";
}, executorService);
//注意如果需要异步返回结果再做后续操作需要加入join()方法等待异步计算结果后回调,不然异步没有处理完直接主线程结束
future.thenApply(result -> {
System.out.println("Result: " + result);
return result;
}).join();
System.out.println("数据库正在同步...");
return "数据库正在同步...";
1 year ago
}
/**
*
*
* @return
*/
@RequestMapping("/api/getResult0")
public String getResult0() {
// 自定义一个线程池,内部包含4个线程
ExecutorService executorService = Executors.newFixedThreadPool(4);
String result = CompletableFuture.supplyAsync(() -> {
System.out.println("Step 1: Generate number");
return 42;
}, executorService).thenApply(num -> {
System.out.println("Step 2: Convert number to string");
return "Number is: " + num;
}).exceptionally(exception -> {
System.out.println(exception.getMessage());
return null;
}).join();
if (TextUtils.isEmpty(result)) {
return "数据库同步异常...";
}
System.out.println("数据库正在同步...");
System.out.println(result);
return result;
}
1 year ago
}