개발/Java,Spring 7

SpringBatch에서 @EnableBatchProcessing때문에 Job이 실행되지 않는 문제

개요 (Overview) SpringBatch 3.x에서 Job이 실행되지 않는 문제가 발생했다. We encountered an issue where the Job was not running in SpringBatch 3.x. 문제 (Problem) SpringBoot 3.0 (정확히 v3.0.0-M5)는 부터는 @EnableBatchProcessing을 사용하면 BatchAutoConfiguration.java에서 jobLauncherApplicationRunner bean 생성을 하지 않는다. 나는 Multiple datasource를 사용하고 있기 때문에 datasource, transactionManager를 지정하기 위해 반드시 사용해야 했다. As of SpringBoot 3.0 (prec..

개발/Java,Spring 2023.06.01

Spring Boot 2.x에서 3.x로 업데이트

자바 17 이상으로 변경 asdf 또는 sdkman 등으로 java 17을 설치하고 build.gradle에 sourceCompatibility값을 수정한다. 변경 전 sourceCompatibility = '11' 변경 후 sourceCompatibility = '17' gradle에서 Spring Boot 3.0.5로 변경 build.gradle 변경 전 id 'org.springframework.boot' version '2.x.x' 변경 후 id 'org.springframework.boot' version '3.0.5' gradle에서 querydsl 라이브러리 변경 변경 전 implementation 'com.querydsl:querydsl-core' implementation 'com.que..

개발/Java,Spring 2023.04.04

Spring boot 2.4.5 @AuthenticationPrincipal occurs null

문제 Spring boot 2.4.5로 업그레이드 한 뒤 authentication 값이 null이다. @GetMapping("/api/users/me") public UserResponse getMe(@AuthenticationPrincipal Authentication authentication) { // ... // ... } 해결 PrincipalMethodArgumentResolver를 추가해도 되지만 그냥 @AuthenticationPrincipal annotation을 제거하면 된다. 스프링에서 문서 수정하는걸 깜빡 했나보다. 이슈 링크

개발/Java,Spring 2021.04.30

우아한 테크세미나 - 스프링 배치

배치 사람과 상호작용이 없는 애플리케이션 시간이 얼마나 걸리든 해당 시스템에서 완결이 난다. Web vs Batch Web: 실시간 처리 / 상대적인 속도 / QA 용이성 Batch: 후속 처리 / 절대적인 속도 / QA 복잡성 배치는 QA분들이 테스트하기 힘들기 때문에 반드시 테스트 코드를 작성 해야한다. Spring Batch와 Quartz Quartz: 스케쥴링 프레임워크. ex: 매 시간 / 마지막 주 금요일에 실행 Quartz는 Spring Batch의 보안제 역할이지 대체제가 아니다. 배치 애플리케이션이 필요한 상황 일정 주기로 실행되어야 할 때 실시간 처리가 어려운 대량의 데이터를 처리 할 때 대용량 데이터 처리가 절대적인 요구 사항 스프링 배치 모든 데이터를 메모리에 쌓지 않는 방식이 기본..

개발/Java,Spring 2019.09.27

SpringSecurity에서 anonymous()

Spring에서 테스트를 돌리는 중 Unauthorized(401)가 아닌 Forbidden(403)이 발생하는 문제가 생겼다. @RestController @RequiredArgsConstructor public class PostController { private final PostService postService; @PreAuthorize("isAuthenticated()") @PostMapping("/api/bbs/{name}/posts") public void post(@PathVariable String name, @Valid @RequestBody WritePost request, @AuthenticationPrincipal ExternalUser externalUser) { postSe..

개발/Java,Spring 2019.08.15

Spring Boot 2.x, 3.x Security에서 hasPermission 사용

Spring Boot2.x에서 Spring Security를 이용해 권한을 관리 할 수 있다. 기본적으로 Override된 configure(HttpSecurity http)에서 AntMatcher를 이용해 Role확인을 할 수 있다. 하지만 관리 대상과 요구사항이 많아지면 Role만으로는 문제 해결이 용이하지 않다. 그래서 MethodSecurity를 이용한 권한 관리 방법을 간략히 정리한다. Gradle 설정 compile("org.springframework.boot:spring-boot-starter-security") compile("org.springframework.security:spring-security-oauth2-client") compile("org.springframework.s..

개발/Java,Spring 2019.08.11

SpringBoot Batch에서 JobParameter로 받을 수 있는 Type

개요 SpringBoot Batch에서 JobParameter로 받을 수 있는 타입에 대하여 이야기 합니다. 이슈 SpringBoot Batch 실행 시 JobParameter로 받을 수 있는 타입은 한정되어 있다. String, Boolean, Integer, Date. 하지만 지금은 2019년.. Date는 상당히 골치아프다. 나는 LocalDate를 사용하고 싶었다. 그래서 아래와 같이 JobParameter를 받아줄 수 있는 Class를 만들었다. public class MyJobParameter { @Value("#{jobParameters[requestDate]}") private LocalDate requestDate; public void setRequestDate(String reques..

개발/Java,Spring 2019.05.17