SpringBoot连接MySQL,并通过docker部署至Linux服务器

首先需要在服务器上安装MySQL并且配置好远程连接,安装及配置方式可参考:

Ubuntu 20.x 安装 MySQL8.x 并配置远程连接

我的MySQL表结构如下:

在这里插入图片描述

创建SpringBoot项目,并添加下列依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

配置application.properties文件:

# 应用名称
spring.application.name=demo
# 应用服务 WEB 访问端口
server.port=8080
# spring 静态资源扫描路径
spring.resources.static-locations=classpath:/static/

# 数据库设置
#spring.datasource.url = jdbc:mysql://服务器ip:端口号/数据库名?serverTimezone=UTC
spring.datasource.url=jdbc:mysql://192.168.19.134:3306/Test?serverTimezone=UTC
#spring.datasource.username = 数据库用户名
spring.datasource.username=Test
#spring.datasource.password = 数据库密码
spring.datasource.password=7nN6KnYJF4insYHk

编写JdbcController文件用于操作数据库:

在这里插入图片描述
JdbcController.java

package com.example.demo;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * @author oyc
 * @Description: 用户控制类
 */
@Controller
public class JdbcController {

    @Resource
    private JdbcTemplate jdbcTemplate;

    /**
     * 返回所有的记录
     */
    // 获取所有的信息
    @RequestMapping("/user")
    @ResponseBody
    public List<Map<String,Object>> list() {
        return jdbcTemplate.queryForList("select * from man");
    }

    /**
     * 通过名称查询记录
     * 使用方式http://localhost:8080/getUserByName?name=allen
     * @param name 查询的名称
     */
    // 查询
    @RequestMapping(value = "/getUserByName", method = RequestMethod.GET)
    @ResponseBody
    public List<Map<String,Object>> getStuById(@RequestParam(value="name",required=true) String name){
        String sql = "SELECT * FROM man where name = '" + name+"'";
        return jdbcTemplate.queryForList(sql);
    }

    /**
     * 添加一个man
     * 使用方式http://localhost:8080/addMan?name=allen2&age=23&information=我是Allen2
     * @param name 名称
     * @param age 年龄
     * @param information 信息
     */
    @RequestMapping(value = "/addMan",method = RequestMethod.GET)
    @ResponseBody
    public String addMan(@RequestParam(value="name",required=false,defaultValue="hello") String name,
                          @RequestParam(value="age",required=false,defaultValue="24") int age,
                          @RequestParam(value="information",required=false,defaultValue="我是hello") String information){
        String sql = "INSERT INTO man VALUES ('"+name+"', "+age+", '"+information+"')";
        return "影响行数" + jdbcTemplate.update(sql);
    }

}

运行测试:

在这里插入图片描述

访问成功:

在这里插入图片描述

将SpringBoot项目打包成jar包:

在这里插入图片描述
在 target 文件夹中多出一个 demo-0.0.1-SNAPSHOT.jar 就是打包好的jar包
在这里插入图片描述

编写Dockerfile文件:

创建一个名为Dockerfile的,且没有后缀名的文件,并加入下列代码

# 基础镜像使用java
FROM java:8
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp 
# 将jar包添加到容器中并更名为demo.jar
ADD demo.jar demo.jar 
# 运行jar包
RUN bash -c 'touch /demo.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/demo.jar"]

解释下这个配置文件:

VOLUME 指定了临时文件目录为/tmp。
其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。
该步骤是可选的,如果涉及到文件系统的应用就很有必要了。
/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录.
项目的 jar 文件作为 “demo.jar” 添加到容器
ENTRYPOINT 执行项目 demo.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/./urandom” 作为 Entropy Source

如果是第一次打包,它会自动下载java 8的镜像作为基础镜像,以后再制作镜像的时候就不会再下载了。

利用ftp将jar包和Dockerfile文件上传至服务器:

在这里插入图片描述

利用ssh连接服务器:

在这里插入图片描述

cd到存放jar包和Dockerfile文件的目录下,执行下列语句制作镜像(注意末尾的" ."不能漏):

docker build -t springbootdemo .

-t 参数是指定此镜像的tag名
在这里插入图片描述

查看镜像:

docker images

在这里插入图片描述

启动容器:

docker run -d -p 7733:8080 springbootdemo4docker
-d参数是让容器后台运行 
-p 是做端口映射,此时将服务器中的7733端口映射到容器中的8080(项目中端口配置的是8080)端口

在这里插入图片描述

测试成功:

在这里插入图片描述

一些docker相关命令:

查看所有容器,docker ps -a
删除容器,docker rm <容器id>(注意:如果容器在运行中,则需要先停止容器:docker stop <容器id>)
删除镜像,docker rmi <镜像名>(注意:如果存在容器与镜像的情况,一定要先删除容器)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值