代码实现#
@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 的,会报错。