* EhCache는 경량의 빠른 캐시 엔진으로 확장/분산 기능을 지원하며 높은 품질을 제공.
* xml 설정
<ehcache>
<diskStore path="java.io.tmpdir"/>
<cache name="simpleBeanCache"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
</ehcache>
* Cache 조회하기
CacheManager cacheManager = CacheManager.create();
Cache cache = cacheManager.getCache("simpleCacheBean");
* Cache 생성/수정하기
CacheManager cacheManager = CacheManager.create();
Cache cache = cacheManager.getCache("simpleCacheBean");
cache.put(newElement);
* Cache 삭제하기
CacheManager cacheManager = CacheManager.create();
cache.remove("SimpleCacheBean");
Java - 문자열로된 숫자 자리수 채우기
* String.format 을 사용하여 빈 자리를 0으로 채울 수 있다.
* 사용예
System.out.pringln( String.format("%03d", 3) ); => 003
System.out.pringln( String.format("%02d", 2) ); => 02
System.out.pringln( String.format("%02d", 10) ); => 10
* 사용예
System.out.pringln( String.format("%03d", 3) ); => 003
System.out.pringln( String.format("%02d", 2) ); => 02
System.out.pringln( String.format("%02d", 10) ); => 10
Oracle - 테이블 락 확인하기
* 현재 테이블에 락이 걸려있는지 조회할 수 있다.
* 락 테이블 조회하기
SELECT
B.OBJECT_NAME, B.OWNER, B.OBJECT_TYPE
, A.XIDUSN, A.SESSION_ID, A.LOCKED_MODE
FROM V$LOCKED_OBJECT A, DBA_OBJECTS B
WHERE A.OBJECT_ID = B.OBJECT_ID
;
* 특정 테이블 락 여부 확인하기
SELECT
A.SID, A.SERIAL#
, B.TYPE, C.OBJECT_NAME
FROM V$SESSION A, V$LOCK B, DBA_OBJECTS C
WHERE A.SID=B.SID
AND B.ID1=C.OBJECT_ID
AND B.TYPE='TM'
AND C.OBJECT_NAME = '테이블명'
;
* 락 테이블 조회하기
SELECT
B.OBJECT_NAME, B.OWNER, B.OBJECT_TYPE
, A.XIDUSN, A.SESSION_ID, A.LOCKED_MODE
FROM V$LOCKED_OBJECT A, DBA_OBJECTS B
WHERE A.OBJECT_ID = B.OBJECT_ID
;
* 특정 테이블 락 여부 확인하기
SELECT
A.SID, A.SERIAL#
, B.TYPE, C.OBJECT_NAME
FROM V$SESSION A, V$LOCK B, DBA_OBJECTS C
WHERE A.SID=B.SID
AND B.ID1=C.OBJECT_ID
AND B.TYPE='TM'
AND C.OBJECT_NAME = '테이블명'
;
Oracle - 한 쿼리로 INSERT 혹은 UPDATE 하기
* 테이블에 데이터 추가시 조건에 해당하는 값이 존재하면 해당 행을 UPDATE하고,
없으면 INSERT 하는 경우 사용
* 사용법
MERGE INTO [ schema. ] { table | view } [ t_alias ]
USING { [ schema. ] { table | view } | subquery } [ t_alias ]
ON ( condition )
WHEN MATCHED THEN
UPDATE SET column = { expr | DEFAULT }
[, column = { expr | DEFAULT } ]...
[ DELETE where_clause ]
WHEN NOT MATCHED THEN
INSERT [ (column [, column ]...) ]
VALUES ({ expr [, expr ]... | DEFAULT })
- INTO : DATA가 UPDATE되거나 INSERT 될 테이블
- USING : 비교할 SOURCE 테이블 혹은 서브쿼리.
INTO절의 테이블과 동일하거나 다를 수 있음.
- ON : UPDATE나 INSERT를 하게 될 조건.
해당 조건을 만족하는 DATA가 있으면 WHEN MATCHED 절 실행
, 없으면 WHEN NOT MATCHED 절 실행.
- WHEN MATCHED : ON 조건절이 TRUE인 ROW에 수행 할 내용.
(UPDATE, DELETE 포함 될 수 있음)
- WHEN NOT MATCHED : ON 조건절에 맞는 ROW가 없을 때 수행할 내용.
(INSERT)
없으면 INSERT 하는 경우 사용
* 사용법
MERGE INTO [ schema. ] { table | view } [ t_alias ]
USING { [ schema. ] { table | view } | subquery } [ t_alias ]
ON ( condition )
WHEN MATCHED THEN
UPDATE SET column = { expr | DEFAULT }
[, column = { expr | DEFAULT } ]...
[ DELETE where_clause ]
WHEN NOT MATCHED THEN
INSERT [ (column [, column ]...) ]
VALUES ({ expr [, expr ]... | DEFAULT })
- INTO : DATA가 UPDATE되거나 INSERT 될 테이블
- USING : 비교할 SOURCE 테이블 혹은 서브쿼리.
INTO절의 테이블과 동일하거나 다를 수 있음.
- ON : UPDATE나 INSERT를 하게 될 조건.
해당 조건을 만족하는 DATA가 있으면 WHEN MATCHED 절 실행
, 없으면 WHEN NOT MATCHED 절 실행.
- WHEN MATCHED : ON 조건절이 TRUE인 ROW에 수행 할 내용.
(UPDATE, DELETE 포함 될 수 있음)
- WHEN NOT MATCHED : ON 조건절에 맞는 ROW가 없을 때 수행할 내용.
(INSERT)
Java - JSch를 사용하여 SFTP 파일 업로드 하기
* JSch 라이브러리를 사용하여 SFTP 접속 및 파일 업로드
(http://www.jcraft.com/jsch/)
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpATTRS;
import com.jcraft.jsch.SftpException;
JSch jsch = new JSch();
Session session = null;
ChannelSftp channelSftp = null;
/**
* SFTP 접속
* @param ip 아이피
* @param port 포트
* @param id 로그인아이디
* @param pw 로그인비밀번호
*/
public void connect(String ip, int port, String id, String pw)
{
// 연결 시도
session = jsch.getSession(id, ip, port);
session.setPassword(pw);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
// 방식 설정
Channel channel = session.openChannel("sftp");
channel.connect();
channelSftp = (ChannelSftp)channel;
}
/**
* SFTP 접속 종료
*/
public void disconnect()
{
if (channelSftp != null)
channelSftp.disconnect();
if (session != null)
session.disconnect();
}
/**
* 폴더 확인 및 생성
* @param dir 폴더명(경로포함)
*/
public void checkDir(String dir)
{
SftpATTRS attrs = null;
// 폴더 체크
try
{
attrs = channelSftp.stat(dir);
}
catch(Exception e)
{
attrs = null;
}
// attrs가 널이면 폴더 존재 X
if (attrs == null)
{
channelSftp.mkdir(dir); // 폴더 생성
}
}
/**
* 폴더 이동
* @param dir 폴더명(경로포함)
*/
public void moveDir(String dir)
{
// 폴더 이동..
channelSftp.cd(dir);
}
/**
* 파일 업로드.
* @param fileName 파일명(경로포함)
* @param fileData 파일내용
* @return
*/
public boolean fileUpload(String fileName, byte[] fileData)
{
OutputStream os = channelSftp.put(fileName);
os.write(fileData);
os.flush();
os.close();
}
(http://www.jcraft.com/jsch/)
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpATTRS;
import com.jcraft.jsch.SftpException;
JSch jsch = new JSch();
Session session = null;
ChannelSftp channelSftp = null;
/**
* SFTP 접속
* @param ip 아이피
* @param port 포트
* @param id 로그인아이디
* @param pw 로그인비밀번호
*/
public void connect(String ip, int port, String id, String pw)
{
// 연결 시도
session = jsch.getSession(id, ip, port);
session.setPassword(pw);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
// 방식 설정
Channel channel = session.openChannel("sftp");
channel.connect();
channelSftp = (ChannelSftp)channel;
}
/**
* SFTP 접속 종료
*/
public void disconnect()
{
if (channelSftp != null)
channelSftp.disconnect();
if (session != null)
session.disconnect();
}
/**
* 폴더 확인 및 생성
* @param dir 폴더명(경로포함)
*/
public void checkDir(String dir)
{
SftpATTRS attrs = null;
// 폴더 체크
try
{
attrs = channelSftp.stat(dir);
}
catch(Exception e)
{
attrs = null;
}
// attrs가 널이면 폴더 존재 X
if (attrs == null)
{
channelSftp.mkdir(dir); // 폴더 생성
}
}
/**
* 폴더 이동
* @param dir 폴더명(경로포함)
*/
public void moveDir(String dir)
{
// 폴더 이동..
channelSftp.cd(dir);
}
/**
* 파일 업로드.
* @param fileName 파일명(경로포함)
* @param fileData 파일내용
* @return
*/
public boolean fileUpload(String fileName, byte[] fileData)
{
OutputStream os = channelSftp.put(fileName);
os.write(fileData);
os.flush();
os.close();
}
Java - 문자열로된 날짜 유효성 체크하기
* java.text.DateFormat.setLenient(boolean lenient)를 활용하여 체크.
lenient를 false로 설정하면 유효한 날짜가 아닐 경우 ParseException이 발생.
import java.text.SimpleDateFormat;
/**
* 문자열로 된 날짜 형식이 유효한지 체크
* @param dateStr
* @return 유효하면 true, 아니면 false
*/
public static boolean checkDateYYYYMMDD(String dateStr)
{
try {
SimpleDateFormat sdfYYYYMMDD = new SimpleDateFormat("yyyyMMdd");
sdfYYYYMMDD .setLenient(false);
sdfYYYYMMDD .parse(dateStr); //ex) dateStr="20201232"이면 ParseException 발생
return true;
} catch(ParseException e) {
return false;
} catch(Exception e) {
return false;
}
}
lenient를 false로 설정하면 유효한 날짜가 아닐 경우 ParseException이 발생.
import java.text.SimpleDateFormat;
/**
* 문자열로 된 날짜 형식이 유효한지 체크
* @param dateStr
* @return 유효하면 true, 아니면 false
*/
public static boolean checkDateYYYYMMDD(String dateStr)
{
try {
SimpleDateFormat sdfYYYYMMDD = new SimpleDateFormat("yyyyMMdd");
sdfYYYYMMDD .setLenient(false);
sdfYYYYMMDD .parse(dateStr); //ex) dateStr="20201232"이면 ParseException 발생
return true;
} catch(ParseException e) {
return false;
} catch(Exception e) {
return false;
}
}
스프링 프레임워크에서 HttpServletRequest, HttpSession 객체 직접 가져오기
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
ServletRequestAttributes sra = (ServletRequestAttributes)RequestContextHolder.currentRequestAttributes();
// HttpServletReqeust 객체
HttpServletReqeust httpServletReqeust = sra.getRequest();
// HttpSession 객체
HttpSession httpSession = sra.getRequest().getSession();
피드 구독하기:
글 (Atom)