This commit is contained in:
18796357645 2025-05-13 22:35:09 +08:00
parent 363710926d
commit 575cdb2fe1
2 changed files with 89 additions and 0 deletions

View File

@ -4,11 +4,13 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* front
*/
@SpringBootApplication
@EnableScheduling
public class FrontApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(FrontApplication.class, args);

View File

@ -0,0 +1,87 @@
package io.config;
import io.modules.item.dao.CaseDao;
import io.modules.item.entity.CaseEntity;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.validator.internal.util.Contracts;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.security.SecureRandom;
import java.util.HexFormat;
import java.util.List;
/**
*
* 1.在主方法加@EnableScheduling
*/
@Component
@Slf4j
public class MyScheduledTask {
@Autowired
CaseDao contractsService;
// 每5秒执行一次
@Scheduled(fixedRate = 5000)
public void runEveryFiveSeconds() {
//需要检测的hex字段
List<CaseEntity> list = contractsService.selectList(null);
for (CaseEntity itemEntity : list) {
if (!isValidEthereumHexId(itemEntity.getHex(),64)){
itemEntity.setHex(sendSetRequest(itemEntity.getId().toString(),itemEntity.toString()));
//更新数据
contractsService.updateById(itemEntity);
}
}
}
public static String sendSetRequest(String key, String value) {
try {
RestTemplate restTemplate = new RestTemplate();
String url = "http://localhost:8080/set?key=" + key + "&value=" + value;
// 发送 GET 请求并解析返回 JSON SetResponse 对象
ResponseEntity<SetResponse> response = restTemplate.getForEntity(url, SetResponse.class);
return response.getBody().data;
}catch (Exception e){
SetResponse setRequestService = new SetResponse();
setRequestService.setData(generate(40));
return setRequestService.data;
}
}
/**
* 判断是否为合法的以太坊Hex ID例如交易哈希区块哈希地址
* @param hexId 要校验的字符串
* @param length 字符长度40 = 钱包地址64 = 交易哈希/区块哈希
* @return true 表示合法否则 false
*/
public static boolean isValidEthereumHexId(String hexId, int length) {
if (hexId == null || !hexId.startsWith("0x")) {
return false;
}
String hexBody = hexId.substring(2);
String pattern = "^[0-9a-fA-F]{" + length + "}$";
return hexBody.matches(pattern);
}
// 内嵌的SetResponse类
@Data
public static class SetResponse {
private String msg;
private String data;
}
private static final SecureRandom secureRandom = new SecureRandom();
private static final HexFormat hexFormat = HexFormat.of();
public static String generate(int byteLength) {
byte[] randomBytes = new byte[byteLength];
secureRandom.nextBytes(randomBytes);
return "0x" + hexFormat.formatHex(randomBytes);
}
}