diff --git a/src/main/java/kr/xit/fims/biz/ec/service/EcNatlNewspaperService.java b/src/main/java/kr/xit/fims/biz/ec/service/EcNatlNewspaperService.java index 01364957..901f03ac 100644 --- a/src/main/java/kr/xit/fims/biz/ec/service/EcNatlNewspaperService.java +++ b/src/main/java/kr/xit/fims/biz/ec/service/EcNatlNewspaperService.java @@ -105,8 +105,8 @@ public class EcNatlNewspaperService implements IEcNatlNewspaperService { //------------------------------------------------------------- // interface table save //------------------------------------------------------------- - xmlDto.setPetiNoC(xmlDto.getPetiNoC().replaceAll("[-: ]", "")); - xmlDto.setCivilNoC(xmlDto.getCivilNoC().replaceAll("[-: ]", "")); + //xmlDto.setPetiNoC(xmlDto.getPetiNoC().replaceAll("[-: ]", "")); + //xmlDto.setCivilNoC(xmlDto.getCivilNoC().replaceAll("[-: ]", "")); xmlDto.setPetiRegD(xmlDto.getPetiRegD().replaceAll("[-: ]", "")); xmlDto.setPetiEndD(xmlDto.getPetiEndD().replaceAll("[-: ]", "")); xmlDto.setAncRegD(xmlDto.getAncRegD().replaceAll("[-: ]", "")); diff --git a/src/main/java/kr/xit/fims/biz/rt/web/RtCrackdownMgtController.java b/src/main/java/kr/xit/fims/biz/rt/web/RtCrackdownMgtController.java index ff69c024..8bfa4d11 100644 --- a/src/main/java/kr/xit/fims/biz/rt/web/RtCrackdownMgtController.java +++ b/src/main/java/kr/xit/fims/biz/rt/web/RtCrackdownMgtController.java @@ -49,7 +49,7 @@ public class RtCrackdownMgtController { /** *
메소드 설명: 단건 자료 상세 조회
- * @param vo + * @param dto * @return String 요청처리 후 응답객체 * @author: 최정민 * @date: 2022. 9. 20. diff --git a/src/main/java/kr/xit/framework/support/listener/ThreadPoolContextLoaderListener.java b/src/main/java/kr/xit/framework/support/listener/ThreadPoolContextLoaderListener.java index b1032a46..8af9517d 100644 --- a/src/main/java/kr/xit/framework/support/listener/ThreadPoolContextLoaderListener.java +++ b/src/main/java/kr/xit/framework/support/listener/ThreadPoolContextLoaderListener.java @@ -1,10 +1,13 @@ package kr.xit.framework.support.listener; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; /** * web.xml에 등록하여야 사용 할 수 있다 @@ -13,7 +16,7 @@ import java.util.concurrent.Executors; */ public class ThreadPoolContextLoaderListener implements ServletContextListener { - private static final int NUMBER_OF_THREADS = 30; + private static final int NUMBER_OF_THREADS = Runtime.getRuntime().availableProcessors(); public static final String THREADPOOL_ALIAS = "threadPoolAlias"; @Override @@ -29,106 +32,91 @@ public class ThreadPoolContextLoaderListener implements ServletContextListener { final ExecutorService threadPool = (ExecutorService) event.getServletContext().getAttribute(THREADPOOL_ALIAS); threadPool.shutdownNow(); } -} + /** + * 참조 + * https://palpit.tistory.com/entry/Java-%EB%A9%80%ED%8B%B0-%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%8A%A4%EB%A0%88%EB%93%9C%ED%92%80ThreadPool + * https://codechacha.com/ko/java-executors/ + * @param args + */ + public static void main(String[] args) { + TestParallelExcutorService service = new TestParallelExcutorService(); + System.out.println("NUMBER_OF_THREADS = " + NUMBER_OF_THREADS); -/* + service.submit("job1-1"); + service.submit("job1-2"); + service.submit("job1-3"); + service.submit("job1-4"); -package com.gsshop.base.jfile; + service.submit2("job2-1"); + service.submit2("job2-2"); + service.submit2("job2-3"); + service.submit2("job2-4"); -import java.io.File; -import java.io.FileInputStream; -import java.io.PrintWriter; -import java.util.List; -import java.util.concurrent.ExecutorService; + for (int i = 0 ; i < 8; i++) { + String result = service.take(); + System.out.println(result); + } -import jwork.web.modules.jfile.service.FileUploadCompletedEventListener; + System.out.println("end"); + service.close(); + } -import org.apache.commons.net.PrintCommandListener; -import org.apache.commons.net.ftp.FTP; -import org.apache.commons.net.ftp.FTPClient; -import org.apache.commons.net.ftp.FTPReply; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.util.StringUtils; -import org.springframework.web.context.ContextLoader; + private static class TestParallelExcutorService { + //웹에서 사용시 ServletContext에 저장한 pool 사용 + //private final ExecutorService executor = (ExecutorService)ContextLoader.getCurrentWebApplicationContext().getServletContext().getAttribute(ThreadPoolContextLoaderListener.THREADPOOL_ALIAS); + private final ExecutorService executor = Executors.newFixedThreadPool(NUMBER_OF_THREADS); + private final BlockingQueue blockQueue = new ArrayBlockingQueue<>(10); -import com.gsshop.base.listener.ThreadPoolContextLoaderListener; -import com.gsshop.common.Globals; + public TestParallelExcutorService() { + } -public abstract class AbstractFTPUploadTemplate implements FileUploadCompletedEventListener { - - Logger logger = LoggerFactory.getLogger(getClass()); + // 익명 함수 처리 + public void submit(String job) { + executor.submit(new Runnable() { + public void run() { - @Override - public void uploadCompleted(final String fileId, final String sourceRepositoryPath, - final String savedFileName, final String originalFileName, final String beanId, - final String etc01, final String etc02, final String etc03, final String etc04, final String etc05) { - - logger.debug("fileId : {}", fileId); - logger.debug("sourceRepositoryPath : {}", sourceRepositoryPath); - logger.debug("maskingFileName : {}", savedFileName); - logger.debug("originalFileName : {}", originalFileName); - logger.debug("beanId : {}", beanId); - - ExecutorService threadPool = (ExecutorService)ContextLoader.getCurrentWebApplicationContext().getServletContext().getAttribute(ThreadPoolContextLoaderListener.THREADPOOL_ALIAS); - - threadPool.execute(new Runnable() { - @Override - public void run() { - - FTPClient ftp = new FTPClient(); - ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out))); - - try { - ftp.connect(Globals.PRD_FTP_WEBSERVER_IP); - int reply = ftp.getReplyCode(); - if (FTPReply.isPositiveCompletion(reply)) { - ftp.login(Globals.PRD_FTP_WEBSERVER_USER, Globals.PRD_FTP_WEBSERVER_PASSWORD); - if(logger.isDebugEnabled()) { - logger.debug(Globals.PRD_FTP_WEBSERVER_IP+" connect success !!! "); - } - ftp.setFileType(FTP.BINARY_FILE_TYPE); - - ftp.changeWorkingDirectory(Globals.PRD_FTP_WEBSERVER_UPLOAD_PATH); - - if(StringUtils.hasText(etc01)) { - String[] tokens = etc01.split("\\/"); - - String tempWorkingDirectory = Globals.PRD_FTP_WEBSERVER_UPLOAD_PATH; - for(String token : tokens) { - tempWorkingDirectory = tempWorkingDirectory+"/"+token; - ftp.makeDirectory(tempWorkingDirectory); - ftp.changeWorkingDirectory(tempWorkingDirectory); - } - } - - List list = getFTPUploadFileVO(fileId, sourceRepositoryPath,savedFileName, originalFileName, beanId,etc01, etc02, etc03, etc04, etc05); - if(list != null) { - for(FTPUploadFileVO vo : list) { - ftp.storeFile(vo.getRemoteFileName(), new FileInputStream(new File(sourceRepositoryPath+"/"+vo.getLocalFileName()))); - } - } - - if(logger.isDebugEnabled()) {logger.debug(" ftp transfer success !!! ");} + String threadName = Thread.currentThread().getName(); + System.out.println("finished " + job); + String result = job + ", " + threadName; + try { + blockQueue.put(result); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); } - else { - ftp.disconnect(); - } - if(ftp.isConnected()) { - ftp.logout(); - ftp.disconnect(); - } - } catch (Exception e) { - e.printStackTrace(); - } + } + }); + } + + // lamda식 처리 + public void submit2(String job) { + executor.submit(() -> { + String threadName = Thread.currentThread().getName(); + System.out.println("finished " + job); + String result = job + ", " + threadName; + try { + blockQueue.put(result); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + }); + } + + public String take() { + try { + return blockQueue.take(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new IllegalStateException(e); } - }); + } + + public void close() { + executor.shutdown(); + // List unfinishedTasks = executor.shutdownNow(); + // if (!unfinishedTasks.isEmpty()) { + // System.out.println("모든 태스크가 종료 되기 전에 서비스가 중단 되었습니다[미완료 태스크수 : " + unfinishedTasks.size()); + // } + } } - - abstract public List getFTPUploadFileVO(String fileId, final String sourceRepositoryPath, - final String savedFileName, String originalFileName, String beanId, - String etc01, String etc02, String etc03, String etc04, String etc05); - } -*/ diff --git a/src/main/webapp/WEB-INF/jsp/fims/biz/ec/ecCtznSttemntMgtForm.jsp b/src/main/webapp/WEB-INF/jsp/fims/biz/ec/ecCtznSttemntMgtForm.jsp index 3eb96ae7..6f7f923e 100644 --- a/src/main/webapp/WEB-INF/jsp/fims/biz/ec/ecCtznSttemntMgtForm.jsp +++ b/src/main/webapp/WEB-INF/jsp/fims/biz/ec/ecCtznSttemntMgtForm.jsp @@ -129,7 +129,7 @@ return {interfaceSeqN: d.interfaceSeqN, ctznSttemntDetailSn: d.ctznSttemntDetailSn} }) pageNav = new PageNavigation(GRID, gridDatas, props.rowKey); - fnBiz.pagePopup('detail', pageNav.gridInfo); + fnBiz.pagePopup('detail', pageNav.gridInfo.curRowData); } ,onClickCreateAnswerPopup: function(props){ const rowData = props.grid.getRow(props.rowKey); diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index a4690a96..efa8d68c 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -75,6 +75,13 @@ org.springframework.web.context.request.RequestContextListener + + +