初始版本提交
This commit is contained in:
38
.gitignore
vendored
Normal file
38
.gitignore
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
target/
|
||||||
|
!.mvn/wrapper/maven-wrapper.jar
|
||||||
|
!**/src/main/**/target/
|
||||||
|
!**/src/test/**/target/
|
||||||
|
|
||||||
|
### IntelliJ IDEA ###
|
||||||
|
.idea/modules.xml
|
||||||
|
.idea/jarRepositories.xml
|
||||||
|
.idea/compiler.xml
|
||||||
|
.idea/libraries/
|
||||||
|
*.iws
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
|
||||||
|
### Eclipse ###
|
||||||
|
.apt_generated
|
||||||
|
.classpath
|
||||||
|
.factorypath
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
.springBeans
|
||||||
|
.sts4-cache
|
||||||
|
|
||||||
|
### NetBeans ###
|
||||||
|
/nbproject/private/
|
||||||
|
/nbbuild/
|
||||||
|
/dist/
|
||||||
|
/nbdist/
|
||||||
|
/.nb-gradle/
|
||||||
|
build/
|
||||||
|
!**/src/main/**/build/
|
||||||
|
!**/src/test/**/build/
|
||||||
|
|
||||||
|
### VS Code ###
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
### Mac OS ###
|
||||||
|
.DS_Store
|
||||||
92
pom.xml
Normal file
92
pom.xml
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>com.njcn</groupId>
|
||||||
|
<artifactId>kafka-harmonic-data</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<version>2.3.12.RELEASE</version> <!-- 最新 2.x 版本 -->
|
||||||
|
</parent>
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>8</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
<version>2.3.12.RELEASE</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.kafka</groupId>
|
||||||
|
<artifactId>spring-kafka</artifactId>
|
||||||
|
<version>2.5.14.RELEASE</version> <!-- 与Spring Boot 2.3.x兼容 -->
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>1.18.18</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.njcn</groupId>
|
||||||
|
<artifactId>pqs-influx</artifactId>
|
||||||
|
<version>1.0.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<finalName>kafka-harmonic-data</finalName>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>repackage</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.8.1</version>
|
||||||
|
<configuration>
|
||||||
|
<source>1.8</source>
|
||||||
|
<target>1.8</target>
|
||||||
|
<skip>true</skip>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-source-plugin</artifactId>
|
||||||
|
<version>2.2.1</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>attach-sources</id>
|
||||||
|
<goals>
|
||||||
|
<goal>jar-no-fork</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
||||||
25
src/main/java/com/njcn/kafkadata/KafkaDataApplication.java
Normal file
25
src/main/java/com/njcn/kafkadata/KafkaDataApplication.java
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
package com.njcn.kafkadata;
|
||||||
|
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
|
||||||
|
import org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration;
|
||||||
|
import org.springframework.context.annotation.DependsOn;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pqs
|
||||||
|
*
|
||||||
|
* @author cdf
|
||||||
|
* @date 2022/11/10
|
||||||
|
*/
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
@DependsOn("proxyMapperRegister")
|
||||||
|
public class KafkaDataApplication {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(KafkaDataApplication.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package com.njcn.kafkadata.controller;
|
||||||
|
|
||||||
|
import com.njcn.kafkadata.pojo.param.PushParam;
|
||||||
|
import com.njcn.kafkadata.service.HarmonicDataService;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description:
|
||||||
|
* Date: 2025/05/27 下午 2:56【需求编号】
|
||||||
|
*
|
||||||
|
* @author clam
|
||||||
|
* @version V1.0.0
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/harmonicdata")
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class HarmonicDataController {
|
||||||
|
private final HarmonicDataService harmonicDataService;
|
||||||
|
@PostMapping("/push")
|
||||||
|
public void push(@RequestBody PushParam pushParam) throws Exception {
|
||||||
|
harmonicDataService.push(pushParam);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package com.njcn.kafkadata.controller;
|
||||||
|
|
||||||
|
import com.njcn.kafkadata.service.KafkaProducerService;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description:
|
||||||
|
* Date: 2025/05/27 下午 2:06【需求编号】
|
||||||
|
*
|
||||||
|
* @author clam
|
||||||
|
* @version V1.0.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/test")
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class KafkaTestController {
|
||||||
|
private final KafkaProducerService kafkaProducerService;
|
||||||
|
|
||||||
|
@GetMapping("/testkafka")
|
||||||
|
|
||||||
|
public void test(@RequestParam("context") String context) {
|
||||||
|
kafkaProducerService.sendMessageWithCallback("harmonic-data",context);
|
||||||
|
}
|
||||||
|
}
|
||||||
38
src/main/java/com/njcn/kafkadata/job/PushKafkaJob.java
Normal file
38
src/main/java/com/njcn/kafkadata/job/PushKafkaJob.java
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
package com.njcn.kafkadata.job;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DatePattern;
|
||||||
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||||
|
import com.njcn.kafkadata.pojo.param.PushParam;
|
||||||
|
import com.njcn.kafkadata.service.HarmonicDataService;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||||
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description:
|
||||||
|
* Date: 2025/05/28 下午 2:34【需求编号】
|
||||||
|
*
|
||||||
|
* @author clam
|
||||||
|
* @version V1.0.0
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@EnableScheduling
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Slf4j
|
||||||
|
public class PushKafkaJob {
|
||||||
|
private final HarmonicDataService harmonicDataService;
|
||||||
|
|
||||||
|
@Scheduled(cron="0 0/5 * * * ?")
|
||||||
|
public void pqOnlinerate() throws Exception {
|
||||||
|
PushParam pushParam = new PushParam();
|
||||||
|
// 获取当前时间
|
||||||
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
pushParam.setBeginTime(LocalDateTimeUtil.format(now.minusMinutes(10), DatePattern.NORM_DATETIME_PATTERN));
|
||||||
|
pushParam.setEndTime(LocalDateTimeUtil.format(now.minusMinutes(5), DatePattern.NORM_DATETIME_PATTERN));
|
||||||
|
harmonicDataService.push(pushParam);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.njcn.kafkadata.pojo.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description:
|
||||||
|
* Date: 2025/05/27 下午 3:32【需求编号】
|
||||||
|
*
|
||||||
|
* @author clam
|
||||||
|
* @version V1.0.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class HarmonicMessageDTO {
|
||||||
|
private String tableName;
|
||||||
|
private String dataJson;
|
||||||
|
|
||||||
|
}
|
||||||
34
src/main/java/com/njcn/kafkadata/pojo/param/PushParam.java
Normal file
34
src/main/java/com/njcn/kafkadata/pojo/param/PushParam.java
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
package com.njcn.kafkadata.pojo.param;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description:
|
||||||
|
* Date: 2025/05/28 上午 8:47【需求编号】
|
||||||
|
*
|
||||||
|
* @author clam
|
||||||
|
* @version V1.0.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class PushParam {
|
||||||
|
|
||||||
|
//补招起始日期_yyyy-MM-dd(按小时跑的任务可加时分秒
|
||||||
|
private String beginTime;
|
||||||
|
|
||||||
|
//补招截止日期_yyyy-MM-dd(按小时跑的任务可加时分秒)
|
||||||
|
private String endTime;
|
||||||
|
|
||||||
|
//时间日期_yyyy-MM-dd(按小时跑的任务可加时分秒)
|
||||||
|
private String dataDate;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 待计算的对象索引集合,监测点、设备、母线、变电站、单位等等
|
||||||
|
*/
|
||||||
|
private List<String> idList;
|
||||||
|
|
||||||
|
}
|
||||||
73
src/main/java/com/njcn/kafkadata/pojo/param/TableEnum.java
Normal file
73
src/main/java/com/njcn/kafkadata/pojo/param/TableEnum.java
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
package com.njcn.kafkadata.pojo.param;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description:
|
||||||
|
* Date: 2024/1/4 13:54【需求编号】
|
||||||
|
*
|
||||||
|
* @author clam
|
||||||
|
* @version V1.0.0
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
public enum TableEnum {
|
||||||
|
DATAFLICKER("DataFlicker","电压闪变数据表", "data_flicker"),
|
||||||
|
DATAFLUC("DataFluc","电压波动数据表", "data_fluc"),
|
||||||
|
DATAHARMPHASICI("DataHarmPhasicI","谐波电流角度数据表", "data_harmphasic_i"),
|
||||||
|
DATAHARMPHASICV("DataHarmPhasicV","谐波电压角度数据表", "data_harmphasic_v"),
|
||||||
|
DATAHARMPOWERP("DataHarmPowerP","有功功率数据表", "data_harmpower_p"),
|
||||||
|
DATAHARMPOWERQ("DataHarmPowerQ","无功功率数据表", "data_harmpower_q"),
|
||||||
|
DATAHARMPOWERS("DataHarmPowerS","视在功率数据表", "data_harmpower_s"),
|
||||||
|
DATAHARMRATEI("DataHarmRateI","谐波电流含有率数据表", "data_harmrate_i"),
|
||||||
|
DATAHARMRATEV("DataHarmRateV","谐波电压含有率数据表", "data_harmrate_v"),
|
||||||
|
DATAINHARMI("DataInHarmI","电流简谐波幅值数据表", "data_inharm_i"),
|
||||||
|
DATAINHARMV("DataInHarmV","电压间谐波幅值数据表", "data_inharm_v"),
|
||||||
|
DATAI("DataI","谐波电流幅值数据表", "data_i"),
|
||||||
|
DATAPLT("DataPlt","长时闪变数据表", "data_plt"),
|
||||||
|
DATAV("DataV","谐波电压幅值数据表", "data_v"),
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
private final String code;
|
||||||
|
private final String value;
|
||||||
|
|
||||||
|
private final String tableName;
|
||||||
|
|
||||||
|
TableEnum(String code, String value, String tableName) {
|
||||||
|
this.code = code;
|
||||||
|
this.value = value;
|
||||||
|
this.tableName = tableName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有可执行的组件类型,
|
||||||
|
* 除了"目录"类型,其他都可以执行
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static List<String> getExecutableTypes() {
|
||||||
|
return Arrays.stream(TableEnum.values()).map(tmep->{
|
||||||
|
return tmep.code;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过code获取枚举值
|
||||||
|
* @param code
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getValueByCode(String code) {
|
||||||
|
for (TableEnum item : TableEnum.values()) {
|
||||||
|
if (item.code.equals(code)) {
|
||||||
|
return item.value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package com.njcn.kafkadata.service;
|
||||||
|
|
||||||
|
import com.njcn.kafkadata.pojo.param.PushParam;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description:
|
||||||
|
* Date: 2025/05/28 上午 8:38【需求编号】
|
||||||
|
*
|
||||||
|
* @author clam
|
||||||
|
* @version V1.0.0
|
||||||
|
*/
|
||||||
|
public interface HarmonicDataService {
|
||||||
|
void push(PushParam pushParam) throws Exception;
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.njcn.kafkadata.service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description:
|
||||||
|
* Date: 2025/05/27 下午 1:57【需求编号】
|
||||||
|
*
|
||||||
|
* @author clam
|
||||||
|
* @version V1.0.0
|
||||||
|
*/
|
||||||
|
public interface KafkaProducerService {
|
||||||
|
void sendMessage(String topic, String message);
|
||||||
|
|
||||||
|
// 带回调的发送
|
||||||
|
void sendMessageWithCallback(String topic, String message);
|
||||||
|
}
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
package com.njcn.kafkadata.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.extra.spring.SpringUtil;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import com.njcn.influx.base.InfluxDbBaseMapper;
|
||||||
|
import com.njcn.influx.pojo.constant.InfluxDBTableConstant;
|
||||||
|
import com.njcn.influx.query.InfluxQueryWrapper;
|
||||||
|
import com.njcn.kafkadata.pojo.dto.HarmonicMessageDTO;
|
||||||
|
import com.njcn.kafkadata.pojo.param.PushParam;
|
||||||
|
import com.njcn.kafkadata.pojo.param.TableEnum;
|
||||||
|
import com.njcn.kafkadata.service.HarmonicDataService;
|
||||||
|
import com.njcn.kafkadata.service.KafkaProducerService;
|
||||||
|
import com.njcn.kafkadata.util.TimestampFileUtil;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description:
|
||||||
|
* Date: 2025/05/28 上午 8:38【需求编号】
|
||||||
|
*
|
||||||
|
* @author clam
|
||||||
|
* @version V1.0.0
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class HarmonicDataServiceImpl implements HarmonicDataService {
|
||||||
|
|
||||||
|
private final static String PACKAGE_PREFIX = "com.njcn.influx.imapper.";
|
||||||
|
private final static String PACKAGE_SUFFIX = "Mapper";
|
||||||
|
|
||||||
|
private final static String TOPIC = "harmonic_data";
|
||||||
|
private final static String PACKAGE_PREFIX_BEAN ="com.njcn.influx.pojo.po." ;
|
||||||
|
private final KafkaProducerService kafkaProducerService;
|
||||||
|
|
||||||
|
@Value("${filePath}")
|
||||||
|
private String filePath;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void push(PushParam pushParam) throws Exception {
|
||||||
|
String beginTime = pushParam.getBeginTime();
|
||||||
|
String endTime = pushParam.getEndTime();
|
||||||
|
|
||||||
|
String timestamp = TimestampFileUtil.getTimestamp(filePath);
|
||||||
|
if(!StringUtils.isEmpty(timestamp)){
|
||||||
|
if(timestamp.compareTo(endTime)<=0){
|
||||||
|
beginTime=timestamp;
|
||||||
|
}else {
|
||||||
|
throw new RuntimeException(pushParam.getBeginTime()+"-"+pushParam.getEndTime()+"时间段数据已进行过推送至Kafka目前已数据已推送至"+timestamp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (TableEnum value : TableEnum.values()) {
|
||||||
|
String className = value.getCode();
|
||||||
|
String tableName = value.getTableName();
|
||||||
|
//查询数据
|
||||||
|
InfluxDbBaseMapper mapper = (InfluxDbBaseMapper) SpringUtil.getBean(Class.forName(PACKAGE_PREFIX + className + PACKAGE_SUFFIX));
|
||||||
|
System.out.println(PACKAGE_PREFIX + className + PACKAGE_SUFFIX);
|
||||||
|
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(Class.forName(PACKAGE_PREFIX_BEAN+className));
|
||||||
|
influxQueryWrapper
|
||||||
|
.between(InfluxDBTableConstant.TIME, beginTime, endTime);
|
||||||
|
List list1 = mapper.selectByQueryWrapper(influxQueryWrapper);
|
||||||
|
list1.forEach(temp->{
|
||||||
|
HarmonicMessageDTO harmonicMessageDTO = new HarmonicMessageDTO();
|
||||||
|
harmonicMessageDTO.setTableName(tableName);
|
||||||
|
harmonicMessageDTO.setDataJson(JSONUtil.toJsonStr(temp));
|
||||||
|
String jsonStr = JSONUtil.toJsonStr(harmonicMessageDTO);
|
||||||
|
kafkaProducerService.sendMessage(TOPIC,jsonStr);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
TimestampFileUtil.updateTimestamp(endTime,filePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
//package com.njcn.kafkadata.service.impl;
|
||||||
|
//
|
||||||
|
//import org.springframework.kafka.annotation.KafkaListener;
|
||||||
|
//import org.springframework.stereotype.Service;
|
||||||
|
//
|
||||||
|
//import java.util.List;
|
||||||
|
//
|
||||||
|
///**
|
||||||
|
// * Description:
|
||||||
|
// * Date: 2025/05/28 上午 11:13【需求编号】
|
||||||
|
// *
|
||||||
|
// * @author clam
|
||||||
|
// * @version V1.0.0
|
||||||
|
// */
|
||||||
|
//@Service
|
||||||
|
//public class KafkaConsumerService {
|
||||||
|
//
|
||||||
|
// @KafkaListener(topics = "my-topic", groupId = "my-group")
|
||||||
|
// public void consume(String message) {
|
||||||
|
// System.out.println("Consumed message: " + message);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 批量消费
|
||||||
|
//
|
||||||
|
//}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package com.njcn.kafkadata.service.impl;
|
||||||
|
|
||||||
|
import com.njcn.kafkadata.service.KafkaProducerService;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.kafka.core.KafkaTemplate;
|
||||||
|
import org.springframework.kafka.support.SendResult;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.concurrent.ListenableFuture;
|
||||||
|
import org.springframework.util.concurrent.ListenableFutureCallback;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description:
|
||||||
|
* Date: 2025/05/27 下午 2:00【需求编号】
|
||||||
|
*
|
||||||
|
* @author clam
|
||||||
|
* @version V1.0.0
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class KafkaProducerServiceImpl implements KafkaProducerService {
|
||||||
|
|
||||||
|
private final KafkaTemplate<String, String> kafkaTemplate;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(String topic, String message) {
|
||||||
|
kafkaTemplate.send(topic, message);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
// 带回调的发送
|
||||||
|
public void sendMessageWithCallback(String topic, String message) {
|
||||||
|
ListenableFuture<SendResult<String, String>> future = kafkaTemplate.send(topic, message);
|
||||||
|
|
||||||
|
future.addCallback(new ListenableFutureCallback<SendResult<String, String>>() {
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSuccess(SendResult<String, String> result) {
|
||||||
|
System.out.println("Sent message=[" + message +
|
||||||
|
"] with offset=[" + result.getRecordMetadata().offset() + "]");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Throwable ex) {
|
||||||
|
System.out.println("Unable to send message=[" +
|
||||||
|
message + "] due to : " + ex.getMessage());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
68
src/main/java/com/njcn/kafkadata/util/TimestampFileUtil.java
Normal file
68
src/main/java/com/njcn/kafkadata/util/TimestampFileUtil.java
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
package com.njcn.kafkadata.util;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.file.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description:
|
||||||
|
* Date: 2025/05/28 上午 11:30【需求编号】
|
||||||
|
*
|
||||||
|
* @author clam
|
||||||
|
* @version V1.0.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class TimestampFileUtil {
|
||||||
|
|
||||||
|
private static final String FILENAME = "time.txt";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新时间戳文件
|
||||||
|
*/
|
||||||
|
public static void updateTimestamp(String endTime,String resourcePath) throws IOException {
|
||||||
|
Path filePath = Paths.get(resourcePath, FILENAME);
|
||||||
|
|
||||||
|
// 如果文件不存在,创建它;存在则覆盖
|
||||||
|
Files.write(filePath, endTime.getBytes());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前时间戳
|
||||||
|
*/
|
||||||
|
public static String getTimestamp(String resourcePath) throws IOException {
|
||||||
|
Path filePath = Paths.get(resourcePath, FILENAME);
|
||||||
|
if (!Files.exists(filePath)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new String(Files.readAllBytes(filePath)).trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
try {
|
||||||
|
// 获取当前时间戳(如果有)
|
||||||
|
String currentTimestamp = getTimestamp("D:");
|
||||||
|
if (currentTimestamp != null) {
|
||||||
|
System.out.println("当前文件中的时间: " + currentTimestamp);
|
||||||
|
} else {
|
||||||
|
System.out.println("时间戳文件不存在,将创建新文件");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新时间戳
|
||||||
|
updateTimestamp("2020-01-02 00:00:00","D:");
|
||||||
|
|
||||||
|
// 打印新时间戳
|
||||||
|
System.out.println("更新时间戳为: " + getTimestamp("D:"));
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.err.println("操作时间戳文件失败: " + e.getMessage());
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
38
src/main/resources/application.yml
Normal file
38
src/main/resources/application.yml
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
server:
|
||||||
|
port: 10601
|
||||||
|
tomcat:
|
||||||
|
uri-encoding: UTF-8
|
||||||
|
spring:
|
||||||
|
application:
|
||||||
|
name: kafka-harmonic-data
|
||||||
|
kafka:
|
||||||
|
# Kafka 服务器地址
|
||||||
|
bootstrap-servers: 10.121.17.201:9092,10.121.17.202:9092,10.121.17.203:9092
|
||||||
|
|
||||||
|
# 生产者配置
|
||||||
|
producer:
|
||||||
|
key-serializer: org.apache.kafka.common.serialization.StringSerializer
|
||||||
|
value-serializer: org.apache.kafka.common.serialization.StringSerializer
|
||||||
|
# 可选配置
|
||||||
|
acks: all
|
||||||
|
retries: 3
|
||||||
|
batch-size: 16384
|
||||||
|
buffer-memory: 33554432
|
||||||
|
|
||||||
|
# 消费者配置
|
||||||
|
consumer:
|
||||||
|
group-id: my-group
|
||||||
|
auto-offset-reset: earliest
|
||||||
|
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
|
||||||
|
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
|
||||||
|
# 可选配置
|
||||||
|
enable-auto-commit: false
|
||||||
|
max-poll-records: 500
|
||||||
|
#influxDB内容配置
|
||||||
|
influx:
|
||||||
|
url: http://198.120.100.196:8086
|
||||||
|
user: pqsadmin
|
||||||
|
password: Pqsadmin123
|
||||||
|
database: PQSBASE
|
||||||
|
mapper-location: com.njcn.**.imapper
|
||||||
|
filePath: /usr/kafkaproject
|
||||||
Reference in New Issue
Block a user