본문 바로가기
반응형

분류 전체보기82

@Scheduled 핸들러 SchedulingConfigurer를 구현하여 설정을 관리할 수 있다. setPoolSize() 사용하여 thread pool을 늘릴 수 있고( default는 단일쓰레드) setErrorHandler()을 통해 Error Handling 할 수 있다. -> Exception 발생시 핸들러 처리 @Configuration public class SchedulerConfig implements SchedulingConfigurer { @Override public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTas.. 2021. 6. 4.
JdbcTemplate 동적 테이블은 JPA에서 불가능하므로, 우회해보자 의존성 org.springframework.boot spring-boot-starter-data-jdbc NamedParameterJdbcTemplate : 파라미터 명으로 쿼리매칭 가능(순서X) private final NamedParameterJdbcTemplate namedParameterJdbcTemplate; (List) namedParameterJdbcTemplate.query(SELECT_QUERY.replace("@TABLE_NAME", table) , new MapSqlParameterSource("id", "test"), new BeanPropertyRowMapper(T.class)); (주의) T class에 Setter가 없다면, 결.. 2021. 6. 4.
JPA 최적화, Hint 쿼리 최적화를 위한 SQL힌트는 JPA에서 제공하고 있지 않다. 따라서 NativeQuery를 사용. JPA 쿼리 힌트는 SQL 힌트가 아닌 JPA 구현체에게 제공하는 힌트로, 기본적으로 JPA가 변경감지에 의해 update 쿼리를 날릴려면 원본을 캐시에 저장하고 관리하는 entity 객체 또한 따로 갖고 있는다. 하여 이를 위해 영속성 컨텍스트는 항상 원본(스냅샷)과 관리하는 사본 객체 두 객체를 메모리에 저장하게 된다. 이게 성능 이슈가 될 수도 있다. 읽기만 할 때는 필요없기 때문에 같은 엔티티 객체를 두 개를 갖는 것은 메모리 비용을 허비할 수가 있다. 그래서 JPA Hint를 통해 읽기 전용이라고 알려주고 캐시에 원본(스냅샷)을 저장하지 않도록 하여 공간 비용을 최적화할 수 있다. @QueryH.. 2021. 6. 4.
JPA 변경/삭제 @Modifying SpringDataJpa에서 deleteByXXX 등의 메소드 사용시 삭제 대상들을 전부 조회하는 쿼리가 1번 발생한다. 삭제 대상들은 1건씩 삭제 된다. cascade = CascadeType.DELETE으로 하위 엔티티와 관계가 맺어진 경우 하위 엔티티들도 1건씩 삭제가 진행된다. -> 해결 : 직접 범위 조건의 삭제 쿼리(JPQL)을 생성 @Transactional @Modifying @Query("delete from Customer c where c.id in :ids") void deleteAllByIdInQuery(@Param("ids") List ids); 기본 함수인 deleteInBatch(Iterable entities) 이용 : 좋은 방법이지만 삭제하고자 하는 Entity들을 메모리.. 2021. 6. 4.
728x90
반응형