JVM

JVM/JPA

[JPA] 트랜잭션 overrideafterCommit, beforeCommit ...

커밋 이전/이후에 추가적인 작업을 진행하고 싶을 때가 있다. @Transactional fun test() { TransactionSynchronizationManager.registerSynchronization(object : TransactionSynchronizationManager(), TransactionSynchronization { override fun afterCommit() { // ... 로직 } }) // ... db 작업 시작 } 트랜잭션 시작하는 메소드 맨 위에 위와 같이 TransactionSynchronizationManager.registerSynchronization를 사용하면 된다. TransactionSynchronization 에서 다양한 메소드가 있으니 본인이 필..

JVM/Java

[Gradle] 버전 별 Java, Kotlin 호환 버전 확인

빌드툴인 gradle 또한 java, kotlin이 호환되는 버전이 버전 별로 달랐다.. https://docs.gradle.org/7.6/userguide/compatibility.html Compatibility Matrix Gradle is tested with Android Gradle Plugin 4.1, 4.2, 7.0, 7.1, 7.2, 7.3 and 7.4. Alpha and beta versions may or may not work. docs.gradle.org https://gradle.org/releases/ Gradle | Releases Find binaries and reference documentation for current and past versions of Gradl..

JVM/Spring

[Spring] h2 설정

OS M1 MAX macOS Ventura 13.2 PROJECT java - 11 kotlin - 1.6.21 spring - 2.7.8 build.gradle.kts dependencies { ... runtimeOnly("com.h2database:h2") } application.yml spring: h2: console: enabled: true path: /h2-console datasource: url: jdbc:h2:mem:test username: sa password: driverClassName: org.h2.Driver platform: h2 접근 url - http://localhost:8080/h2-console 에러사항 원인 데이터베이스가 존재하지 않아서 발생되는 문제입니다. ..

JVM/Spring

[Spring] 그냥되는 건 없다 1 - Spring-Boot AutoConfiguration

😏 서론 spring-boot 2.6.6 기준 스프링부트에서 빈 기본설정파일들을 intellij로 아무리 눌러도 불러오는 곳을 쉽게 찾지 못한 김에 정리하게 된 기본설정하는 곳. 🧐 본론 133개의 설정파일들이 정의되어 있다. 그런데 AopAutoConfiguration, BatchAutoConfiguration과 같이 기본적으로 의존성이 추가되어 있지 않는 녀석들이 있다. @ConditionalOnProperty - property가 참일 경우 컨테이너 등록 @ConditionalOnClass - 해당 클래스가 경로에 존재할 경우 컨테이너 등록 @ConditionalOnMissingClass - 해당 클래스가 존재하지 않을 경우 컨테이너 등록 이처럼 스프링부트와 호환된다고 명시된 녀석들의 의존성을 추가..

JVM/Spring

[Spring] CaffeineCache key는 Object

🥺 본론 key가 Object이기 때문에 key를 지정할 때 타입을 신경써서 해야된다. 자칫 Integer로 지정했다가 String으로 조회하게 되면 조회가 안된다.. 🙂 결론 개인적으로는 하나의 타입으로 통일 (ex - String)하는 게 헷갈리지 않고 좋을 것 같다.

JVM/Kotlin

[kotlin] kotest After/before each not working for withData

😏 서론 글작성 기준 kotest version 5.5 data-driven test를 위해 withData를 사용했을 때 afterEach / beforeEach가 예상과 달리 동작하지 않았다. 🤩 본론 간단하게 kotest의 TestType부터 살펴보고 넘어가보자면.. Type Description Container 다른 테스트를 포함할 수 있는 컨테이너 Test 중첩 테스트를 포함할 수 없는 리프 테스트 Dynamic Container, Test 둘 다 일 수 있으며, Propery test, data test와 같은 기능을 통해 테스트가 동적으로 추가될 때 사용 withData는 보다시피 TestType이 Dynamic을 사용하고 있다. 공식문서에서 나온 내용으로 살펴보자면 Dynamic은 모든 ..

JVM/Spring

[Spring] Spring의 ObjectMapper 쉽게 Custom 만들기

🤔 서론 프로젝트를 진행하다 보면 objectMapper를 새로 만들어서 할 일이 종종 생긴다. 이때 새로 만들게 되면 Spring에서 기본적으로 제공해주는 옵션들을 찾아 동일하게 적용한 후에 내가 원하는 옵션들을 추가하고 싶을 수 있다. 어떻게 쉽게 만들 수 있을까? 😏 본론 스프링에서 기본적으로 설정하는 properties와 기본적으로 넣어주는 모듈들이다. 이런 걸 할 때마다 일일이 찾아 설정해 주고, 반복적으로 하는 건 매우 귀찮은 일이다. 스프링에서 기본으로 제공하는 ObjectMapper를 쉽게 만드는 법은 간단하다. fun objectMapper(): ObjectMapper = Jackson2ObjectMapperBuilder().build() 위처럼 Jackson2ObjectMapperBui..

JVM/Kotlin

Kotest 5.1 이상 버전 java.lang.NoClassDefFoundError: kotlinx/coroutines/test/TestDispatcher 해결방법

😳 서론 사용 중인 버전 정보 kotlin - 1.6 kotest - 5.5.4 spring boot - 2.6.x 😎 본론 kotest 도입을 위해 모듈을 추가해서 테스트를 돌렸더니 아래와 같은 에러가 발생했다. 원인 kotest 5.1 버전부터 kotlin-coroutiones 1.6 버전을 사용하고 있다. 하지만, spring boot 2.6.x 대의 kotlin-coroutiones 버전은 1.5.2 를 사용하고 있어서 문제가 발생했다. 해결방법 io.spring.dependency-management 에서 정의한 기본 버전정보를 변경해주면 된다. build.gradle.kts extra["kotlin-coroutines.version"] = "1.6.0" or gradle.properties k..

Hyo Kim
'JVM' 카테고리의 글 목록 (2 Page)