今天使用springboot连接linux的mysql,期间一直报错,这里简单记录一下过程。

工具:idea-2017,linux-7.x,mysql-5.6.40。

首先说一下这几个注解的作用:

(1)Spring Boot的@SpringBootApplication、@EnableAutoConfiguration、@ComponentScan注解,我经常在启动类上傻傻分不清,

(2)@EnableAutoConfiguration这个注解是是Springboot根据我们所引入的jar包自动配置的,假设我们有自己的配置类则会覆盖

(3)@ComponentScan是告诉springboot进行包扫描的

(4)而@SpringBootApplication注解等价于以默认属性使用@Configuration,  @EnableAutoConfiguration和@ComponentScan

 

由于springboot自动扫描启动类目录和子目录,所以一般是把启动类放在包的最外层,见下图:cn.buding就是公司名或者项目名。

 

springboot 调用mariadb的存储过程 springboot调用so库_spring

 

启动springboot要是要下面错误:

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_02

这个是springboot整合mybatis时启动没有发现mapper,这是一般是mapper没交给springboot管理啦,可能有挺多方式把mapper交给springboot管理,这里就使用一种吧。见下图,在之前的基础上加@MapperScan注解,括号里面就是你mapper的类路径。

 

springboot 调用mariadb的存储过程 springboot调用so库_spring_03

下面是springboot成功启动的信息,拉到最下面就可以看见了,可以看见端口号。

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_04

下面是我的控制层:

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_05

启动完之后,浏览器访问http://localhost:8080/getUserInfo报错:

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_06

再看看后台:

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_07

连接超时了,看看数据库配置文件:

 

springboot 调用mariadb的存储过程 springboot调用so库_spring_08

登录安装mysql的虚拟机:

(这里补充一下linux安装mysql的命令start:

执行:#yum install -y mysql-server

要是出现下面的错误:

 

springboot 调用mariadb的存储过程 springboot调用so库_mysql_09

再把命令执行一遍,要是还报同样的错,那说明你的虚拟机配置文件有问题,稍微百度一下就可以了。

要是报下面这个错误:

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_10

可以这样解决:

首先,执行:sudo rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.

如下图:

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_11

再接着执行:#  yum install mysql mysql-server mysql-libs mysql-server

如下图:

 

springboot 调用mariadb的存储过程 springboot调用so库_spring_12

这样就成功安装了。

配置开机自启:# chkconfig mysqld on

springboot 调用mariadb的存储过程 springboot调用so库_数据库_13

启动mysql服务:# service mysqld start

接着执行:# yum install -y mysql-connector-java

 

springboot 调用mariadb的存储过程 springboot调用so库_spring_14

进入mysql:# mysql

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_15

设置密码:update mysql.user set password=PASSWORD('123456') where user='root';

 

springboot 调用mariadb的存储过程 springboot调用so库_mysql_16

刷一下:flush privileges;

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_17

退出:quit

重新登录:# mysql -uroot -p123456

 

springboot 调用mariadb的存储过程 springboot调用so库_mysql_18

创建数据库:

 

springboot 调用mariadb的存储过程 springboot调用so库_mysql_19

查看数据库:

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_20

进入数据库 use eshop;

 

springboot 调用mariadb的存储过程 springboot调用so库_spring_21

查看表:show tables;

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_22

创建表:

-> age int(11),
    -> name varchar(20)
-> );

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_23

查看表:show tables;

 

springboot 调用mariadb的存储过程 springboot调用so库_spring_24

插入数据:insert user values(18,"yu");

 

springboot 调用mariadb的存储过程 springboot调用so库_spring_25

查看数据库ip访问权限:select host from mysql.user;select host,user from mysql.user;(这里要是报错,试着把两个这样mysql.user换成user)

 

springboot 调用mariadb的存储过程 springboot调用so库_spring_26

更新一下:update mysql.user set host = '%' where user = 'root';

出现下面这个错误不用理。

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_27

再查看数据库:select host from mysql.user;

 

springboot 调用mariadb的存储过程 springboot调用so库_spring_28

刷一下:flush privileges;

 

springboot 调用mariadb的存储过程 springboot调用so库_mysql_29

退出:quit;

开放3306端口;

进入:# cd /etc/sysconfig

要是没有iptables

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_30

就创建一个:# vi iptables

把下面这段话粘贴过去。

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

 

springboot 调用mariadb的存储过程 springboot调用so库_mysql_31

退出,重启网络:# service iptables restart

要是报下面的错误:

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_32

就执行:# yum install iptables-service

要是显示的错误:

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_33

就执行:# systemctl stop firewalld  

    # systemctl mask firewalld  

 

springboot 调用mariadb的存储过程 springboot调用so库_spring_34

再执行:# yum install iptables-services

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_35

设置开机启动:# systemctl enable iptables

再重启网络:# service iptables restart

 

springboot 调用mariadb的存储过程 springboot调用so库_spring_36

查看开放的端口:# iptables -L -n

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_37

这里补充一下linux安装mysql的命令end)

到这里就基本结束了,使用springboot就可以访问数据库了,重新启动一下springboot项目,就可以看见:

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_38

最后,再记一下mysql数据库登陆的问题:

要是登录mysql报:

 

springboot 调用mariadb的存储过程 springboot调用so库_spring_39

查了好多百度,改了好多文件,还没得,最后使用联接工具Navicat打开连接,找到mysql数据库打开user表,

 

springboot 调用mariadb的存储过程 springboot调用so库_数据库_40

 

上面是我改好的,打开后要是发现localhost那行的user和password为空,就把127.0.0.1那行的user和password复制到localhost,然后就把localhost那行除了password_expired这个不改之外,其他为N的全改为Y就可以了。

相关代码已上传到了github上:https://github.com/DreamJieEn/springboot-linux-mysql