[문제]

중복 확인을 위해

쿼리에서 카운트 조회 시 오류 발생

이클립스 에러 내용 : java.util.HashMap cannot be cast to java.lang.Integer

 

[해결]

쿼리의 resultType="int"로 변경

<select id="쿼리아이디" resultType="int">
    SELECT  COUNT(컬럼)
    FROM 테이블
    WHERE SYS_ID = 조건
</select>

 

[원인]

쿼리의 resultType="map"이었음

<select id="쿼리아이디" resultType="map">
SELECT  COUNT(컬럼)
FROM 테이블
WHERE SYS_ID = 조건
</select>

[에러메세지]

java.lang.NullPointerException: Cannot invoke "ntree.bd.bdm103.BDM103P_TSub04DAO.InsertCMU032TH(java.util.Map)" because "this._dao" is null

 

[원인]

해당 Service.java에 @Autowired 가 주석처리 되어있어서 dao가 null이었다.

유지보수 중이어서 그냥 있는거에서 추가 중이었는데, 왜 안되나 DAO가 널인건 또 뭔가 했더니 주석처리가 되어있었다.

원래는 41번줄, 42번줄이 둘 다 주석처리가 되어있었는데 42번줄만 주석 풀고 41번줄은 냅뒀더니 에러가 나왔다.

 

[테스트 내용]

스프링부트에서 cron을 사용해 9시에서 18시까지 1시간 마다 스케줄이 돌게 하려면 어떻게 해야 할까?

내가 생각한 내용은 

1. cron="0 0/59 * * * *"

2. cron="0 0 9-18/1 * * *"

 

[테스트 코드]

/**
 * 실행주기: 60분
 * 실행횟수: 1
 * 실행시작: 09시~18시
 * ----------------
 */
@Scheduled(cron="0 0/59 * * * *")
public void TEST_TIME() {
// ------------------------------------------------------------
// #00.기본로그-시작
logger.debug("[][{}]", "");
// ------------------------------------------------------------
System.out.println("1시간 주기 테스트 시작");
System.out.println(new Date().toString());
System.out.println("1시간 주기 테스트 끝");
// ------------------------------------------------------------
// #99.기본로그-종료
logger.debug("[][{}]", "");
// ------------------------------------------------------------
}
/**
 * 실행주기: 60분
 * 실행횟수: 1
 * 실행시작: 09시~18시
 * ----------------
 */
@Scheduled(cron="0 0 9-18/1 * * *")
public void TEST_TIME2() {
// ------------------------------------------------------------
// #00.기본로그-시작
logger.debug("[][{}]", "");
// ------------------------------------------------------------
System.out.println("1시간 주기 테스트2 시작");
System.out.println(new Date().toString());
System.out.println("1시간 주기 테스트2 끝");
// ------------------------------------------------------------
// #99.기본로그-종료
logger.debug("[][{}]", "");
// ------------------------------------------------------------
}

[결과]

[22-11-16 11:59:00.009][scheduler-7] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME:714] - [][]
1시간 주기 테스트 시작
Wed Nov 16 11:59:00 KST 2022
1시간 주기 테스트 끝
[22-11-16 11:59:00.009][scheduler-7] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME:721] - [][]
[22-11-16 12:00:00.004][scheduler-11] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME:714] - [][]
[22-11-16 12:00:00.010][scheduler-19] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME2:735] - [][]
1시간 주기 테스트 시작
Wed Nov 16 12:00:00 KST 2022
1시간 주기 테스트 끝
[22-11-16 12:00:00.023][scheduler-11] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME:721] - [][]
1시간 주기 테스트2 시작
Wed Nov 16 12:00:00 KST 2022
1시간 주기 테스트2 끝
[22-11-16 12:00:00.023][scheduler-19] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME2:742] - [][]
[22-11-16 12:59:00.052][scheduler-3] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME:714] - [][]
1시간 주기 테스트 시작
Wed Nov 16 12:59:00 KST 2022
1시간 주기 테스트 끝
[22-11-16 12:59:00.052][scheduler-3] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME:721] - [][]
[22-11-16 13:00:00.003][scheduler-6] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME:714] - [][]
1시간 주기 테스트 시작
Wed Nov 16 13:00:00 KST 2022
1시간 주기 테스트 끝
[22-11-16 13:00:00.006][scheduler-6] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME:721] - [][]
[22-11-16 13:00:00.052][scheduler-16] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME2:735] - [][]
1시간 주기 테스트2 시작
Wed Nov 16 13:00:00 KST 2022
1시간 주기 테스트2 끝
[22-11-16 13:00:00.052][scheduler-16] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME2:742] - [][]
 
[결론]

1. cron="0 0/59 * * * *" 은 59분에 한번 나오고 00분에 한번 더 나와서 최종으로 2번씩 나오는데

2. cron="0 0 9-18/1 * * *" 는 00분에만 최종으로 1번씩 나와서 

원하는 결과를 더욱 충족 시킨다.

 

System.out.println(">>>>>2022.05.26 최윤성");
System.out.println(inData.toString());
System.err.println("@@@@@@@@@@@@@@@@@@@@err.최윤성");
System.out.println(">>>>>2022.05.26 최윤성");

[결과]

@@@@@@@@@@@@@@@@@@@@err.최윤성
>>>>>2022.05.26 최윤성
{HPC_CD=1, INSP_NO=20210210000017, HND_NO=01012341234, ROW_TYPE=0}
>>>>>2022.05.26 최윤성

 

[내생각]

system.out.println 보다 system.err.println이 먼저 보여진다(왜 그럴까...??), 

그리고 system.err.println은 붉은 글씨로 나타난다.

+ Recent posts