■ プロジェクト作成
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
ですー
ウッス!ご指摘あざっす!