■ プロジェクト作成
STS(SpringSource Tool Suite)立ち上げて
↓
New
↓
SpringTemplateProject
↓
Spring MVC Project を作ります
■ コードがジェネレートされてプロジェクトが出来る
HomeController.javaを見ると大体の流れが理解できてRest前提なのねーってのが分かります。
@RequestMapping(value = "/", method = RequestMethod.GET) ・・・ ★該当パスのGETリクエストに対応★ public String home(Locale locale, Model model) { logger.info("Welcome home! the client locale is "+ locale.toString()); ~略~ model.addAttribute("serverTime", formattedDate ); ・・・ ★ JSPに渡すオブジェクト ★ return "home"; ・・・ ★ JSPのファイル名 ★ }
■ Redisインストール
ここのところWindowsだけで仕事してるのでWindows用のRedisをインストールします。
↓にインストーラがあるのでダウンロードしてポチポチやるだけ。お手軽です。
https://github.com/dmajkic/redis/downloads
redis-server.exe をダブルクリックするとコンソールが立ち上がって見覚えのあるログがtailされます。
redis-cli.exe をダブルクリックして立ち上げたサーバに対してset/getしてみます。
redis 127.0.0.1:6379> set aaa bbb OK redis 127.0.0.1:6379> get aaa "bbb"
■ SpringのアプリからRedisに繋ぐ
SpringではCloudFoundryでRedisがサポートされているように、それ用のが用意されています。
Spring Dataという形でまとまっていて、
↓RedisやRDBMSの他にもイロイロとある感じで。
ということで、Spring DataのRedisをpom.xmlに追加して依存を更新します。
#ついでにcoreのバージョンを上げてやらないとうまい事うごかないのがあったので3.0.2から3.0.5にしました。
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.0.0.M4</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.0.5.RELEASE</version> </dependency>
次に、懐かしのApplicationContext.xmlにbean定義を追加~って思ってたのですが、
それっぽいファイルが見当たらず、 main/webapp/WEB-INF/spring の下に root-context.xmlっていうのがあって、
中身みたら空っぽで、↓って書いてあるので、
<!-- Root Context: defines shared resources visible to all other web components -->
↓こんな感じでJedisを使った接続(デフォルトなのでプロパティ記載なし。。)と、
キーもバリューも両方Stringの場合に使いましょって事になってるテンプレートクラスを指定してやります。
<bean id="jedisFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" /> <bean id="stringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"> <property name="connectionFactory" ref="jedisFactory" /> </bean>
↓上記の定義ファイルで指定したクラスをControllerクラスにインジェクションします。
@Autowired private StringRedisTemplate redisTemplate;
PathVariableってのを使うと↓みたいな感じでデータが取れてこれまた便利です。
なんかちょっと直観的じゃない気もするけど↓の★のところでRedisからデータを取ってきます。
@RequestMapping(value = "/getHoge/{hogeId}", method = RequestMethod.GET) public String getSession(@PathVariable String hogeId, Locale locale, Model model) { logger.info("HOGE ID is "+ hogeId); // getData from Redis String hogeData = redisTemplate.opsForValue().get(hogeId); ・・・ ★ logger.info("Session Data is "+ sessionData); model.addAttribute("hogeData", hogeData); return "getHoge"; }
JSPは↓だけ。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page session="false" %> ${hogeData}
今回はRestfulなAPIを作りたかったのでテスト用にSimple Rest Client ってのを使ってみました。
名前の通りめっちゃシンプルなので使いやすかったです↓
上記をPOSTにしてリクエストすると↓のように返してくれて、コレがやりたかったのよね!的な。
ERROR: リモート サーバーがエラーを返しました: (405) メソッドは使用できません
■ ついでに、、
Redisの冗長性も確保したいんだけどCloudFoundryにのっけた時ってその辺どんな感じになるんだろう?
時間見つけてやってみます。
ソフトバンククリエイティブ
売り上げランキング: 71871
コメント
SprintSource Tool Suite -> SpringSource Tool Suite
ですー
ウッス!ご指摘あざっす!