如何基于 Docker 快速搭建 Springboot + Mysql + Redis 项目

本文详细介绍了如何利用Docker搭建一个包含Springboot、Mysql和Redis的项目。首先,讲解了如何安装和启动Docker中的mysql和redis容器。接着,通过Spring Initializr初始化Springboot项目,配置数据库连接和Redis工具类,并创建相关实体类、Service层、Controller层。最后,通过测试验证项目的正确运行,展示了通过可视化工具检查Redis缓存效果。
摘要由CSDN通过智能技术生成

前言

有时候我们需要快速启动一些项目,但是环境往往折腾了好久,因此弄一个可以重用的快速搭建的教程,docker简直就是这方面的神器,Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。

本教程基于的前提条件:

  • 机器已经安装配置好JDK1.8,并且环境变量已经配置成功
  • Maven已经配置好,IDEA中项目使用的默认Maven也配置成功
  • 本地机器安装好Docker
  • 顺便提一句,我用navicat作为数据库可视化操作工具

项目地址:https://github.com/Damaer/DemoCode/tree/main/springboot/springdemo

项目目录

├── src :源代码
|		├── main
|		|		├── java
|   |   | 	├── com.aphysia.springbootdemo
|   |   | 	| 	├── config:配置
|   |   | 	| 	| 	├── RedisConfig:redis配置
|   |   | 	| 	├── constant:常量
|   |   | 	| 	| 	├── RedisConfig:redis常量
|   |   | 	| 	├── controller:控制器
|   |   | 	| 	├── mapper:数据库操作接口
|   |   | 	| 	├── model:实体类
|   |   | 	| 	├── service:逻辑处理层,包括接口以及实现类
|   |   | 	| 	|		├── impl:接口实现类
|   |   | 	| 	├──util:工具类
|   |   | 	| 	|		├── RedisUtil:redis工具类
|   |   | 	| 	├──SpringdemoApplication:启动类
|		|		├── resource
|   |   | 	├── mapper 数据库操作sql
|   |   | 	├── application.yml:全局配置类
|   |   | 	├── user.sql: 初始化mysql
|		├──	test: 测试类	
├── pom.xml :项目maven依赖关系

整体的目录如下:

搭建项目

1. docker安装启动mysql以及redis

1.1 安装mysql

查询mysql最新的镜像:

docker search mysql

拉取最新的mysql版本

docker pull mysql:latest

启动mysql,用户名root,密码123456

docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

可以通过docker ps 查看是否安装成功

% docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS      PORTS                                                  NAMES
574d30f17868   mysql     "docker-entrypoint.s…"   14 months ago   Up 2 days   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql-test

1.2 安装redis

查询redis的镜像

docker search redis

拉取redis的最新镜像

% docker pull redis:latest
latest: Pulling from library/redis
eff15d958d66: Pull complete 
1aca8391092b: Pull complete 
06e460b3ba1b: Pull complete 
def49df025c0: Pull complete 
646c72a19e83: Pull complete 
db2c789841df: Pull complete 
Digest: sha256:619af14d3a95c30759a1978da1b2ce375504f1af70ff9eea2a8e35febc45d747
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest

docker images可以查看我们安装了哪些镜像,可以看到其实我之前也安装过redis的镜像:

% docker images
REPOSITORY               TAG       IMAGE ID       CREATED         SIZE
redis                    latest    40c68ed3a4d2   3 days ago      113MB
redis                    <none>    84c5f6e03bf0   14 months ago   104MB
mysql                    latest    e1d7dc9731da   14 months ago   544MB
docker/getting-started   latest    1f32459ef038   16 months ago   26.8MB

让我们启动一下redis的容器:

% docker run -itd --name redis-test -p 6379:6379 redis
7267e14faf93a0e416c39eeaaf51705dc4b6dc3507a68733c20a2609ade6dcd6

可以看到docker里面现在有redismysql两个容器在跑了:

image-20211121194442579

2. 初始化数据库

主要是创建数据库以及测试使用的数据表,初始化数据库的语句:

drop database IF EXISTS test;
CREATE DATABASE test;
use test;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT "",
  `age` int(11) DEFAULT 0,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `user` VALUES (1, '李四', 11);
INSERT INTO `user` VALUES (2, '王五', 11);

初始化数据如下:

3.创建项目

在IDEA中,File --> New --> Project --> Spring Initializr(选择JDK 8):

点击Next:

选择Web 下面的Spring WebSQL下面的 JDBC API,MybatisNoSQL下的Redis,也可以不选,直接在pom文件里自己加入即可:

一路点Next,最后Finish,创建好之后,记得更新一下Maven,安装依赖包。

4.初始化代码

4.1 全局配置文件以及启动类

全局配置文件application.yml

server:
  port: 8081
spring:
  #数据库连接配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456
  redis:
    host: 127.0.0.1     ## redis所在的服务器IP
    port: 6379
    ##密码,我这里没有设置,所以不填
    password:
    ## 设置最大连接数,0为无限
    pool:
      max-active: 8
      min-idle: 0
      max-idle: 8
      max-wait: -1
#mybatis的相关配置
mybatis:
  #mapper配置文件
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.aphysia.spingbootdemo.model
  #开启驼峰命名
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    root: debug

启动类SpringdemoApplication:

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.aphysia.springdemo.mapper")
public class SpringdemoApplication {
   

    public static void main(String[] args) {
   
        SpringApplication.run(SpringdemoApplication.class, args);
    }

}

4.2 实体类

与数据库中user表对应的实体类User.java:

package com.aphysia.springdemo.model;

public class User {
   
    int id;
    String name;
    int age;

    public int getId() {
   
        return id;
    }

    public void setId(int id) {
   
        this.id = id;
    }

    public String getName() {
   
        return name;
    }

    public void setName(String name) {
   
        this.name = name;
    }

    public int getAge() {
   
        return age;
    }

    public void setAge(int age) {
   
        this.age = age;
    }
}

4.3 Redis工具类

Redis配置类RedisConfig

package com.aphysia.springdemo.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;


@Configuration
public class RedisConfig {
   

    @Autowired
    private RedisTemplate redisTemplate;

    @Bean
    public RedisTemplate redisTemplateInit() {
   
        //设置序列化Key的实例化对象
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //设置序列化Value的实例化对象
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return redisTemplate;
    }
}

Redis 常量类 RedisConstant

package com.aphysia.springdemo.constant;

public class RedisConstant {
   
    public static String ALL_USER_KEY = "allUser";
}

Redis 工具类 RedisUtil:

package com.aphysia.springdemo.util;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import javax.annotation.Resource;

@Component
public class RedisUtil {
   
    @Resource
    private RedisTemplate<String, Object> redisTemplate;

    public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值