자바 프로그램 중복 실행으로 문제가 발행하지 않게 하기 위한 대처 방법입니다.
Spring Batch는 자동으로 PORT 설정이되어 실행되므로 문제가 없을것이라 판단되나, 일반적인 자바 배치 프로그램은 실행중 여부에 상관없이 몇개든 실행이 되도록 되어있습니다.
중복 실행 방지에 대한 다양한 방법이 있으나
1. 프로그램실행시 Temp 파일 체크 및 생성
2. PORT 점유
3. DB Flag 설정
등등....
가장 안정적이며 확실한 방법중 하나인 PORT 점유에 대해 설명하려고 합니다.
임의의 PORT를 점유하여 사용하게 되며, 프로그램 실행시 해당 PORT 사용 가능여부에 따라 배치 실행, 종료가 결정됩니다.
반드시 실행중인 다른 프로그램이 사용하지 않는 PORT를 사용해야하며, 해당 서버 정보에 명시를 해두어야 PORT 중복으로 인한 다른 프로그램 실행 못함.. 현상이 발생하지 않습니다.
import java.net.DatagramSocket;
public static void main(String[] args) {
boolean canRun = true; // 로직 수행 가능여부 설정
try{
DatagramSocket ds = new DatagramSocket(4444); // 포트점유
} catch (SocketException e) {
System.out.println("동일한 프로그램이 동작중입니다. 포트 : " + 4444);
e.printStackTrace();
canRun = false;
}
if(canRun){
쓰레드 런... 및 프로그램 실행 시작 로직 입력
}
}
'JAVA > JAVA' 카테고리의 다른 글
JAVA 금액 한글로 변환 (0) | 2020.06.04 |
---|---|
java String.format() VS DecimalFormat 속도 비교 (0) | 2020.06.04 |
enum 메소드 처리 (0) | 2020.06.04 |
NIO 파일, 폴더 생성 (0) | 2020.06.04 |
폴더내 파일 검색 (0) | 2020.06.04 |