diff --git a/tss_integrate/pom.xml b/tss_integrate/pom.xml
index b0e2e3d..6259959 100644
--- a/tss_integrate/pom.xml
+++ b/tss_integrate/pom.xml
@@ -14,7 +14,7 @@
TSS
TSS Integrate
- 18
+ 1.8
0.0.1-SNAPSHOT
true
diff --git a/tss_integrate/src/main/java/kr/gmtc/tss/config/TopicsList.java b/tss_integrate/src/main/java/kr/gmtc/tss/config/TopicsList.java
new file mode 100644
index 0000000..2f49afa
--- /dev/null
+++ b/tss_integrate/src/main/java/kr/gmtc/tss/config/TopicsList.java
@@ -0,0 +1,20 @@
+package kr.gmtc.tss.config;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Configuration
+@ConfigurationProperties("kafka")
+@Getter
+@Setter
+public class TopicsList {
+
+ private Map topics = new HashMap();
+
+}
diff --git a/tss_integrate/src/main/java/kr/gmtc/tss/config/TssConfig.java b/tss_integrate/src/main/java/kr/gmtc/tss/config/TssConfig.java
index 84775da..aa449d2 100644
--- a/tss_integrate/src/main/java/kr/gmtc/tss/config/TssConfig.java
+++ b/tss_integrate/src/main/java/kr/gmtc/tss/config/TssConfig.java
@@ -1,12 +1,16 @@
package kr.gmtc.tss.config;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import java.util.Queue;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import kr.gmtc.tss.data.vo.CctvPtzVO;
+import kr.gmtc.tss.elkdata.vo.CctvPtzVO;
import kr.gmtc.tss.util.ArrayBlockingLoggingQueue;
@Configuration("TssConfig")
@@ -14,10 +18,7 @@ public class TssConfig {
@Value("${kafka.bootstrapServers}")
public String bootstrapServers;
-
- @Value("${kafka.topic.9}")
- public String topic;
-
+
@Value("${kafka.groupId}")
public String consumeGroupId;
@@ -39,14 +40,14 @@ public class TssConfig {
@Value("${data-make-time}")
public int dataMakeTime;
- @Value("${flag.database}")
- public boolean flagDataBase;
+ // @Value("${flag.database}")
+ // public boolean flagDataBase;
@Value("${flag.datafile}")
public boolean flagDataFile;
- @Value("${flag.file}")
- public boolean flagFile;
+ // @Value("${flag.file}")
+ // public boolean flagFile;
@Value("${client.queue-count:10000}")
public int queueCount=100000;
@@ -73,7 +74,7 @@ public class TssConfig {
public String classification;
@Value("${swclassification}")
- public String swclassification;
+ public String[] swclassification;
@Value("${logclassification}")
public String logclassification;
@@ -93,9 +94,17 @@ public class TssConfig {
@Bean(name = "rcvQueue")
- public Queue getRcvQueue() {
- this.rcvQueue = new ArrayBlockingLoggingQueue<>(queueCount);
- return rcvQueue;
+ public Map> getRcvQueueMap() {
+
+ Map> queList = new HashMap>();
+
+ for(String swIdx : swclassification){
+ Queue rcvQueue = new ArrayBlockingLoggingQueue<>(queueCount);
+ queList.put(swIdx, rcvQueue);
+ }
+
+ return queList;
+
}
@Bean(name = "messageBodyQueue")
diff --git a/tss_integrate/src/main/java/kr/gmtc/tss/data/DataInsertRunnable.java b/tss_integrate/src/main/java/kr/gmtc/tss/data/DataInsertRunnable.java
deleted file mode 100644
index 80b9818..0000000
--- a/tss_integrate/src/main/java/kr/gmtc/tss/data/DataInsertRunnable.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package kr.gmtc.tss.data;
-
-import java.util.Queue;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import kr.gmtc.tss.data.vo.TrackVO;
-import kr.gmtc.tss.db.FusionBatchManager;
-
-public class DataInsertRunnable implements Runnable {
- private Logger logger = LoggerFactory.getLogger(this.getClass());
-
- Queue trackQueue;
- Queue trackLastQueue;
- private boolean isRunning = false;
- private int batchInsertSize = 1000;
-
- FusionBatchManager batchInsertManager;
- private long sleepMillis;
- private String topic;
-
- public DataInsertRunnable(Queue trackQueue, Queue trackLastQueue, int batchInsertSize, FusionBatchManager batchInsertManager, long sleepMillis, String topic) {
- this.trackQueue=trackQueue;
- this.trackLastQueue=trackLastQueue;
- this.batchInsertSize=batchInsertSize;
- this.batchInsertManager=batchInsertManager;
- this.sleepMillis=sleepMillis;
- this.topic=topic;
- }
-
- @Override
- public void run() {
- isRunning = true;
-
- while (isRunning) {
- try {
- TrackVO [] chunkTrackArr = getChunkTrackArr(trackQueue);
- // TrackVO [] chunkTrackLastArr = getChunkTrackArr(trackLastQueue);
- if(isRunning) {
- if(chunkTrackArr.length > 0) {
- batchInsertManager.insertTrackData(chunkTrackArr,topic);
- }
-
- /*
- * if(chunkTrackLastArr.length > 0) {
- * batchInsertManager.insertTrackLastData(chunkTrackLastArr); }
- */
- }
- } catch (Exception e) {
- e.printStackTrace();
- logger.info("[DataInsertRunnable] Data Insert error : " ,e);
- }
-
- sleep(sleepMillis);
- }
- }
-
- private TrackVO [] getChunkTrackArr(Queue sqlQueue) {
- int loopCnt=0;
- if(sqlQueue.size()>batchInsertSize) {
- loopCnt=batchInsertSize;
- }else {
- loopCnt=sqlQueue.size();
- }
-
- TrackVO [] chunkArr = new TrackVO[loopCnt];
-
- for (int i = 0; i < loopCnt; i++) {
- chunkArr[i]=sqlQueue.poll();
- }
- return chunkArr;
- }
-
- private void sleep(long millis) {
- try {
- Thread.sleep(millis);
- } catch (InterruptedException e) {
- logger.debug("[TargetManager] sleep error : " +e.getLocalizedMessage());
- }
- }
-
- public void setRunning(boolean isRunning) {
- this.isRunning = isRunning;
- }
-}
\ No newline at end of file
diff --git a/tss_integrate/src/main/java/kr/gmtc/tss/db/DbConfig.java b/tss_integrate/src/main/java/kr/gmtc/tss/db/DbConfig.java
deleted file mode 100644
index c60a94b..0000000
--- a/tss_integrate/src/main/java/kr/gmtc/tss/db/DbConfig.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package kr.gmtc.tss.db;
-
-import javax.sql.DataSource;
-
-import org.apache.ibatis.session.SqlSessionFactory;
-import org.mybatis.spring.SqlSessionFactoryBean;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.boot.jdbc.DataSourceBuilder;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.transaction.annotation.EnableTransactionManagement;
-
-@Configuration
-@EnableTransactionManagement
-public class DbConfig {
-
- @Bean(name = "dbDataSource")
- @ConfigurationProperties(prefix = "spring.db.datasource")
- public DataSource db5DataSource() {
-
- return DataSourceBuilder.create().build();
- }
-
- @Bean(name="batchSqlSessionFactory")
- public SqlSessionFactory batchSqlSessionFactoryBean(@Qualifier("dbDataSource") DataSource batchDataSource, ApplicationContext applicationContext)
- throws Exception {
- SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
- factoryBean.setDataSource(batchDataSource);
- factoryBean.setConfigLocation(applicationContext.getResource("classpath:/mybatis-config.xml"));
- return factoryBean.getObject();
- }
-
-}
-
diff --git a/tss_integrate/src/main/java/kr/gmtc/tss/db/FusionBatchManager.java b/tss_integrate/src/main/java/kr/gmtc/tss/db/FusionBatchManager.java
deleted file mode 100644
index a44f1dd..0000000
--- a/tss_integrate/src/main/java/kr/gmtc/tss/db/FusionBatchManager.java
+++ /dev/null
@@ -1,553 +0,0 @@
-package kr.gmtc.tss.db;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.text.SimpleDateFormat;
-import java.util.Queue;
-
-import org.apache.ibatis.session.SqlSession;
-import org.apache.ibatis.session.SqlSessionFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import kr.gmtc.tss.data.vo.TrackVO;
-import kr.gmtc.tss.main.MainServer;
-import kr.gmtc.tss.status.CountStatus;
-
-public class FusionBatchManager {
- private final Logger logger = LoggerFactory.getLogger(this.getClass());
-
- private SqlSessionFactory sqlSessionFactory;
- private SqlSession session;
-
- private Queue sqlLogTrackQueue;
- private Queue sqlLogTrackLastQueue;
-
- private int savePos=0;
- private int saveLast=0;
- private int saveStatic=0;
- private int failPos=0;
- private int failLast=0;
- private int failStatic=0;
-
- private String topic;
-
- /**
- * mybatis batch insert 속도가 느려서 jdbc 객체를 직접 제어함.
- * @param sqlSessionFactory
- * @param dbType
- */
- public FusionBatchManager(SqlSessionFactory sqlSessionFactory, Queue sqlLogTrackQueue,Queue sqlLogTrackLastQueue) {
- this.sqlSessionFactory = sqlSessionFactory;
- this.sqlLogTrackQueue = sqlLogTrackQueue;
- this.sqlLogTrackLastQueue = sqlLogTrackLastQueue;
-// this.dbType=dbType;
- openSession(false);
- }
-
- public void openSession(boolean forceOpen) {
- if(session==null||forceOpen)
- session = sqlSessionFactory.openSession();
- }
-
- public void closeSession() {
- if(session!=null)
- session.close();
- }
-
- public void insertTrackData(TrackVO[] setTrackVOArr, String topic) {
- this.topic = topic;
- insertTrackData(setTrackVOArr,true);
- }
-
-
- private void insertTrackData(TrackVO[] setTrackVOArr, boolean isBatch) {
- int fusionFail = 0;
- int fusionSave = 0;
- int bboxFail = 0;
- int bboxSave = 0;
-
- if(setTrackVOArr==null || setTrackVOArr.length<1) {
-// logger.error("insertDataAll - No tableList data");
- logger.debug("insertTrackData(Batch:"+isBatch+") - no data in setTrackVOArr");
- return;
- }
-// Table destTable=tableList.get(0);
-
-
-// String sql = "INSERT INTO " + destTable.getName() + " (" + getInsertCols(destTable.getColumnList()) + ") "
-// + "VALUES (" + getInsertValueParams(destTable.getColumnList()) + ")";
-
-// String tableName = "SACP_CCTV_TRACK_" + setTrackVOArr[0].getRecptnDt().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
-
-// SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
-// String now_dt = format.format(setTrackVOArr[0].getRecptnDt());
-
-// String tableName = "SACP_TRACK_" + now_dt;
- String tableName = "SACP_TRACK_FUSION";
- String sql = "INSERT INTO "+tableName+" (" +
- " TRGT_ID, RECPTN_DT, LAT, LON, SPD, COS, TRGT_TY, REVISN_LAT, REVISN_LON, MODE_S_CD, SSR_CD, CLSGN, AC_REG_NO, REGISTER_ID) " +
- " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
-
- String subTableName = "SACP_FUSION_TRACK_BBOX";
- String subSql = "INSERT INTO "+subTableName+" (" +
- " TRGT_ID, RECPTN_DT, CCTV_ID, BBOX_TOP_LEFT_X, BBOX_TOP_LEFT_Y, BBOX_BOTTOM_RIGHT_X, BBOX_BOTTOM_RIGHT_Y, CRDNT_X, CRDNT_Y, REGISTER_ID) " +
- " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
-
- PreparedStatement ps=null;
- PreparedStatement stmt=null;
- Connection con=null;
- try {
-
- con=session.getConnection();
- if(con.isClosed() || !con.isValid(1)) {
- closeSession();
- openSession(true);
- con=session.getConnection();
- }
- con.setAutoCommit(false);
-
- ps = con.prepareStatement(sql);
- stmt = con.prepareStatement(subSql);
- for (int i = 0; i < setTrackVOArr.length; i++) {
- TrackVO vo = setTrackVOArr[i];
- //입력으로 처리
- //중복 입력 방지를 위함
- vo.setInserted(true);
- try {
- ps.setString(1, vo.getTargetId());
- ps.setString(2, vo.getReceptionDate());
- ps.setString(3, vo.getLatitude());
- ps.setString(4, vo.getLongitude());
- ps.setString(5, vo.getSpeed());
- ps.setString(6, vo.getCourse());
- ps.setString(7, vo.getTargetType());
- ps.setString(8, vo.getCorrectedLatitude());
- ps.setString(9, vo.getCorrectedLongitude());
- ps.setString(10, vo.getModeSCode());
- ps.setString(11, vo.getSsrCode());
- ps.setString(12, vo.getCallsign());
- ps.setString(13, vo.getTailNumber());
- ps.setString(14, "fusion");
-
- ///건별 입력
- if(!isBatch) {
- ps.execute();
- savePos++;
- fusionSave++;
- }
-
- try {
- for (int j = 0; j < vo.getBbox().size(); j++) {
- stmt.setString(1, vo.getTargetId());
- stmt.setString(2, vo.getReceptionDate());
- stmt.setString(3, vo.getBbox().get(j).getCctvId());
- stmt.setString(4, vo.getBbox().get(j).getLeftTopX());
- stmt.setString(5, vo.getBbox().get(j).getLeftTopY());
- stmt.setString(6, vo.getBbox().get(j).getRightBottomX());
- stmt.setString(7, vo.getBbox().get(j).getRightBottomY());
- stmt.setString(8, vo.getBbox().get(j).getPx());
- stmt.setString(9, vo.getBbox().get(j).getPy());
- stmt.setString(10, "fusion");
-
- ///건별 입력
- if(!isBatch) {
- stmt.execute();
- bboxSave++;
- } else {
- stmt.addBatch();
- }
- }
- } catch(Exception ex) {
- bboxFail++;
- throw ex;
- }
-
- //배치 입력
- if(isBatch) {
- ps.addBatch();
- }
- } catch (Exception e) {
- logger.debug("Data Insert error UseSqlLog");
- sqlLogTrackQueue.add(vo);
- failPos++;
- fusionFail++;
- }
-
- }
-
- if(isBatch) {
- ps.executeBatch();
- stmt.executeBatch();
- //배치 insert는 arr 건수만큼
- //savePos+=setTrackVOArr.length;
- //logger.info("savePos 건수"+savePos);
-
- fusionSave = setTrackVOArr.length - fusionFail;
- logger.info("topic {} 배치 저장 건수 {} : 실패 건수 {}", topic, fusionSave, fusionFail);
- } else {
- logger.info("topic {} 단건 저장 건수 {} : 실패 건수 {}", topic, fusionSave, fusionFail);
- }
-
- con.commit();
-
- } catch (Exception e) {
- logger.error("insertData(Batch:"+isBatch+") error", e);
- if(isBatch) {
- logger.error("Try insert row by row");
- insertTrackData(setTrackVOArr, false);
- }
-
- } finally {
-
- if(ps!=null) {
- try {
- ps.close();
- } catch (SQLException e) {
- logger.error("insertData(Batch:"+isBatch+") PreparedStatement close error",e);
- }
- }
-
- if(stmt!=null) {
- try {
- stmt.close();
- } catch (SQLException e) {
- logger.error("insertData(Batch:"+isBatch+") PreparedStatement close error",e);
- }
- }
- if(con!=null) {
- try {
- con.commit();
- con.setAutoCommit(true);
- } catch (SQLException e) {
- logger.error("insertData(Batch:"+isBatch+") commit error",e);
- }
- }
- }
- }
-
- public void insertTrackLastData(TrackVO[] setTrackVOArr) {
- insertTrackLastData(setTrackVOArr,true);
- }
-
- private void insertTrackLastData(TrackVO[] setTrackLastVOArr, boolean isBatch) {
-
- if(setTrackLastVOArr == null || setTrackLastVOArr.length<1) {
-// logger.error("mergeDynamicLastAll - No tableList data");
- logger.debug("insertTrackLastData(Batch:"+isBatch+") - no data in setTrackVOArr");
- return;
- }
-
- String tableName = "SACP_TRACK_LAST";
- String sql = "";
-
- if(MainServer.LAST_DATA_CNT > 0) {
- sql = " UPDATE " + tableName
- + " SET AC_REG_NO=?, CLSGN=?, SSR_CD=?, MODE_S_CD=?, RECPTN_DT=?, SENSOR_TY=?, CAT_TY=?, LAT=?, LON=?, "
- + " SPD=?, COS=?, ALT=?, VIRTL_TRGT_AT=?, TRACK_CRRCT_AT=?, TRACK_CNFDNC=?, CCTV_ID=?, X_CNTS=?, Y_CNTS=?, "
- + " UPDUSR_ID=?, UPDT_DT=TO_TIMESTAMP(SYSDATE,'yyyyMMdd')"
- + " WHERE TRGT_ID = ?";
- }else {
- sql = " INSERT INTO " + tableName
- + " ( TRGT_ID, AC_REG_NO, CLSGN, SSR_CD, MODE_S_CD, RECPTN_DT, SENSOR_TY, CAT_TY, "
- + " LAT, LON, SPD, COS, ALT, VIRTL_TRGT_AT, TRACK_CRRCT_AT, TRACK_CNFDNC, CCTV_ID, "
- + " X_CNTS, Y_CNTS, REGISTER_ID)"
- + " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
- }
-
- System.out.println("last sql = "+sql);
- PreparedStatement ps=null;
- Connection con=null;
- try {
- con=session.getConnection();
- if(con.isClosed() || !con.isValid(1)) {
- closeSession();
- openSession(true);
- con=session.getConnection();
- }
- con.setAutoCommit(false);
-
-// Statement statement = session.getConnection().createStatement();
- ps = con.prepareStatement(sql);
-
- for (int i = 0; i < setTrackLastVOArr.length; i++) {
- TrackVO vo = setTrackLastVOArr[i];
- //입력으로 처리
- //중복 입력 방지를 위함
- vo.setInserted(true);
-
- try {
- if(MainServer.LAST_DATA_CNT > 0) {
- }else {
- }
-
- ///건별 입력
- if(!isBatch) {
- ps.execute();
- saveLast++;
-
- if(MainServer.LAST_DATA_CNT == 0 ) {
- MainServer.LAST_DATA_CNT = 1;
- }
- }
- } catch (Exception e) {
- logger.debug("Data Insert error UseSqlLog");
- sqlLogTrackLastQueue.add(vo);
- failLast++;
- }
-
- //배치 입력
- if(isBatch) {
- ps.addBatch();
- }
- }
-
- if(isBatch) {
- ps.executeBatch();
-
- if(MainServer.LAST_DATA_CNT == 0 ) {
- MainServer.LAST_DATA_CNT = 1;
- }
-
- //배치 insert는 arr 건수만큼
- saveLast += setTrackLastVOArr.length;
- }
-
- con.commit();
-
-
- } catch (Exception e) {
- logger.error("trackLast(Batch:"+isBatch+") error", e);
- if(isBatch) {
- logger.error("Try insert row by row");
- // insertTrackLastData(setTrackLastVOArr, false);
- }
-
- } finally {
-
- if(ps!=null) {
- try {
- ps.close();
- } catch (SQLException e) {
- logger.error("trackLast(Batch:"+isBatch+") PreparedStatement close error",e);
- }
- }
- if(con!=null) {
- try {
- con.commit();
- con.setAutoCommit(true);
- } catch (SQLException e) {
- logger.error("trackLast(Batch:"+isBatch+") commit error",e);
- }
- }
- }
- }
- public synchronized CountStatus getCountAndSetZero() {
- CountStatus countStatus = new CountStatus(savePos, saveLast, saveStatic, failPos, failLast, failStatic);
-
- savePos = 0;
- saveLast = 0;
- saveStatic = 0;
- failPos = 0;
- failLast = 0;
- failStatic = 0;
-
- return countStatus;
- }
-
- /**
- *
- * 오류 발생시 건/건으로 저장할 수 있도록 수정
- * @param setDynamicVoArr
- */
- /*public void insertData(SetDynamicVO[] setDynamicVoArr) {
-
- if(setDynamicVoArr==null || setDynamicVoArr.length<1) {
-// logger.error("insertDataAll - No tableList data");
- logger.debug("insertData - no data in setDynamicVoArr");
- return;
- }
-// Table destTable=tableList.get(0);
-
-
-// String sql = "INSERT INTO " + destTable.getName() + " (" + getInsertCols(destTable.getColumnList()) + ") "
-// + "VALUES (" + getInsertValueParams(destTable.getColumnList()) + ")";
-
- String tableName = "th_ais_" + setDynamicVoArr[0].getDateTime().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
-
- String sql = "INSERT INTO "+tableName +" (" +
- " ship_id, recv_dt, lon_val, lat_val, sog_val, cog_val, hdg_val, rot_val, zone_id) " +
- " VALUES (?, TO_TIMESTAMP(?,'yyyyMMddhh24miss'), ?, ?, ?, ?, ?, ?, ?)";
-
-
- PreparedStatement ps=null;
- Connection con=null;
- try {
-
- con=session.getConnection();
- if(con.isClosed() || !con.isValid(1)) {
- closeSession();
- openSession(true);
- con=session.getConnection();
- }
- con.setAutoCommit(false);
-
-
-// Statement statement = session.getConnection().createStatement();
- ps = con.prepareStatement(sql);
-
- for (int i = 0; i < setDynamicVoArr.length; i++) {
- SetDynamicVO vo = setDynamicVoArr[i];
- //입력으로 처리
- //중복 입력 방지를 위함
- vo.setInserted(true);
-
-
- try {
-
- ps.setString(1, vo.getShipID());
- // ps.setDate(2, vo.getDateTime());
- ps.setString(2, vo.getDateTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
- ps.setDouble(3, vo.getLongitude());
- ps.setDouble(4, vo.getLatitude());
- ps.setDouble(5,vo.getSog());
- ps.setDouble(6,vo.getCog());
- ps.setInt(7, vo.getHeading());
- ps.setInt(8, vo.getRot());
- ps.setString(9, vo.getZoneId());
- // ps.addBatch();
- ps.execute();
-
- } catch (Exception e) {
-// logger.error("insertData error", e);
-
-
- }
-
- }
-// ps.executeBatch();
-
- con.commit();
-
-
- } catch (Exception e) {
- logger.error("insertData error", e);
- } finally {
-
- if(ps!=null) {
- try {
- ps.close();
- } catch (SQLException e) {
- logger.error("insertData PreparedStatement close error",e);
- }
- }
- if(con!=null) {
- try {
- con.commit();
- con.setAutoCommit(true);
- } catch (SQLException e) {
- logger.error("insertData commit error",e);
- }
- }
- }
-
- }*/
-
-// /**
-// * Insert colums 성성
-// * @param columnList
-// * @return
-// */
-// private String getInsertCols(List columnList) {
-// StringBuilder result=new StringBuilder();
-// for (int i = 0; i < columnList.size(); i++) {
-// result.append(columnList.get(i).getName());
-// //마지막에는 ,를 안붙이기 위해
-// if(i!=columnList.size()-1)
-// result.append(",");
-// }
-// return result.toString();
-// }
-//
-//
-// private String getInsertValueParams(List columnList) {
-// StringBuilder result=new StringBuilder();
-// for (int i = 0; i < columnList.size(); i++) {
-// result.append(setInsertParam(columnList.get(i)));
-// //마지막에는 ,를 안붙이기 위해
-// if(i!=columnList.size()-1)
-// result.append(",");
-// }
-// return result.toString();
-// }
-//
-// /**
-// * 파라미터는 ? 로 표현하여 ps.set~~~으로...
-// * @param column
-// * @return
-// */
-// private String setInsertParam(Column column) {
-// switch (dbType) {
-// case ORACLE:
-// return setInsertParamOracle(column);
-// default:
-// //mariadb default
-// return setInsertParamMariadb(column);
-// }
-//
-//
-// }
-//
-//
-// private String setInsertParamMariadb(Column column) {
-//
-// if(column.isCustom()) {
-// return column.getCustomStr();
-// }else {
-// switch (column.getColumnTypeName()) {
-// case "DATE":
-// case "DATETIME":
-// return "STR_TO_DATE(?,'%Y%m%d%H%i%S')";
-// case "TIMESTAMP":
-// case "TIMESTAMP_WITH_TIMEZONE":
-// return "STR_TO_DATE(?,'%Y%m%d%H%i%S%f')";
-// case "TIME":
-// case "TIME_WITH_TIMEZONE":
-// return "STR_TO_DATE(?,'%H%i%S')";
-// default:
-// return "?";
-// }
-// }
-// }
-//
-//
-//
-//
-// private String setInsertParamOracle(Column column) {
-//
-// if(column.isCustom()) {
-// return column.getCustomStr();
-// }else {
-// switch (column.getColumnTypeName()) {
-// case "DATE":
-// case "DATETIME":
-// return "TO_DATE(?,'yyyymmddhh24miss')";
-// case "TIMESTAMP":
-// case "TIMESTAMP_WITH_TIMEZONE":
-// return "TO_TIMESTAMP(?,'yyyymmddhh24missff')";
-// case "TIME":
-// case "TIME_WITH_TIMEZONE":
-// return "TO_DATE(?,'hh24miss')";
-// default:
-// return "?";
-// }
-// }
-//
-// }
-
-
-
-
-
-}
diff --git a/tss_integrate/src/main/java/kr/gmtc/tss/elkdata/runnable/AiVoiceMetaRunnable.java b/tss_integrate/src/main/java/kr/gmtc/tss/elkdata/runnable/AiVoiceMetaRunnable.java
new file mode 100644
index 0000000..27f3eee
--- /dev/null
+++ b/tss_integrate/src/main/java/kr/gmtc/tss/elkdata/runnable/AiVoiceMetaRunnable.java
@@ -0,0 +1,153 @@
+package kr.gmtc.tss.elkdata.runnable;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Queue;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import kr.gmtc.tss.elkdata.vo.RuteVO;
+import kr.gmtc.tss.elkdata.vo.RuteVO.MvPoints;
+
+public class AiVoiceMetaRunnable implements Runnable {
+
+ private Logger logger = LoggerFactory.getLogger(this.getClass());
+
+ Queue rcvQueue;
+ Queue dataFileQueue;
+
+ private boolean isRunning = false;
+ private int listChunkSize = 100;
+ private long sleepMillis;
+
+ private String classification;
+ private String swclassification;
+ private String logclassification;
+
+ public AiVoiceMetaRunnable(Queue rcvQueue
+ , Queue dataFileQueue
+ , int listChunkSize
+ , long sleepMillis
+ , String classification, String swclassification, String logclassification) {
+ this.rcvQueue = rcvQueue;
+ this.dataFileQueue = dataFileQueue;
+ this.listChunkSize = listChunkSize;
+ this.sleepMillis = sleepMillis;
+ this.classification = classification;
+ this.swclassification = swclassification;
+ this.logclassification = logclassification;
+ }
+
+ @Override
+ public void run() {
+ isRunning = true;
+
+ while (isRunning) {
+ try {
+
+ int loopCnt = 0;
+ if(rcvQueue.size()>listChunkSize) {
+ loopCnt = listChunkSize;
+ }else {
+ loopCnt = rcvQueue.size();
+ }
+ String [] chunkArr = new String[loopCnt];
+
+ for (int i = 0; i < loopCnt; i++) {
+ chunkArr[i] = rcvQueue.poll();
+ }
+
+ for (int i = 0; i < chunkArr.length; i++) {
+ parseAndEnqueue(chunkArr[i]);
+ }
+
+ } catch (Exception e) {
+ if (e.getMessage() != null) {
+ logger.debug("[ParseTarget] Parsing Error Message : " ,e);
+ } else {
+ logger.info("[ParserThread] Parsing Error Call Stack" ,e);
+ }
+ }
+
+ sleep(sleepMillis);
+ }
+ }
+
+ private void parseAndEnqueue(String result) {
+ try {
+ ArrayList histroyQueue = new ArrayList();
+ ObjectMapper mapper = new ObjectMapper();
+
+ Map convert = mapper.readValue(result, new TypeReference