본문 바로가기

Spring23

[Spring] QuartzJobBean 으로 스케쥴러 등록 및 사용 매번 까먹어서 기록 1. pom.xml에 라이브러리 추가 https://mvnrepository.com/artifact/org.quartz-scheduler/quartz QuartzJobBean을 상속받은 Job 클래스 구현 /** *스케쥴 Job 실행 클래스 */ public class CloudJobExecutor extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { // TODO Auto-generated method stub // 실제 수행할 로직.. } } Spring-Quartz 설정(context-quartz.xml) - 버젼별로.. 2024. 1. 10.
[Querydsl] Where 절에 case문 사용 querydsl에서도 where절에 case문 사용이 가능하다. 아래처럼 사용한다. 보통 동적으로 조건을 나눠 걸어야할 때 사용하기 때문에, 내 경우는 아예 조건문을 생성하는 기능을 따로 구현하도록 했다. BooleanBuilder 앞뒤에 얼마든지 추가 조건을 붙일 수 있다. BooleanBuilder conditions = new BooleanBuilder(); if (addYn.isSuppCd() && noneNull(this.suppCd, params.getSuppCd())) { // 조건이 true일 경우 in절을 조건절에 넣고 false일 경우 1=1 을 넣어 pass 시킨다. conditions.and(new CaseBuilder().when(params.getCorpRegNo().eq(thi.. 2023. 11. 28.
[AWS RedShift] querydsl 레드시프트에서 나눗셈 때 소수점 표기 올바르게 하는 방법 2가지 레드시프트에서 나눗셈을 하면 정수로 떨어지거나 특정 자리에서 버림처리 해버리는 경우가 발생한다. 이유는, 나눗셈할 때 정수/정수 로 들어왔을 경우 나눗셈 결과가 정수로 떨어지기 때문이다. 해결 방법은 숫자를 분명하게 정수가 아니도록 만들어주는 것이다. 쿼리로 던질 경우는 소수점 처리를 하면 되지만 Querydsl 등에서 파라미터로 던질 때는 아래와 같이 한다. 아래와 같은 식으로 함수를 구성한다고 하면 분모와 분자를 던질 때 1.0을 곱해서 던진다. multiply를 Double형으로 던져도 원하는 결과는 나오지 않는다. public static NumberTemplate divideAndMultiplyAndRound(Integer scale, Integer multiply, Object... args).. 2023. 11. 7.
[Querydsl] Querydsl에서 groupBy에 substring 사용 불가 원인을 확실하게는 모르겠으나, 일반 query 작성 시에는 group by 절에 substring(redshift 함수명 기준)으로 자른 것도 사용 가능하나 querydsl에서는 불가능하다. 위와 같이 세팅후 실행하면 이렇게..!!! 되지 않는다. 레드시프트에서 일반 쿼리문으로는 문제 없는 것을 보면 레드시프트에서 지원하는 라이브러리에서 문제가 있는 것 같은데... 그런 거면 답이 없다. 2023. 9. 22.
Querydsl where 절에 문자열 replace 함수 사용 방법 where절에 사용하기 위해 stringTemplete을 활용한다. /** * sp의 공백을 제거하고 영문을 소문자로 변환하여 리턴한다. * DB값을 변환해서 검색할 때 사용 * * @param sp DB에 입력된 문자열 */ public static StringTemplate removeBlankAndConvertLower(StringPath sp) { return Expressions.stringTemplate("lower(replace({0}, ' ', ''))", sp); } 2023. 3. 8.
Poi 라이브러리에서 wrapText = true 지정하여 2줄 이상의 텍스트를 넣었는데 자동 줄바꿈만 되고 높이가 한 줄 높이 그대로인 경우 자동줄바꿈만 되고 높이가 한줄 높이 그대로인 경우가 있다. 그런 경우 아래처럼 옵션을 주면 자동으로 맞춰준다. currentRow.setHeight((short)-1) SXSSFWorkbook 기준으로 잘 동작하는 것을 확인하였다. 2023. 1. 13.
Poi Library 오류 : The maximum column width for an individual cell is 255 characters. 엑셀 다운로드를 구현하고 스타일을 적용하는 과정에서 아래 오류를 발견했다. The maximum column width for an individual cell is 255 characters. 원인은, Poi 라이브러리에서 지원하는 최대 가로 길이가 255 * 256이기 때문. 255는 글자수를 의미하고 256은 엑셀파일에서 보는 기준 한글자(영어 기준)의 가로 길이다. 즉, 영문 255자까지가 허용되는 컬럼 가로 길이다. 해결은 단순히 최대값의 제한을 걸면 되므로 Math.min(A,B) 로 제한을 걸면 된다. 참고로 한글은 256이 아니라 512로 하면 적절하게 맞는다. 즉 한글은 122자 정도 길이가 한계라고 보면 된다. 이렇게 가로 길이를 제한하고 난 뒤에는 CellStyle을 이용해 wrapT.. 2023. 1. 13.
[JPA] JPA batch insert가 다건을 한 번에 지정해도 row마다 insert가 발생하는 건 해결방안 A db에서 데이터를 가져와 B db에 넣는 배치 작업을 수행할 때 두가지 문제 발생 문제1. insert 하기 전에 select가 실행됨 문제2. repository.saveAll(List) 을 통해 다량의 데이터를 넣는데, 멀티 insert가 되지 않고 행별로 insert가 됨 (십만 개를 넣으면 10만번 select, insert 가 수행되는 상황) select 되는 원인 분석 여러 fk의 조합으로 pk가 되어 있는데, 이 경우 이미 key값이 정해진 것으로 판단하여 insert할 때 update를 해야하는지 확인하는 로직이 존재. 그래서 아래 구문에서 isNew()가 false가 되어 merge가 수행되면서 발생한다. @Transactional @Override public S save(S ent.. 2022. 9. 26.
[JPA] intellij에서 Entity column명에 cannot resolve column 이 뜨고 링크가 안될 때 현상 이렇게 링크가 되지 않고 에러 상태로 표기된다. 실제 실행에는 문제가 없으나 신경쓰인다. 해결방법 View > Tool Windows > Persistence 클릭하면 좌측 프로젝트 부분에 Persistence 메뉴가 열린다. 프로젝트 메뉴에 오른쪽 마우스 클릭 후, Assign Data Sources 클릭 entityManagerFactory에 Select data source에 알맞은 database 소스를 선택해준다. 사라진 것을 확인할 수 있다. 링크도 정상적으로 걸린다. 2022. 8. 5.