记 MySQL url 连接参数的一次坑

问题

我本地运行,可以查询到数据。
放到Docker容器后,查询不到数据了。
Docker容器是正常的GMT时间,我本地是北京时间(GMT时间 + 8小时)。

解决方式1

把 Dockerfile 与 北京时间同步。在Dockerfile中加入RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone即可解决。以下为完整Dockerfile

1
2
3
4
5
6
7
8
9
10
FROM adoptopenjdk/openjdk8:centos

LABEL name=TaoPanfeng

# 时间同步(容器与Linux主机)
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone

COPY target/*.jar /app.jar

CMD java -jar /app.jar

多说一句:其实无论如何,使用容器时,都应该与北京时间保持一致。

解决方式2

修改连接的 url

1
2
3
4
5
6
# 修改前
spring:
datasource:
url: jdbc:mysql://121.127.241.102:3306/life-record?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: Qq123...
1
2
3
4
5
6
# 修改后
spring:
datasource:
url: jdbc:mysql://121.127.241.102:3306/life-record?useUnicode=true&characterEncoding=utf8
username: root
password: Qq123...