项目环境
操作系统:Mac OSX Catalina 10.15.1
IDE: IntelliJ IDEA CE(社区版)
JDK版本:推荐JDK 8或JDK 11(LTS版本)
Maven版本:3.6+(IDEA自带,通常无需单独安装)
数据库版本:
mysql: MySQL Community Server 8.0.19
mybatis-spring-boot-starter:2.1.1
mysql-connector-java
注意: IDEA社区版不包含Spring Initializr集成和企业版的Spring支持,但我们可以通过Spring Assistant插件获得类似体验!
创建项目
安装Spring Assistant插件
在官方插件市场搜索Spring Assistant并下载
在Preferences > Plugins设置中,选择**Install Plugin from Disk…**安装下载好的插件zip包
安装完成后重启IDEA,插件就生效了!
Tips: 如果网络不好下载失败,可以使用IDEA的HTTP代理设置(Preferences > Appearance & Behavior > System Settings > HTTP Proxy)配置代理。
使用插件新建Maven项目
选择Spring Assistant按步骤新建项目,这个过程和使用Spring Initializr官网基本一致。
Step 1: 选择项目类型和Spring Boot版本
- Type: 选择Maven Project(也可以选Gradle,看个人喜好)
- Language: Java
- Packaging: Jar(推荐,方便部署)
- Java Version: 8或11(根据你安装的JDK版本选择)
- Spring Boot Version: 选择稳定版本,避免SNAPSHOT版本
Step 2: 配置项目元数据
- Group: 公司域名反写,如com.example
- Artifact: 项目名称,如demo01
- Package Name: 自动生成,也可以手动修改
- Name: 项目显示名称
- Description: 项目描述(可选)
这些信息会影响Maven的坐标和Java包结构,建议认真填写。
Step 3: 选择项目依赖
Spring Boot提供了上百个Starter依赖,初学者可以先选择:
- Spring Web: 包含Spring MVC和Tomcat,Web开发必选
- Spring Boot DevTools: 热部署工具,修改代码自动重启(可选但推荐)
- Lombok: 简化实体类代码(可选)
随着学习深入,后续可以添加:
- Spring Data JPA(数据库ORM)
- MySQL Driver(数据库驱动)
- Spring Security(安全框架)
- Thymeleaf(模板引擎)
Step 4: 确认项目信息并创建
检查项目路径和名称,点击Finish,IDEA会自动下载Maven依赖。第一次下载可能需要几分钟,耐心等待!
Tips: 如果Maven下载依赖很慢,可以配置国内镜像源(阿里云、华为云等),在Maven的settings.xml中添加mirror配置。
项目结构
创建完成后,项目的文件目录结构如下:
目录说明:
1 | demo01/ |
核心文件解析:
1. DemoApplication.java - 启动类
1 | // Spring Boot核心注解 |
@SpringBootApplication是一个组合注解,包含:
@SpringBootConfiguration: 标识为配置类@EnableAutoConfiguration: 启用自动配置@ComponentScan: 扫描当前包及子包的组件
2. application.properties - 配置文件
这个文件用于配置应用参数,比如:
1 | # 服务器端口(默认8080) |
也可以使用YAML格式(application.yml),更适合层级配置:
1 | server: |
pom.xml文件依赖:
1 | <dependencies> |
依赖说明:
spring-boot-starter-web: 这一个依赖就包含了Web开发所需的所有组件,这就是Starter的威力!spring-boot-starter-test: 包含JUnit、Mockito、AssertJ等测试框架
Tips: 不需要在pom.xml中指定依赖的版本号,因为spring-boot-starter-parent已经统一管理了所有依赖的版本,避免版本冲突。
运行项目
选中DemoApplication文件,右键选择Run ‘DemoApplication’或Debug ‘DemoApplication’
快捷键:
- Mac:
Control + Shift + R(Run) 或Control + Shift + D(Debug) - Windows/Linux:
Shift + F10(Run) 或Shift + F9(Debug)
运行结果:
Chrome浏览器测试:
打开浏览器,访问 http://localhost:8080
看到Whitelabel Error Page(白标错误页面)是正常的!这是Spring Boot的默认错误页面,表示:
- ✅ 应用启动成功
- ✅ 服务器正常运行
- ❌ 当前没有配置URL映射规则
错误信息:
1 | Whitelabel Error Page |
解读: 我们还没有创建任何Controller来处理请求,所以Spring Boot不知道如何响应根路径”/“的请求。接下来我们添加一个控制器来解决这个问题。
添加控制器
创建Controller包和类
在com.example.demo01包下创建controllers子包(遵循分层架构规范),然后创建DemoController类:
1 | package com.example.demo01.controllers; |
@RestController注解说明:
@RestController=@Controller+@ResponseBody@Controller: 标识这是一个Spring MVC控制器@ResponseBody: 将返回值直接写入HTTP响应体,而非渲染视图- 适用于RESTful API开发,返回JSON/XML数据
如果你要返回HTML页面(使用Thymeleaf等模板引擎),应该使用@Controller而非@RestController。
添加请求映射方法
使用**@RequestMapping**注解设置URL映射规则,并创建handler方法:
1 | package com.example.demo01.controllers; |
@RequestMapping详解:
value或直接写路径:指定URL路径method: 指定HTTP方法(GET、POST、PUT、DELETE等)params: 指定请求参数headers: 指定请求头
更推荐的写法(RESTful风格):
1 | import org.springframework.web.bind.annotation.*; |
注解对比:
@GetMapping=@RequestMapping(method = RequestMethod.GET)@PostMapping=@RequestMapping(method = RequestMethod.POST)@PutMapping=@RequestMapping(method = RequestMethod.PUT)@DeleteMapping=@RequestMapping(method = RequestMethod.DELETE)
再次运行
保存代码后,如果你安装了DevTools,应用会自动重启(控制台会显示”Restarting…”)。如果没有,手动停止应用(点击红色方块按钮)并重新运行。
快捷键:
- Mac:
Command + R(重新运行) - Windows/Linux:
Ctrl + F5
打开浏览器访问 http://localhost:8080/:
成功!浏览器显示了我们返回的字符串:”Hello, Spring Boot!”
测试其他端点:
- 访问
http://localhost:8080/welcome- 应该显示欢迎信息 - 访问
http://localhost:8080/api/hello- 如果你使用了RESTful风格的写法 - 访问
http://localhost:8080/api/user/123- 测试路径变量
到这里我们已经成功创建并运行了一个简单的Spring Boot应用!
使用Mybatis访问数据库
MySQL安装
下载MySQL
官网下载地址
下载并安装dmg文件, 安装过程会要求设置密码,为了方便使用,可以选择传统的密码加密方式
Use Legacy Password Encryption,设置root密码
支持手动启动/停止数据库服务,选择Initialize Database可以修改密码加密方式和密码,下文会介绍如果使用命令行完成这些任务。
使用Shell脚本启动/停止DB Server
使用脚本之前,请先配置mysql环境变量,以使用zsh为例,我们需要在.zshrc文件中添加:
1 | #mysql |
保存之后执行source命令:
1 | source .zshrc |
启动mysql:
1 | sudo /usr/local/mysql/support-files/mysql.server start |
停止mysql:
1 | sudo /usr/local/mysql/support-files/mysql.server stop |
重启mysql:
1 | sudo /usr/local/mysql/support-files/mysql.server restart |
保存命令行至shell文件中,方便后续使用
1 | chmod 777 mysql-start.sh chmod 777 mysql-restart.sh chmod 777 mysql-stop.sh |
登录MySQL
执行命令行:
1 | mysql -u root -p |
输入初始设置的密码,登录成功会进入mysql>命令行输入界面,若出现无权限提示,需要重置密码
1 | ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) |
重置密码
1. 停止MySQL server 2. 使用安全模式启动MySQL server, 添加--skip-grant-tables参数关闭登录时密码校验
1 | sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables |
1 | sudo /usr/local/mysql/bin/mysql -u root |
1 | mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new pwd'; |
1 | ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement |
1 | mysql> flush privileges; |
使用MySQL
创建数据库表
1. 首先创建一个独立的DB用于开发 mysql> create database dev_db; 2. 切换到新创建的DB mysql> use database dev_db; 3. 在dev_db下新建表t_member mysql> create table t_member(id int, name varchar(255), book_count int, min_duration int, max_duration int, av_duration int, times_per_week int); 4. 手动插入几条测试数据
1 | mysql> insert into t_member values(1, "小明", 10, 30, 65, 45, 3); |
安装GUI工具
1. 推荐安装[Sequel Pro](https://sequelpro.com/test-builds)最新测试版本,因为稳定版本在loading数据库时会出现卡死,详细原因参见GitHub issue: [#2699](https://github.com/sequelpro/sequelpro/issues/2699) 2. 使用**Standard**或**TCP/IP**方式连接MySQL server并添加到收藏列表
连接成功后可以切换DB和查看表
在工程中配置MyBatis和MySQL
pom.xml配置依赖
添加mybatis-spring-boot-starter和mysql-connector-java依赖
1 | <dependency> |
配置数据库
在resources/application.properties中添加配置:
1 | mybatis.type-aliases-package=com.example.domains |
使用Mybatis访问MySQL
创建Mapper接口
在每个接口声明之前需要使用@Mapper注解,由于MyBatis动态代理机制的存在,我们无需手动实现Mapper接口
1 | package com.example.demo01.mapper; |
为了免去每个接口文件都要添加@Mapper注解,MyBatis提供统一扫描包的方式鉴别Mapper接口
1 |
|
依赖注入Mapper并使用
使用@Autowired注解,注入Mapper依赖,然后就可以直接使用Mapper实例调用接口方法
1 |
|
接口测试
运行DemoApplication, 用Chrome测试一下接口
部署应用
iTerm2打造远程工具
获取阿里云ECS服务器实例公网IP
在阿里云控制台的实例列表中,获取ECS服务器实例的公网IP. (如果实例列表为空,请先选择正确的区域)
创建iTerm Profile
1. 新建一个名为aliyun的Profile 2. 选择Command(另一个选项是Login Shell), 设置命令行内容为:ssh -A -p 22 root@阿里云服务器公网IP 3. 重启iTerm
使用aliyun Profile新建iTerm Window/Tab
选中Profiles菜单,选择aliyun:
iTerm会新建一个Tab
- 输入阿里云服务器登录密码,即可远程连接到ECS服务器实例
安装支持rz和sz命令的lrzsz
1 | brew install lrzsz |
1 | chmod 777 /usr/local/bin/iterm2-* |
在ECS服务器安装lrzsz
命令行安装lrzsz:
1 | yum install lrzsz |
使用rz命令上传jdk
- Oracle官方下载Linux x86_64版本的jdk压缩包
使用iTerm 2 aliyun Profile新建Tab, 登录ECS服务器并运行rz命令:
rz - 在文件选择器中选中jdk压缩包,确认并等待上传
- 解压:
tar -zxvf jdk-8u221-linux-x64.tar.gz - 配置环境变量:
- 编辑/etc/profile文件:
export JAVA_HOME=/usr/java/jdk1.8.0_221 export CLASSPATH=$JAVA_HOME/lib/ export PATH=$PATH:$JAVA_HOME/bin export PATH JAVA_HOME CLASSPATH - 立即执行/etc/profile文件,使之生效:
source /etc/profile - 运行java命令验证jdk是否安装成功:
java -version
ECS服务器绑定域名
添加A记录
- 选择域名进入解析配置
- 添加一条云解析设置,记录类型为A记录,记录值是ECS服务器公网ipv4 IP地址,TTL选择默认值10分钟,点击添加即可
本地验证
执行ping命令验证域名是否绑定成功
ECS安装MariaDB
安装MariaDB
使用yum命令安装MariaDB
1 | yum install mariadb-server mariadb |
启动MariaDB,并设置开机启动
1 | systemctl start mariadb systemctl enable mariadb |
mysql初始化
1 | [root@server1 ~]# mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MySQL to secure it, we'll need the current password for the root user. If you've just installed MySQL, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none):<–初次运行直接回车 OK, successfully used password, moving on… Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation. Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车 New password: <– 设置root用户的密码 Re-enter new password: <– 再输入一次你设置的密码 Password updated successfully! Reloading privilege tables.. … Success! By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] <– 是否删除匿名用户,生产环境建议删除,所以直接回车 … Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] <–是否禁止root远程登录,根据自己的需求选择Y/n并回车,建议禁止 … Success! By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] <– 是否删除test数据库,直接回车 - Dropping test database… … Success! - Removing privileges on test database… … Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] <– 是否重新加载权限表,直接回车 … Success! Cleaning up… All done! If you've completed all of the above steps, your MySQL installation should now be secure. Thanks for using MySQL! [root@server1 ~]# |
登录MariaDB
使用root账号登录MariaDB:
1 | mysql -u root -p |
部署
安装Alibaba Cloud Toolkit
配置Access Key
ECS部署
远程启动服务
1 | nohup java -jar service-0.0.1-SNAPSHOT.jar |
Done! 🎉 Java Web之旅到这里就结束了,Happy Coding! ☕️
相关链接:
[1] LINUX安装MARIADB
[2] 部署SpringBoot到阿里云
[3] Spring官方文档