Spring 基础项目
第一部分、搭建基础结构
安装IDEA,安装教程自行查找,本次使用2020.3.4版本
使用IDEA创建一个Maven项目
,在pom.xml文件里面写入:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
</dependencies>
这些依赖的作用不用多说,在新建的目录的resource目录下面,新建一个application.yml,写入:
server:
port: 80
spring:
datasource:
url: jdbc:mysql://你的IP地址/demo?serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
username: 你的数据用户名
password: 你的用户密码
application:
name: 'login—demo'
logging:
level:
root: info
com.deng.p1: debug
创建一个新的目录层级:例如我的项目是:com/deng/p1
在创建的文件夹里面创建controller,service,service/impl,mapper等目录,并创建一个启动类SpringApplication.java。
@SpringBootApplication
public class P1Application {
public static void main(String[] args) {
SpringApplication.run(P1Application.class,args);
}
}
在controller里面创建一个TestController.java类。
@RestController
@RequestMapping("ctl")
public class TestController {
@RequestMapping("test")
public String test(){
return "asd";
}
}
@RestController
表示的是这个controller层里面的方法返回值都是需要直接返回给前端的数据,作为响应体,如果使用的@Controller
或者其他的注解,类中的方法的返回值会被作为视图View返回给前端。@RequestMapping
表示的是这个要访问这个类/方法,以GET请求举例,需要在URL写这个IP+端口+/类上的注解的值/方法上的注解的值/请求参数。
写完以后,找到SpringApplication.java这main方法,启动它。在浏览器里面,localhost/ctl/test,就可以访问到你写的返回值了。
第二部分、搭建数据库服务
1.使用MySQL作为数据库
- 方法一:使用rpm方式安装
•
| 选项 | 数值 |
| ------------ | ------------ |
| Product Version | 8.0.22 |
| Operating System | RedHat |
| OS Version |x86-64bit |
如何查看自己的操作系统信息?
cat /etc/redhat-release
可以查看红帽Linux内核版本,其余系统请自行百度uname -r
可以查看自己的内核和架构版本,例如:3.10.0-1160.71.1.el7.x86_64,el7表示linux内核版本为7,架构属于x86架构,64位操作系统
在页面中下载mysql-community-server-8.0.22
,mysql-community-libs-8.0.22
,mysql-community-common
,mysql-community-client-plugins-8.0.22
,mysql-community-client
,mysql-community-client-plugins-8.0.2
,找不到的话,用Ctrl+F搜索网页就可以看到,可以自己下载到本地,再使用xftp工具上传到服务器中
安装他们:
rpm -ivh mysql-community-libs-8.0.22-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.22-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.22-1.el7.x86_64.rpm
rpm -ivh mysql-community-common-8.0.22-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.22-1.el7.x86_64.rpm
- 方法二:使用yum安装(推荐)
- 不用找官网下载各种文件,只需要一个:
- 进入 https://dev.mysql.com/downloads/repo/yum/
- 找到你的Linux版本对应的Package,例如我的是CentOS7,就选择redhat-el7的package
- 点击download下载,进入到新页面,点击
- 进入到你的服务器控制台:
- 输入
wget <你刚刚复制的地址>
,例如我的:wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
- 将他安装到你的服务器上:
sudo yum install mysql80-community-release-el7-7.noarch.rpm
- 这时候你可以选择安装最新的
sudo yum install mysql-community-server
- 或者查询指定版本:
yum --showduplicates list mysql-community-server | expand
版本会在下来列出 - mysql-community-server.x86_64 8.0.21-1.el7 mysql80-community
- mysql-community-server.x86_64 8.0.22-1.el7 mysql80-community
- mysql-community-server.x86_64 8.0.23-1.el7 mysql80-community
- mysql-community-server.x86_64 8.0.24-1.el7 mysql80-community
- mysql-community-server.x86_64 8.0.25-1.el7 mysql80-community
- mysql-community-server.x86_64 8.0.26-1.el7 mysql80-community
- 使用
sudo yum install mysql-community-server-8.0.22-1.el7
进行安装 - 此时可以使用
systemctl status mysqld
查看服务状态是未启动的
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
启动MySQL服务systemctl start mysqld
,再次查看状态就可以看到
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2023-03-19 08:42:15 PDT; 3s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 3705 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 3785 (mysqld)
Status: "Server is operational"
Tasks: 38
CGroup: /system.slice/mysqld.service
└─3785 /usr/sbin/mysqld
Mar 19 08:42:09 localhost.localdomain systemd[1]: Starting MySQL Server...
Mar 19 08:42:15 localhost.localdomain systemd[1]: Started MySQL Server.
查看日志:/var/log/mysqld.log
2023-03-19T15:42:11.132255Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.22) initializing of server in progress as process 3740
2023-03-19T15:42:11.142609Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2023-03-19T15:42:11.471932Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2023-03-19T15:42:12.132576Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: kpR9Hw5?M%-o
2023-03-19T15:42:14.645203Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.22) starting as process 3785
2023-03-19T15:42:14.654957Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2023-03-19T15:42:14.884161Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2023-03-19T15:42:14.977722Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
2023-03-19T15:42:15.054065Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2023-03-19T15:42:15.054224Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2023-03-19T15:42:15.079033Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.22' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Server - GPL.
找到其中的字段:A temporary password is generated for root@localhost: kpR9Hw5?M%-o,其中kpR9Hw5?M%-o
这部分就是密码。接下来需要登录MySQL服务器,重置MySQ的密码。
进入数据库以后,执行:ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
;这是你进入新数据库需要执行的第一步,再刷新权限FLUSH PRIVILEGES;
;创建一个新的用户 create user 'root'@'%' identified by '你的新密码';
,再将权限给到新创建的root上面:grant all privileges on *.* to 'root'@'%';
,做完这个操作,一般来说都没问题了,使用FLUSH PRIVILEGES;
刷新一下权限。
如果外部仍不能连接数据库,请检查防火墙,systemctl status firewalld
,如果开启的,就可以给他关闭掉,systemctl stop firewalld;systemctl disable firewalld;
第三部分、遇到的BUG
1. 打的包在运行的时候,提示没有主属性清单:
在pom.xml里面的<project>
标签的尾部加入:
<build>
<defaultGoal>compile</defaultGoal>
<sourceDirectory>src/main/java</sourceDirectory>
<finalName>login-demo-${version}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.7.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
finalName标签指定你打完包后包的名称
version的版本和你现在的SpringBoot版本一致就行
如何打包:使用IDEA,右边的Maven菜单里面Lifecycle,先点package,就可以在Project菜单里面看见一个targe菜单,里面的Jar文件就是打包出来的文件
2. 在服务器里面使用80端口,但是提示:
Caused by: java.net.SocketException: Permission denied
at sun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_333]
at sun.nio.ch.Net.bind(Net.java:438) ~[na:1.8.0_333]
at sun.nio.ch.Net.bind(Net.java:430) ~[na:1.8.0_333]
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:225) ~[na:1.8.0_333]
标识当前的用户没有使用80端口的权限,只有root用户可以使用80端口,提供的解决方式是:
使用root用户,运行下面的指令:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
该命令可以将80的端口映射到8080上面去
取消映射:iptables -t nat -L -n --line-numbers,看看你的映射是第几个,使用命令:iptables -t nat -D PREROUTING 1,这里假如它的序号是1
3. 使用系统管理员,给其他的Linux用户修改密码:
登录系统管理员:
使用passwd 要改名的用户