Nov 5, 2010 - 윈도우 스케쥴러로 매시간 자바실행시키기

윈도우 스케쥴러로 매시간 자바실행시키기

부제 : 배치 프로세스

  1. javac 명령어로 클래스 파일 만들기 - 생략
  2. java 실행시킬 실행파일(BAT) 파일 생성
    패턴 1. classpath 에 모든 정보를 담은 뒤, java에서는 해당 클래스파일만 불러옵니다.
    set classpath=.;{불러올 패키지의 classes 및 jar 경로}
    
    set path=.;C:/project/java/jdk1.5.0_16/bin
    set classpath=.
    set classpath=%classpath%;C:/test/com.sec.admin_home/WEB-INF/classes
    set classpath=%classpath%;C:/test/com.sec.admin_home/WEB-INF/lib
    set classpath=%classpath%;C:/test/com.sec.admin_home/WEB-INF/lib/xxx.jar
    java com.sec.admin.batch.biz.process.TestProcess
    pause
    
패턴 2. 기본 classpath 만 설정한 후 java 명령어 중 classpath 설정하는 명령어로 class를 불러옵니다.
Java –cp {불러올 classes 및 jar 경로}
set path=.;C:/project/java/jdk1.5.0_16/bin
java -cp C:/test/com.sec.admin_home/WEB-INF/classes com.sec.admin.batch.biz.process.TestProcess
pause
  1. lib 설정
    패턴 1. java 자체 lib 안에 jar 파일을 넣어 인식시킵니다.
    set classpath=.;{불러올 패키지의 classes 및 jar 경로}
    
    C:/project/java/jdk1.5.0_16/jre/lib/ext
    jdk의 ext 폴더에 실행할때 필요한 jar 파일을 넣습니다.
    
    단점 : 서버의 lib 과 자바의 lib 이 충돌납니다. 독립적으로 사용할 경우에 추천합니다.
    
    패턴 2. 사용하는 모든 jar 파일을 classpath 로 불러옵니다.
    Java –cp {불러올 classes 및 jar 경로}
    
    set classpath=%classpath%;C:/test/com.sec.admin_home/WEB-INF/lib
    set classpath=%classpath%;C:/test/com.sec.admin_home/WEB-INF/lib/xxx.jar
    
  2. 윈도우 스케쥴러에 해당 bat 파일 등록 –생략

Jul 16, 2010 - String을 InputStream으로..

String을 InputStream으로 만들어야 하는 경우가 종종 발생합니다.
라이브러리가 파일이나 네트웍과 같은 곳으로부터 읽어서 처리할 수 있도록 전달인자를 InputStream으로 되어 있습니다.

하지만 이 파일의 내용이 DB와 같은 곳에 있다면?? DB에서 읽으면 문자열일텐데.. 이걸 다시 파일에 기록하고 InputStream을 열어서 전달하기는 좀 무리가 있습니다.

일단.. String으로 읽어서 String을 InputStream으로 바꾸는 방법을 찾아보면, JDK 1.0에 StringBufferInputStream라는 클래스가 있지만 이 녀석은 deprecated되었습니다. 대신 StringReader를 사용하라고 합니다.

InputStream과 Reader의 차이는 InputStream은 byte 단위로 읽는 녀석이지만, Reader는 문자(character) 단위로 읽는 녀석입니다.

ASCII의 경우는 동일하겠지만, 유니코드가 섞여 있다면 처리 방식이 달라질 수 있습니다.
문자열이라는 것은 인코딩이 되어 있으니까 String은 InputStream이 아닌 Reader로 읽는 것이 맞는 말입니다.

그래서 StringBufferInputStream은 말 그대로 폐기.. 또 다른 방법은.. Apache Ant 라이브러리에 있는 StringInputStream을 사용하는 방법이 있습니다.

사용 방법은 아주 간단합니다.
Ant를 다운받고 lib 경로 아래에 있는 ant.jar 파일을 CLASS_PATH에 넣어주고 쓰면 됩니다.

String 문자열을 생성자에 넣어주고 객체를 생성하면 그 문자열이 InputStream 처럼 동작합니다. (뭐.. 그야 InputStream을 상속받았으니까 =ㅅ=;;)

아래 예제는 LDIF 파일을 읽어서 처리하는 부분이다. LDIFReader는 InputStream을 필요로 합니다.

String ldifContent = "...";
StringInputStream is = new StringInputStream(ldifContent, "UTF-8");
LDIFReader reader = new LDIFReader(is, LDAPConnection.LDAP_V3);
LDAPMessage msg = reader.readMessage();

소스 코드를 보니 내부적으로는 Reader를 InputStream으로 변환해주는 org.apache.tools.ant.util.ReaderInputStream을 상속받아 org.apache.tools.ant.filters.StringInputStream을 구현했습니다.

이거 나중에 유용하게 사용할 수도 있겠네요.

그리고 이런 라이브러리가 귀찮거나 기능에 비해 거추장스럽다면.. 간단하게 byte 배열을 이용하는 방법도 있다. String을 byte 배열로 변환한 후 ByteArrayInputStream을 사용하면 되빈다.
위의 코드에서 InputStream을 생성해 주는 부분만 아래와 같이 바꿉시다!

ByteArrayInputStream is = new ByteArrayInputStream(ldifContent.getBytes("UTF-8"));

참조


Jun 7, 2010 - SQL*Loader 프로그래밍

엑셀의 많은 데이터를 오라클에 저장하는 방법입니다. 물론 저는 특정 클라이언트가 업로드한 파일을 그대로 DB에 넣기 위해 사용합니다.

내용은 간단합니다.

  1. 엑셀파일을 다른 이름으로 저장해서 확장자를 csv 로 저장합니다. (미리 csv 에서 지정된 구분자를 정할 수 있습니다. ‘tab’ , ‘,’ 등..)

  2. 오라클에 데이터를 저장할 수 있는 테이블을 데이터 형식에 맞게 만들어줍니다.

  3. 새로운 메모장으로 SQL*Loader 컨트롤 파일을 작성해줍니다. ``` LOAD DATA INFILE ‘c:\biotest.csv’ // 파일 경로 APPEND // 저장 옵션 (기존의 행에 추가, 이외에 REPLACE, INSERT, TRUNCATE 가 있음) INTO TABLE BIO_TEST // 데이터를 저장할 테이블명 FIELDS TERMINATED BY ‘,’ // 데이터간의 구분 문자 (“Entrez_GeneID”,”Gene_symbol”,”Ka”,”Ks”,”Ka/Ks”,”5’UTR”,”CDS”) // 테이블 속성명

```

  1. 명령어 창에서

    sqlldr userid/passwd@db_ip control=’파일경로’ 를 쳐줍니다.

  2. 데이터 저장이 완료되면 컨트롤파일명과 동일한 텍스트파일이 생성되어 저장 결과를 확인합니다.

참조