😀

spring-dataとjedisを使おうとしたらしゃれにならないぐらいはまった。

2015/12/13に公開

spring-data-redis

jedisを単体で使っていたがspring-dataをmysqlで使っていたので組み合わせて使おうとしたが・・

環境

spring4+maven3
java8

maven設定

spring-data-redisを追加宣言。
ちなみにspring-data-redisを使う際にはjedisの定義は必須で単体定義では使用できません。

またjedisバージョン2.4以降ではcommons-pool2が必須です。
これを定義しないとNoClassDefFoundErrorとなるため注意。

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.6.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.8.0</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.4</version>
</dependency>

applicationContext.xml設定

下記はimport用のためredis.xmlで必要な宣言のみです。

redis.xml
<bean id="jedisConnFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
	p:host-name="localhost"
	p:port="6379"
	p:password=""
	p:use-pool="true"
	p:pool-config-ref="jedisPoolConfig" />
        
<bean id="redisTemplate" 
	class="org.springframework.data.redis.core.RedisTemplate"
	p:connection-factory-ref="jedisConnFactory"/>

<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"
	p:maxTotal="150"
	p:minIdle="5"
	p:maxIdle="15"/>

実行するが・・

nested exception is java.lang.ClassNotFoundException: redis.clients.jedis.JedisPoolConfig

解決方法

試行錯誤の上、依存関係の問題か全て最新バージョンにすると正常動作しないようなので、下記のようにバージョンダウンして対応。

  • spring-data-redis -> 1.4.0.RELEASE
  • jedis -> 2.6.0
  • common-pool2 -> 2.3

ちょっとすっきりしませんが、取り急ぎ動作確認は完了。
spring-data-redisはバージョンによって必要なライブラリやそのバージョンが異なるため注意が必要です。


jedis単体でも実用には問題無いですが、spring-dataと組み合わせることで
springが提供しているコネクションプールなどが使えるため非常に便利です。

Discussion