Home JedisPool Bean 등록 에러
Post
Cancel

JedisPool Bean 등록 에러

jedis bean 등록 이후 connection pool 설정을 하려했을때 발생한 문제

이전에 설정했던 jedis bean


문제가된 코드

문제가된 Bean : @Bean(“myJedisPool”)

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
@Slf4j
@Configuration
public class MyRedisConfig {

  @Value("${data.redis.host}")
  private String HOST;

  @Value("${data.redis.port}")
  private int PORT;

  @Value("${data.redis.maxTotal}")
  private int MAX_TOTAL;

  @Value("${data.redis.maxIdle}")
  private int MAX_IDLE;

  @Value("${data.redis.minIdle}")
  private int MIN_IDLE;

  @Value("${data.redis.maxWaitMillis}")
  private long MAX_WAIT_MILLIS;

  @Bean("myJedisPool")
  public JedisPool myJedisPool() {
    JedisPoolConfig poolConfig = new JedisPoolConfig();
    poolConfig.setMaxTotal(MAX_TOTAL);
    poolConfig.setMaxIdle(MAX_IDLE);
    poolConfig.setMinIdle(MIN_IDLE);
    poolConfig.setMaxWaitMillis(MAX_WAIT_MILLIS);

    try {
      return new JedisPool(poolConfig, HOST, PORT);
    } catch (Exception e) {
      log.error("Error initializing Jedis pool", e);
      return null;
    }
  }

  @Bean
  public Jedis jedis(@Qualifier("myJedisPool") JedisPool jedisPool) {
    try (
      Jedis jedis = jedisPool.getResource();
    ) {
      return jedis;
    } catch (JedisException jedisException) {
      log.error("jedis bean registration fail", jedisException);
      return null;
    }
  }

}


1
2
3
4
5
6
7
8
9
10
11
12
Caused by: javax.management.InstanceAlreadyExistsException: MXBean already registered with name org.apache.commons.pool2:type=GenericObjectPool,name=pool
	at java.management/com.sun.jmx.mbeanserver.MXBeanLookup.addReference(MXBeanLookup.java:152) ~[na:na]
	at java.management/com.sun.jmx.mbeanserver.MXBeanSupport.register(MXBeanSupport.java:160) ~[na:na]
	at java.management/com.sun.jmx.mbeanserver.MBeanSupport.preRegister2(MBeanSupport.java:173) ~[na:na]
	at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:924) ~[na:na]
	at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:895) ~[na:na]
	at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:320) ~[na:na]
	at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:523) ~[na:na]
	at org.springframework.jmx.support.MBeanRegistrationSupport.doRegister(MBeanRegistrationSupport.java:138) ~[spring-context-6.1.3.jar:6.1.3]
	at org.springframework.jmx.export.MBeanExporter.registerBeanInstance(MBeanExporter.java:687) ~[spring-context-6.1.3.jar:6.1.3]
	at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:631) ~[spring-context-6.1.3.jar:6.1.3]
	... 14 common frames omitted


어떤 이유인지는 몰라도 해당 부분에서 MXbean에 이미 등록되었다고 나옴 실제로 디버깅을 해보니 multiname이 null 로 들어가 발생

image


해결 방법 : 여러 사이트를 돌아다니면서 테스트를 해보았으나
결국, JMX를 이용한 JedisPool 모니터링을 포기하고 해당 코드 추가 : poolConfig.setJmxEnabled(false);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Bean("myJedisPool")
public JedisPool myJedisPool() {
  JedisPoolConfig poolConfig = new JedisPoolConfig();
  poolConfig.setJmxEnabled(false);
  poolConfig.setMaxTotal(MAX_TOTAL);
  poolConfig.setMaxIdle(MAX_IDLE);
  poolConfig.setMinIdle(MIN_IDLE);
  poolConfig.setMaxWaitMillis(MAX_WAIT_MILLIS);

  try {
    return new JedisPool(poolConfig, HOST, PORT);
  } catch (Exception e) {
    log.error("Error initializing Jedis pool", e);
    return null;
  }
}


실행 확인 빌드확인

This post is licensed under CC BY 4.0 by the author.