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

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

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

我的MySQL表结构如下:

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

1
2
3
4
5
6
7
8
9
10
11
12
<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文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 应用名称
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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的,且没有后缀名的文件,并加入下列代码

1
2
3
4
5
6
7
8
9
10
# 基础镜像使用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文件的目录下,执行下列语句制作镜像(注意末尾的" ."不能漏):

1
$ docker build -t springbootdemo .

-t 参数是指定此镜像的tag名

查看镜像:

1
$ docker images

启动容器:

-d参数是让容器后台运行

-p 是做端口映射,此时将服务器中的7733端口映射到容器中的8080(项目中端口配置的是8080)端口

1
$ docker run -d -p 7733:8080 springbootdemo4docker

测试成功:

一些docker相关命令:

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


SpringBoot连接MySQL,并通过docker部署至Linux服务器
https://www.liaomz.top/2021/01/07/springboot-lian-jie-mysql-bing-tong-guo-docker-bu-shu-zhi-linux-fu-wu-qi/
作者
发布于
2021年1月7日
许可协议