Spring Boot 部署 Web 项目

82 阅读2分钟

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