본문 바로가기

IT87

MessageSource 기능을 static 메서드로 사용하기 스프링부트에서 개발 진행 시 MessageSource를 구현하여 YMAL에 등록한 메시지를 사용한다. (예를 들면 messageSource.getMessage... 이런 식으로) 그런데 이렇게 되면 메시지를 사용하는 모든 소스에 MessageSource를 의존성 주입을 받아야 하기 때문에 소스코드가 지저분해진다. 그래서 MessageSource를 의존성 주입을 받지 않고, static 메서드로 선언하여 사용하는 방법에 대해 알아볼 것이다. 우선 이번 실습을 진행하기 위해서는 MessageSouruce가 구현되어 있어야 가능하다. MessageSource 구현 : package com.config; import net.rakugakibox.util.YamlResourceBundle; import org.s.. 2022. 3. 18.
Spring Batch 기동 시 JOB 상태를 STARTED에서 FAILED 로 변경하기 이번 글에서는 Spring Batch 기동 시 배치 상태를 STARTED에서 FAILED로 변경하는 방법에 대해 알아볼 것이다. Spring Batch 를 개발하다 보면, 코드 검증 등을 위해서 WAS 재기동하는 경우가 많다. 그런데 Spring Batch의 특정 Job이 실행 중일 때 재기동을 하게 되면 해당 Job은 STARTED 상태로 남아있게 되며, 만약 Job의 중복 실행을 방지하는 코드가 들어가 있게 되면, STARTED 상태인 Job은 실행이 되지 않게 된다. 따라서 매 재기동 시마다 STARTED인 상태의 Job을 FAILED나 COMPLETED 상태로 변경한 후 Job을 실행시켜야 하는 번거로움이 발생한다. 이런 번거로움을 해결하기 위해서는 기동 시 배치 상태를 STARTED에서 FAIL.. 2022. 3. 17.
SqlSessionFactoryBean setMapperLocations에 mapper.xml 여러 개 등록하기 이번 글에서는 스프링부트에서 mybatis 사용 시, SqlSessionFactoryBean의 setMapperLocations 메소드에 mapper.xml을 여러 개 등록하는 방법에 대해 알아볼 것이다. 우선 스프링부트 서비스에서 DB에 접근하기 위해서는 application.yml 파일에 DB 접속정보를 작성하게 되는데, 여러 개의 DB에 접근해야 하는 경우는 별도의 Java Config 작성 후, @MapperScan 어노테이션에 해당 DB 에 접근하는 SQL mapper 인터페이스의 패키지 위치를 작성하고, SqlSessionFactoryBean의 setMapperLocations 메소드로 mapper.xml의 위치를 지정해주게 된다. package com.project.common.config;.. 2022. 3. 17.
sftp를 활용하여 파일 리스트를 가져오는 shell script 만들기 이번 글에서는 linux 환경에서 sftp를 활용하여 여러 파일을 가져오는 쉘을 만들어 볼 것이다. 해당 쉘을 정상적으로 수행시키기 위해서는 쉘 수행 서버에서 원격지 서버로 비밀번호 없이 sftp 접속이 가능하도록 설정해줘야 한다(예를 들면 ssh-keygen 등록 등) 1. 쉘 실행 순서 1) 동일 이름의 쉘 동시수행 체크 2) 파일 리스트 추출(아래 쉘에서는 FILE이라는 이름으로 시작하는 txt 파일 추출) 3) 파일 리스트를 sftp 명령어를 수행해서 원격 디렉토리에서 로컬 디렉토리로 가져옴 2. 쉘 스크립트 내용 #!/bin/bash TODAY=`date +%Y/%m/%d-%H:%M:%S` REMOTE_ADDR="[원격지 IP 주소]" REMOTE_USER=[원격지 유저ID] REMOTE_DIR.. 2022. 3. 3.
QUARTZ 스케쥴러에서 PREV_FIRE_TIME, NEXT_FIRE_TIME, START_TIME 조회하기 QUARTZ 스케쥴러의 테이블 중 QRTZ_TRIGGERS 테이블에는 트리거의 PREV_FIRE_TIME(이전 수행시간), NEXT_FIRE_TIME(다음 수행시간), START_TIME(시작시간) 등이 저장되어 있다. 하지만 데이터가 1970-01-01부터 경과한 밀리세컨드 형식으로 들어가 있기 때문에 해당 컬럼의 데이터를 조회하기 위해서는 아래 쿼리처럼 데이터를 조회해야 한다. SELECT TRIGGER_NAME , TO_CHAR(TO_DATE('19700101', 'yyyymmdd') + (PREV_FIRE_TIME/(24*60*60*1000) + 9/24), 'yyyy/mm/dd hh24:mi:ss') AS PREV_FIRE_TIME , TO_CHAR(TO_DATE('19700101', 'yyyy.. 2022. 3. 3.
ORACLE BLOB 데이터 조회 ORACLE에서 컬럼 타입이 BLOB 인 경우, 해당 컬럼의 데이터를 조회하기 위해서는 아래와 같이 쿼리를 실행하면 된다. SELECT UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR([컬럼명])) FROM [테이블]; 2022. 3. 3.
[에러 해결]jackson-dataformat-yaml 사용 시 java.lang.NoClassDefFoundError 및 java.lang.NoSuchMethodError 에러 해결 스프링부트 프로젝트에서 log4j2 설정파일을 보통 xml로 설정하는데, xml 대신 yml로 사용할 경우 빌드툴에 jackson-dataformat-yaml 과 jackson-databind를 추가해줘야 한다. 그런데 이 두개의 버전이 불일치할 경우 다음과 같은 에러가 발생한다 Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ser/std/ToStringSerializerBase 해당 에러가 발생하는 사유는 jackson-dataformat-yaml과 jackson-databind, 그리고 그 밑에 속한 jackson-core와 jackson-annotations의 버전인 불일치하기 때문에 발생하는 문제다. 내가 추가한.. 2021. 6. 8.