代碼實現#
@RestController
public class HelloWorldTest {
@Autowired
private RedisTemplate redisTemplate;
@GetMapping(path = "/info")
@ResponseBody
public String info(){
return "hello world!";
}
@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 容器名 hardcore_nash 重命名為 redis(這是因為我們在項目中 yml 的文件 redis.host=redis)。這樣即可完成通信。
注意事項#
在 docker 中也可以使用 docker-compose 來鏈接兩個容器,儘管可以通信,但是由於 redis 容器還沒有完全啟動,spring 項目就啟動了,這時候是沒有辦法連上 redis 的,會報錯。