Spring Boot 部署 Web 项目
1. 创建 Spring Boot + MyBatis Web 项目
① 新建 Maven 工程
mvn archetype:generate -DgroupId=com.example -DartifactId=myproject -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
进入项目目录:
cd myproject
② 编辑 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>myproject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
</parent>
<dependencies>
<!-- Spring Boot Web 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis 依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.0</version>
</dependency>
<!-- MySQL 依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Lombok 简化 Java Bean -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2. 编写 Spring Boot 启动类
创建 com.example.myproject.Application.java
package com.example.myproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
3. 配置 MyBatis 数据源
编辑 application.yml
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: classpath:mappers/*.xml
configuration:
map-underscore-to-camel-case: true
4. 编写数据库访问层
① 创建 User 实体类
package com.example.myproject.model;
import lombok.Data;
@Data
public class User {
private Long id;
private String name;
private String email;
}
② 创建 UserMapper.java
package com.example.myproject.mapper;
import com.example.myproject.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface UserMapper {
@Select("SELECT * FROM users")
List<User> findAll();
}
③ 创建 UserService.java
package com.example.myproject.service;
import com.example.myproject.mapper.UserMapper;
import com.example.myproject.model.User;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
private final UserMapper userMapper;
public UserService(UserMapper userMapper) {
this.userMapper = userMapper;
}
public List<User> getAllUsers() {
return userMapper.findAll();
}
}
④ 创建 UserController.java
package com.example.myproject.controller;
import com.example.myproject.model.User;
import com.example.myproject.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping
public List<User> getUsers() {
return userService.getAllUsers();
}
}
5. 构建 & 运行项目
① 打包项目
mvn clean package
生成 myproject-0.0.1-SNAPSHOT.jar 文件。
② 运行 Spring Boot 项目
java -jar target/myproject-0.0.1-SNAPSHOT.jar
访问 http://localhost:8080/users 查看用户数据。
6. 部署 Spring Boot Web 项目
方式 1:使用 nohup 后台运行
nohup java -jar target/myproject-0.0.1-SNAPSHOT.jar > log.out 2>&1 &
方式 2:使用 systemd 管理服务
创建服务文件 /etc/systemd/system/myproject.service
[Unit]
Description=Spring Boot MyProject Service
After=network.target
[Service]
User=root
ExecStart=/usr/bin/java -jar /path/to/myproject-0.0.1-SNAPSHOT.jar
SuccessExitStatus=143
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
启动服务:
systemctl daemon-reload
systemctl start myproject
systemctl enable myproject
查看日志:
journalctl -u myproject -f
7. 生成 WAR 包并部署到 Tomcat
修改 pom.xml
<packaging>war</packaging>
修改 Application.java
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.boot.builder.SpringApplicationBuilder;
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}
构建 WAR
mvn clean package
将 target/myproject.war 复制到 Tomcat webapps/ 目录:
cp target/myproject.war /path/to/tomcat/webapps/
启动 Tomcat:
/path/to/tomcat/bin/startup.sh
访问 http://localhost:8080/myproject/users。