コードの実装#
@RestController
public class HelloWorldTest {
@Autowired
private RedisTemplate redisTemplate;
@GetMapping(path = "/info")
@ResponseBody
public String info(){
return "こんにちは世界!";
}
@GetMapping(path = "/getRedis/{key}")
@ResponseBody
public String get(@PathVariable(value = "key") String key){
return redisTemplate.opsForValue().get(key).toString();
}
@GetMapping(path = "/setRedis/{key}/{value}")
@ResponseBody
public String set(@PathVariable(value = "key") String key, @PathVariable(value = "value") String value){
redisTemplate.opsForValue().set(key, value);
return "ok";
}
}
yml ファイルの設定#
その中で redis.host=redis(これについては後で説明します)。
Docker を使用して redis を起動する#
docker run -d redis:alpine
ここでは、公開されている Docker イメージを直接使用します。
Docker を使用して Spring プロジェクトを起動する#
- Dockerfile を使用してカスタムイメージを作成する
Dockerfile:
FROM java:8
COPY ./HelloWoldTest-1.0-SNAPSHOT.jar /tmp/app.jar
# ポートを公開する
EXPOSE 8081
# エントリーポイント、Javaプロジェクトの起動コマンド
ENTRYPOINT java -jar /tmp/app.jar
ここでは、ベースイメージとしてカスタムイメージ java:8 を使用しています(jdk1.8 がインストールされたイメージです。必要な方は自分で作成してください)。
- Spring プロジェクトを実行する
docker run -d --link hardcore_nash:redis -p 8081:8081 zzh_project:1.0 java -jar /tmp/app.jar
ここでは、redis との通信のために redis にリンクする必要があります。redis コンテナ名を hardcore_nash から redis に変更します(これはプロジェクトの yml ファイルで redis.host=redis としているためです)。これにより通信が完了します。
注意事項#
Docker では、docker-compose を使用して 2 つのコンテナをリンクすることもできますが、redis コンテナがまだ完全に起動していない状態で Spring プロジェクトが起動するため、redis に接続することはできません。エラーが発生します。