Skip to content

Commit

Permalink
refactor: ๐Ÿ”ง Redisson Auto Configuration ์ œ๊ฑฐ ๋ฐ ๋„๋ฉ”์ธ ๋ชจ๋“ˆ ์˜์กด ์ œ์–ด (#151)
Browse files Browse the repository at this point in the history
* feat: pennyway domain config group ์—ด๊ฑฐ ํƒ€์ž… ์ •์˜

* feat: domain config ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ์–ด๋…ธํ…Œ์ด์…˜ ์ •์˜

* feat: domain config import select ๊ตฌํ˜„

* chore: redisson @configuration ์ œ๊ฑฐ, config group ์ƒ์ˆ˜ ์ถ”๊ฐ€

* rename: distributed lock aop -> aspect

* chore: batch ๋ชจ๋“ˆ redisson auth configure exclude

* chore: auto configurate ์˜ต์…˜ domain yml๋กœ ์ด์ „

* chore: redisson ๊ด€๋ จ ํด๋ž˜์Šค ๋ชจ๋‘ @component ์ œ๊ฑฐ -> ์ˆ˜๋™ bean ๋“ฑ๋ก

* chore: api ๋ชจ๋“ˆ domain config์— redisson ์„ค์ • ์ถ”๊ฐ€

* test: redisson ํ…Œ์ŠคํŠธ disabled
  • Loading branch information
psychology50 authored Aug 13, 2024
1 parent 1d6a1ca commit a67b589
Show file tree
Hide file tree
Showing 13 changed files with 109 additions and 14 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package kr.co.pennyway.api.config;

import kr.co.pennyway.domain.common.importer.EnablePennywayDomainConfig;
import kr.co.pennyway.domain.common.importer.PennywayDomainConfigGroup;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnablePennywayDomainConfig({
PennywayDomainConfigGroup.REDISSON
})
public class DomainConfig {
}
5 changes: 5 additions & 0 deletions pennyway-batch/src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ spring:
hikari:
maximum-pool-size: 2

data:
redis:
repositories:
enabled: false

---
spring:
config:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package kr.co.pennyway.domain.common.aop;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor
public class CallTransactionFactory {
private final RedissonCallNewTransaction redissonCallNewTransaction;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import org.aspectj.lang.reflect.MethodSignature;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;

Expand All @@ -19,9 +18,8 @@
*/
@Slf4j
@Aspect
@Component
@RequiredArgsConstructor
public class DistributedLockAop {
public class DistributedLockAspect {
private static final String REDISSON_LOCK_PREFIX = "LOCK:";

private final RedissonClient redissonClient;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@

import lombok.RequiredArgsConstructor;
import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Component
@RequiredArgsConstructor
public class RedissonCallNewTransaction implements CallTransaction {
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@

import lombok.RequiredArgsConstructor;
import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Component
@RequiredArgsConstructor
public class RedissonCallSameTransaction implements CallTransaction {
/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package kr.co.pennyway.domain.common.importer;

import org.springframework.context.annotation.Import;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(PennywayDomainConfigImportSelector.class)
public @interface EnablePennywayDomainConfig {
PennywayDomainConfigGroup[] value();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package kr.co.pennyway.domain.common.importer;

/**
* Pennyway Domain์˜ Configurations๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Marker Interface
*/
public interface PennywayDomainConfig {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package kr.co.pennyway.domain.common.importer;

import kr.co.pennyway.domain.config.RedissonConfig;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum PennywayDomainConfigGroup {
REDISSON(RedissonConfig.class);

private final Class<? extends PennywayDomainConfig> configClass;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package kr.co.pennyway.domain.common.importer;

import kr.co.pennyway.common.util.MapUtils;
import org.springframework.context.annotation.DeferredImportSelector;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.lang.NonNull;

import java.util.Arrays;
import java.util.Map;

public class PennywayDomainConfigImportSelector implements DeferredImportSelector {
@NonNull
@Override
public String[] selectImports(@NonNull AnnotationMetadata metadata) {
return Arrays.stream(getGroups(metadata))
.map(v -> v.getConfigClass().getName())
.toArray(String[]::new);
}

private PennywayDomainConfigGroup[] getGroups(AnnotationMetadata metadata) {
Map<String, Object> attributes = metadata.getAnnotationAttributes(EnablePennywayDomainConfig.class.getName());
return (PennywayDomainConfigGroup[]) MapUtils.getObject(attributes, "value", new PennywayDomainConfigGroup[]{});
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
package kr.co.pennyway.domain.config;

import kr.co.pennyway.domain.common.aop.CallTransactionFactory;
import kr.co.pennyway.domain.common.aop.DistributedLockAspect;
import kr.co.pennyway.domain.common.aop.RedissonCallNewTransaction;
import kr.co.pennyway.domain.common.aop.RedissonCallSameTransaction;
import kr.co.pennyway.domain.common.importer.PennywayDomainConfig;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RedissonConfig {
public class RedissonConfig implements PennywayDomainConfig {
private static final String REDISSON_HOST_PREFIX = "redis://";
private final String host;
private final int port;
Expand All @@ -32,4 +35,24 @@ public RedissonClient redissonClient() {
.setPassword(password);
return Redisson.create(config);
}

@Bean
public RedissonCallNewTransaction redissonCallNewTransaction() {
return new RedissonCallNewTransaction();
}

@Bean
public RedissonCallSameTransaction redissonCallSameTransaction() {
return new RedissonCallSameTransaction();
}

@Bean
public CallTransactionFactory callTransactionFactory(RedissonCallNewTransaction redissonCallNewTransaction, RedissonCallSameTransaction redissonCallSameTransaction) {
return new CallTransactionFactory(redissonCallNewTransaction, redissonCallSameTransaction);
}

@Bean
public DistributedLockAspect distributedLockAspect(RedissonClient redissonClient, CallTransactionFactory callTransactionFactory) {
return new DistributedLockAspect(redissonClient, callTransactionFactory);
}
}
4 changes: 4 additions & 0 deletions pennyway-domain/src/main/resources/application-domain.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ spring:
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:}

autoconfigure:
exclude:
- org.redisson.spring.starter.RedissonAutoConfigurationV2

---
spring:
config:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import kr.co.pennyway.domain.domains.coupon.TestCouponDecreaseService;
import kr.co.pennyway.domain.domains.coupon.TestCouponRepository;
import lombok.extern.slf4j.Slf4j;
import org.junit.Ignore;
import org.junit.jupiter.api.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.domain.EntityScan;
Expand All @@ -20,7 +19,6 @@

import static org.assertj.core.api.Assertions.assertThat;

@Ignore
@Slf4j
@DomainIntegrationTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
Expand All @@ -42,6 +40,7 @@ void setUp() {

@Test
@Order(1)
@Disabled
void ์ฟ ํฐ์ฐจ๊ฐ_๋ถ„์‚ฐ๋ฝ_์ ์šฉ_๋™์‹œ์„ฑ_300๋ช…_ํ…Œ์ŠคํŠธ() throws InterruptedException {
// given
int threadCount = 300;
Expand All @@ -68,6 +67,7 @@ void setUp() {

@Test
@Order(2)
@Disabled
void ์ฟ ํฐ์ฐจ๊ฐ_๋ถ„์‚ฐ๋ฝ_๋ฏธ์ ์šฉ_๋™์‹œ์„ฑ_300๋ช…_ํ…Œ์ŠคํŠธ() throws InterruptedException {
// given
int threadCount = 300;
Expand Down

0 comments on commit a67b589

Please sign in to comment.