diff --git a/pom.xml b/pom.xml index 407524fe..db274477 100644 --- a/pom.xml +++ b/pom.xml @@ -89,12 +89,12 @@ prod prod - 127.0.0.1:8848 + 53.16.17.16:8848 DEFAULT_GROUP DEFAULT_GROUP nacos - nacos - 127.0.0.1:4560 + Ycgis!2509 + 53.16.17.16:4560 diff --git a/stwzhj-modules/stwzhj-data2es/pom.xml b/stwzhj-modules/stwzhj-data2es/pom.xml index 3b749d9d..06133650 100644 --- a/stwzhj-modules/stwzhj-data2es/pom.xml +++ b/stwzhj-modules/stwzhj-data2es/pom.xml @@ -131,6 +131,13 @@ elasticsearch-rest-client 7.14.0 + + + org.elasticsearch.client + elasticsearch-rest-client + 7.6.0-hw-ei-302002 + + org.elasticsearch.client elasticsearch-rest-high-level-client @@ -147,6 +154,12 @@ + + org.apache.kafka + kafka-clients + 2.4.0-hw-ei-302002 + + diff --git a/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/config/ElasticsearchConfig.java b/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/config/ElasticsearchConfig.java index a41e0289..65a766a8 100644 --- a/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/config/ElasticsearchConfig.java +++ b/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/config/ElasticsearchConfig.java @@ -20,10 +20,11 @@ import java.util.List; /** * restHighLevelClient 客户端配置类 */ -@Slf4j + +/*@Slf4j @Data @Configuration -@ConfigurationProperties(prefix = "elasticsearch") +@ConfigurationProperties(prefix = "elasticsearch")*/ public class ElasticsearchConfig { // es host ip 地址(集群) @@ -85,7 +86,7 @@ public class ElasticsearchConfig { }); restHighLevelClient = new RestHighLevelClient(builder); } catch (NumberFormatException e) { - log.error("ES 连接池初始化异常"); +// log.error("ES 连接池初始化异常"); } return restHighLevelClient; } diff --git a/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/config/EsConfig.java b/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/config/EsConfig.java new file mode 100644 index 00000000..586dec4a --- /dev/null +++ b/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/config/EsConfig.java @@ -0,0 +1,40 @@ +package org.dromara.data2es.config; + +import org.dromara.data2es.util.GenerateEnumUtil; +import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.hwclient.HwRestClient; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +/** + *

description:

+ * + * @author chenle + * @date 2021-07-05 18:22 + */ +@Component(value = "esConfig") +public class EsConfig { + + private String prefix = "gpsinfo"; + + public String indexNameByDay(){ + return prefix+ LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); + } + + @Bean(destroyMethod = "close",name = "restHighLevelClient") + public RestHighLevelClient restClient() { +// String configPath = System.getProperty("user.dir") + File.separator+ "app_data2es_aq" + File.separator + "conf" + File.separator; + String configPath = "/rsoft/"; + +// KAFKA("KafkaClient"), ZOOKEEPER("Client"); + GenerateEnumUtil.addEnum(LoginUtil.Module.class,"KAFKA","KafkaClient"); + GenerateEnumUtil.addEnum(LoginUtil.Module.class,"ZOOKEEPER","Client"); + HwRestClient hwRestClient = new HwRestClient(configPath); + RestHighLevelClient highLevelClient = new RestHighLevelClient(hwRestClient.getRestClientBuilder()); + return highLevelClient; + } + +} diff --git a/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/config/KafkaConfig.java b/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/config/KafkaConfig.java index 9ccb8af0..162d631c 100644 --- a/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/config/KafkaConfig.java +++ b/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/config/KafkaConfig.java @@ -24,11 +24,11 @@ public class KafkaConfig { private Logger logger = LoggerFactory.getLogger(KafkaConfig.class); -// private String kafkaServers = "140.168.2.31:21007,140.168.2.32:21007,140.168.2.33:21007"; + private String kafkaServers = "140.168.2.31:21007,140.168.2.32:21007,140.168.2.33:21007"; //省厅 kafka // private String kafkaServers = "53.208.61.105:6667,53.208.61.106:6667,53.208.61.107:6667";//六安GA网 // private String kafkaServers = "34.72.62.93:9092";//六安视频网 // private String kafkaServers = "127.0.0.1:9092";//本地 - private String kafkaServers = "53.207.8.71:9092,53.193.3.15:9092,53.160.0.237:9092,53.104.56.58:9092,53.128.22.61:9092";//省厅 马伟提供 +// private String kafkaServers = "53.207.8.71:9092,53.193.3.15:9092,53.160.0.237:9092,53.104.56.58:9092,53.128.22.61:9092";//省厅 马伟提供 private String groupId = "ruansiProducer"; @@ -128,11 +128,11 @@ public class KafkaConfig { // props.put(kerberosDomainName, "hadoop.hadoop.com"); //设置自定义的分区策略类,默认不传key,是粘性分区,尽量往一个分区中发消息。如果key不为null,则默认是按照key的hashcode与 partition的取余来决定哪个partition //props.put("partitioner.class","com.kafka.myparitioner.CidPartitioner"); - props.put(securityProtocol, "SASL_PLAINTEXT"); - props.put("sasl.jaas.config", "org.apache.kafka.common.security.scram.ScramLoginModule required username=\"zkxc\" password=\"zkxcKafka07252023\";"); - props.put("sasl.mechanism", "SCRAM-SHA-256"); - KafkaProducer producer = new KafkaProducer<>(props); -// KafkaProducer producer = new KafkaProducer<>(props); +// props.put(securityProtocol, "SASL_PLAINTEXT"); +// props.put("sasl.jaas.config", "org.apache.kafka.common.security.scram.ScramLoginModule required username=\"zkxc\" password=\"zkxcKafka07252023\";"); +// props.put("sasl.mechanism", "SCRAM-SHA-256"); +// KafkaProducer producer = new KafkaProducer<>(props); + KafkaProducer producer = new KafkaProducer<>(props); return producer; } diff --git a/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/config/KafkaSecurityUtil.java b/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/config/KafkaSecurityUtil.java index 3b6409a4..48730ce7 100644 --- a/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/config/KafkaSecurityUtil.java +++ b/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/config/KafkaSecurityUtil.java @@ -25,7 +25,7 @@ public class KafkaSecurityUtil { /** * 用户自己申请的机机账号名称 */ - private static final String USER_PRINCIPAL = "aqdsj_ruansi@HADOOP.COM"; + private static final String USER_PRINCIPAL = "yhy_ahrs_rcw@HADOOP.COM"; public static void securityPrepare() throws IOException { @@ -34,10 +34,10 @@ public class KafkaSecurityUtil { //String krbFile = filePath + "krb5.conf"; //ClassPathResource classPathResource = new ClassPathResource("krb5.conf"); //String krbFile = classPathResource.getAbsolutePath(); - String krbFile = "/gpsstore/krb5.conf"; + String krbFile = "/rsoft/krb5.conf"; // String userKeyTableFile = filePath + USER_KEYTAB_FILE; //ClassPathResource classPathResource1 = new ClassPathResource(USER_KEYTAB_FILE); - String userKeyTableFile = "/gpsstore/user.keytab"; + String userKeyTableFile = "/rsoft/user.keytab"; //windows路径下分隔符替换 userKeyTableFile = userKeyTableFile.replace("\\", "\\\\"); diff --git a/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/util/GenerateEnumUtil.java b/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/util/GenerateEnumUtil.java new file mode 100644 index 00000000..f93267f8 --- /dev/null +++ b/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/util/GenerateEnumUtil.java @@ -0,0 +1,146 @@ +package org.dromara.data2es.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.lang.reflect.*; +import java.util.*; + +/** + *

description:

+ * + * @author luya + * @date 2025-07-08 + */ +public class GenerateEnumUtil { + + static Logger log = LoggerFactory.getLogger(GenerateEnumUtil.class); + + /** + * 添加枚举类 + * + * @param enumClass 枚举类 + * @param enumName 枚举名称 (不可重复) + * @param params 属性参数,按顺序写入 + */ + public static > void addEnum(Class enumClass, String enumName, Object... params) { + sanityChecks(enumClass, enumName); + Field valuesField = null; + Field[] fields = enumClass.getDeclaredFields(); + List> paramTypes = new LinkedList<>(); + + for (Field field : fields) { + if (field.isEnumConstant() && field.getName().equals(enumName)) { + log.warn("该枚举类已经存在!"); + return; + } + if (field.isSynthetic() && field.getName().contains("$VALUES")) { + valuesField = field; + } + if (!field.isSynthetic() && !field.isEnumConstant()) { + paramTypes.add(field.getType()); + } + } + + if (valuesField == null) { + throw new RuntimeException("未获取到合成类型"); + } + + try { + // 设置可访问 + valuesField.setAccessible(true); + T[] previousValues = (T[]) valuesField.get(null); + List values = new ArrayList<>(Arrays.asList(previousValues)); + + // 创建新枚举实例 + T newValue = makeEnum(enumClass, enumName, values.size(), paramTypes.toArray(new Class[0]), params); + values.add(newValue); + + // 更新枚举数组 + setFailsafeFieldValue(valuesField, null, values.toArray((T[]) Array.newInstance(enumClass, 0))); + + // 清理枚举缓存 + cleanEnumCache(enumClass); + } catch (Exception e) { + throw new RuntimeException("添加枚举失败: " + e.getMessage(), e); + } + } + + /** + * 校验参数 + */ + private static > void sanityChecks(Class enumClass, String enumName) { + if (!Enum.class.isAssignableFrom(enumClass)) { + throw new RuntimeException(enumClass + " 不是一个枚举类。"); + } + if (enumName == null || enumName.trim().isEmpty()) { + throw new RuntimeException("枚举名称不能为空"); + } + } + + /** + * 创建枚举实例 + */ + private static T makeEnum(Class enumClass, String enumName, int ordinal, + Class[] additionalTypes, Object[] additionalValues) throws Exception { + Class[] paramTypes = new Class[additionalTypes.length + 2]; + paramTypes[0] = String.class; + paramTypes[1] = int.class; + System.arraycopy(additionalTypes, 0, paramTypes, 2, additionalTypes.length); + + // 获取并调用构造器 + Constructor constructor = enumClass.getDeclaredConstructor(paramTypes); + constructor.setAccessible(true); + + Object[] params = new Object[additionalValues.length + 2]; + params[0] = enumName; + params[1] = ordinal; + System.arraycopy(additionalValues, 0, params, 2, additionalValues.length); + + return constructor.newInstance(params); + } + + /** + * 设置字段值(包括final字段) + */ + private static void setFailsafeFieldValue(Field field, Object target, Object value) + throws NoSuchFieldException, IllegalAccessException { + + field.setAccessible(true); + + // 处理final修饰符 + Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setAccessible(true); + + int originalModifiers = field.getModifiers(); + modifiersField.setInt(field, originalModifiers & ~Modifier.FINAL); + + // 设置字段值 + field.set(target, value); + + // 恢复原始修饰符(可选) + modifiersField.setInt(field, originalModifiers); + } + + /** + * 清理枚举缓存 + */ + private static void cleanEnumCache(Class enumClass) + throws NoSuchFieldException, IllegalAccessException { + + blankField(enumClass, "enumConstantDirectory"); + blankField(enumClass, "enumConstants"); + } + + private static void blankField(Class enumClass, String fieldName) + throws NoSuchFieldException, IllegalAccessException { + + for (Field field : Class.class.getDeclaredFields()) { + if (field.getName().contains(fieldName)) { + field.setAccessible(true); + setFailsafeFieldValue(field, enumClass, null); + break; + } + } + } +}