zzh

zzh

Docker 連接spring專案與redis

代碼實現#
@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 文件配置#

image
其中 redis.host=redis(這一點後續我們會介紹)。

使用 docker 啟動 redis#
docker run -d redis:alpine

我們這裡直接使用 docker 的公共鏡像。

image

使用 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 的,會報錯。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。