블로그 이미지
프로그램을 가장 훌륭하게 작성하는 방법은 상태가 변경되는 오브젝트들과 수학적인 값을 나타내는 오브젝트들의 조합으로 표현하는 것이다. -Kent Beck 초초초보

카테고리

Programming (184)
ASP.NET (9)
Silverlight (2)
Javascript (20)
C# (8)
java (25)
SQL (14)
Oracle (3)
MyBatis (3)
기타 (52)
개발방법론 (1)
trouble shooting (2)
Linux (5)
스칼라 (5)
html (2)
grails & gradle (3)
Spring (2)
rabbitmq (1)
(3)
spark (0)
docker (3)
Total
Today
Yesterday

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

공지사항

최근에 올라온 글

reactive

카테고리 없음 / 2018. 9. 6. 14:30

http://atin.tistory.com/575

http://blog.naver.com/PostView.nhn?blogId=jdub7138&logNo=220983291803&parentCategoryNo=58&categoryNo=&viewDate=&isShowPopularPosts=true&from=search


http://hamait.tistory.com/761

https://okky.kr/article/375881?note=1189639




Posted by 초초초보
, |

spring flux

카테고리 없음 / 2018. 9. 6. 14:30

https://bclozel.github.io/webflux-workshop/


Posted by 초초초보
, |



1. Redis Connection Factory

@Component

@Configuration

public class RedisConnectionConfig {


  @Value("${redis.host}")

  private String redisHost;


  @Value("${redis.port}")

  private int redisPort;


  @Bean

  public RedisConnectionFactory XXXRedisConnectionFactory() {

    JedisPoolConfig poolConfig = new JedisPoolConfig();

    poolConfig.setMaxTotal(5);

    poolConfig.setJmxNamePrefix("redispool");

    poolConfig.setJmxNameBase("redis.client.jedis:type=XXXSentinelPool,name=");


    JedisConnectionFactory connectionFactory = new JedisConnectionFactory(poolConfig);

    connectionFactory.setUsePool(true);

    connectionFactory.setHostName(redisHost);

    connectionFactory.setPort(redisPort);


    return connectionFactory;

  }

}



2. RedisTemplate extends

@Getter

@Setter

public class XXXRedisTemplate<K, V> extends RedisTemplate {

  private String cacheName;




3. RedisSerializer impletemt

@Slf4j

public class XXXRedisSingleSerializer<T> implements RedisSerializer<Object> {


  private Class<?> clazz;

  private ObjectMapper objectMapper = new ObjectMapper();


  public XXXRedisSingleSerializer(Class<?> clazz) {

    this.clazz = clazz;

  }


  @Override

  public byte[] serialize(Object o) throws SerializationException {

    try {

      return objectMapper.writeValueAsBytes(o);

    } catch (IOException e) {

      log.warn("serialize exception list :  {}, message : {}", o, e.getMessage(), e);

    }


    return null;

  }


  @Override

  public T deserialize(byte[] bytes) throws SerializationException {

    try {


      Object o = objectMapper.readValue(bytes, objectMapper.getTypeFactory().constructType(clazz));


      return (T) o;

    } catch (IOException e) {

      log.warn("deserialize exception data :  {}, message : {}", bytes, e.getMessage(), e);

    }


    return null;

  }

}


 


@Slf4j

public class XXXRedisSerializer implements RedisSerializer<List> {


  private Class<?> clazz;

  private ObjectMapper objectMapper = new ObjectMapper();


  public XXXRedisSerializer(Class<?> clazz) {

    this.clazz = clazz;

  }


  @Override

  public byte[] serialize(List ts) throws SerializationException {

    try {

      return objectMapper.writeValueAsBytes(ts);

    } catch (IOException e) {

      log.warn("serialize exception list :  {}, message : {}", ts, e.getMessage(), e);

    }


    return null;

  }


  @Override

  public List deserialize(byte[] bytes) throws SerializationException {

    try {

      List<?> list =

          objectMapper.readValue(

              bytes, objectMapper.getTypeFactory().constructCollectionType(List.class, clazz));


      return list;

    } catch (IOException e) {

      log.warn("deserialize exception data :  {}, message : {}", bytes, e.getMessage(), e);

    }


    return Lists.newArrayList();

  }

}





4. RedisTemplate Bean 등록

@Configuration

public class XXXRedisTemplateConfig {


  @Autowired

  @Qualifier("XXXRedisConnectionFactory")

  private RedisConnectionFactory XXXPortalRedisConnectionFactory;


  @Bean

  public XXXRedisTemplate<String, XXXdto1> xxx1RedisTemplate() {

    return redisTemplate(XXXdto1.class, XXXCacheConst.XXX1);

  }


  

  @Bean

  public XXXRedisTemplate<String, xxx2Dto> xxx2Template() {


    XXXRedisTemplate<String, xxx2Dto> redisTemplate =

        new XXXRedisTemplate<>();

    redisTemplate.setKeySerializer(new StringRedisSerializer());

    redisTemplate.setValueSerializer(

        new XXXRedisSingleSerializer<xxx2Dto>(xxx2Dto));

    redisTemplate.setConnectionFactory(XXXRedisConnectionFactory);

    redisTemplate.setCacheName(XXXCacheConst.xxx2);

    return redisTemplate;

  }


  @NotNull

  private XXXRedisTemplate redisTemplate(Class<?> clazz, String cacheName) {

    XXXRedisTemplate redisTemplate = new XXXRedisTemplate<>();

    redisTemplate.setKeySerializer(new StringRedisSerializer());

    redisTemplate.setValueSerializer(new XXXRedisSerializer(clazz));

    redisTemplate.setConnectionFactory(XXXRedisConnectionFactory);

    redisTemplate.setCacheName(cacheName);

    return redisTemplate;

  }



5. CacheManager에 등록

  @Autowired private List<XXXRedisTemplate> XXXRedisTemplates;


  @Bean

  public CacheManager cacheManager() {

    List<RedisCacheManager> cacheManagers =

        XXXRedisTemplates

            .stream()

            .map(

                redisTemplate -> {

                  RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate);

                  redisCacheManager.setCacheNames(Lists.newArrayList(redisTemplate.getCacheName()));

                  redisCacheManager.setDefaultExpiration(300);

                  redisCacheManager.afterPropertiesSet();

                  return redisCacheManager;

                })

            .collect(Collectors.toList());


    CompositeCacheManager compositeCacheManager = new CompositeCacheManager();

    compositeCacheManager.setCacheManagers(Lists.newArrayList(cacheManagers));


    return compositeCacheManager;

  }



Posted by 초초초보
, |