为了账号安全,请及时绑定邮箱和手机立即绑定

Springboot框架项目实战入门教程

标签:
SpringBoot
概述

本文将详细介绍如何使用Spring Boot框架项目实战,从环境搭建到开发RESTful服务,再到构建一个简单的个人博客系统,帮助开发者快速掌握Spring Boot的核心功能和应用技巧。

Spring Boot框架项目实战入门教程
Spring Boot简介与环境搭建

Spring Boot简介

Spring Boot 是由 Pivotal 团队提供的基于 Spring 平台的全新的开发框架。它极大地简化了传统 Java 应用程序的开发过程,使开发者能够快速构建独立的、生产级别的基于 Spring 框架的应用程序。Spring Boot 的核心功能包括自动配置、约定优先于配置(Convention over Configuration)、内置的开发和生产环境兼容性、嵌入式HTTP服务器(如 Tomcat、Jetty 或 Undertow)等。

开发环境配置

为了开始使用 Spring Boot 进行开发,你需要安装以下工具:

  1. Java Development Kit (JDK):确保安装最新版本的 JDK,建议使用 JDK 8 或以上版本。
  2. IntelliJ IDEA 或 Eclipse:选择一个合适的 IDE 进行开发。
  3. Maven 或 Gradle:用于管理和编译项目的构建工具。

安装JDK

# 查看已安装的JDK版本
java -version

# 安装JDK(示例以Ubuntu为例)
sudo apt-get update
sudo apt-get install openjdk-11-jdk

安装IDEA

  1. 下载 IntelliJ IDEA 最新版的安装包。
  2. 双击安装包,按照安装向导完成安装。
  3. 打开 IntelliJ IDEA,创建一个新的项目。

安装Maven

# 查看是否已安装Maven
mvn -version

# 安装Maven(示例以Ubuntu为例)
sudo apt-get update
sudo apt-get install maven

创建第一个Spring Boot应用

创建第一个 Spring Boot 应用的步骤如下:

  1. 创建一个新的 Maven 项目

    • 在 IntelliJ IDEA 中选择“File” -> “New” -> “Project”。
    • 选择“Maven”,然后点击“Next”。
    • 输入项目名称(例如 springboot-demo),选择项目存储位置,点击“Next”。
    • 在依赖管理界面,勾选“Create a simple project”,点击“Finish”。
  2. 添加 Spring Boot 依赖
    打开 pom.xml 文件,添加 Spring Boot 的依赖。

    <dependencies>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
           <version>2.5.4</version>
       </dependency>
    </dependencies>
  3. 创建启动类
    创建一个启动类 DemoApplication.java,并添加主方法。

    package com.example.demo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class DemoApplication {
       public static void main(String[] args) {
           SpringApplication.run(DemoApplication.class, args);
       }
    }
  4. 运行应用
    选中 DemoApplication 类,右键选择“Run 'DemoApplication.main()'”。

  5. 验证应用
    打开浏览器,访问 http://localhost:8080,应该能看到默认的欢迎页面。
Spring Boot核心概念与注解解析

@SpringBootApplication注解解析

@SpringBootApplication 是 Spring Boot 最核心的注解,它综合了多个其他注解的功能,简化了配置过程。具体来说,它包含了以下三个注解:

  • @SpringBootConfiguration:表示这是一个 Spring Boot 应用配置,等同于 @Configuration
  • @EnableAutoConfiguration:开启自动配置功能,Spring Boot 会根据依赖自动配置项目。
  • @ComponentScan:自动扫描并注册标注了 @Component@Service@Repository@Controller 的类。

示例代码如下:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

自动配置机制

Spring Boot 的自动配置机制使得开发者无需手动编写大量的 XML 配置文件。它通过 @EnableAutoConfiguration 注解自动检测类路径中的依赖,并为 Spring 容器加载对应的配置。

例如,当项目中包含 JPA 依赖时,Spring Boot 会自动配置 EntityManagerJpaTransactionManager。开发者只需在配置文件中提供一些必要的设置,如数据库连接信息,Spring Boot 就会完成剩下的配置工作。

示例代码(pom.xml):

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <version>2.5.4</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.5.4</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.26</version>
    </dependency>
</dependencies>

配置文件使用

Spring Boot 使用 application.propertiesapplication.yml 文件进行配置。可以通过命令行参数、环境变量、外部配置文件等方式覆盖默认配置。

修改 application.properties

src/main/resources 目录下,创建或修改 application.properties 文件,添加数据库配置。

spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update

环境变量覆盖

可以在运行应用时通过环境变量覆盖配置。

export SPRING_DATASOURCE_URL=jdbc:mysql://192.168.1.100:3306/demo

外部配置文件

可以将一些敏感信息(如数据库密码)存储在外部配置文件中,并通过配置文件引用。

# application.properties
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}

在运行时设置环境变量:

export DB_URL=jdbc:mysql://192.168.1.100:3306/demo
export DB_USERNAME=root
export DB_PASSWORD=123456
使用Spring Boot构建RESTful服务

创建RESTful服务

创建一个简单的 RESTful 服务,首先需要创建一个控制器(Controller)类。控制器类使用 @RestController 注解标记,并包含一些 HTTP 请求处理方法。

创建控制器类

package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GreetingController {
    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, World!";
    }

    @GetMapping("/hello/user")
    public String sayHelloUser(@RequestParam String name) {
        return "Hello, " + name + "!";
    }
}

控制器开发

控制器负责处理 HTTP 请求并返回响应。下面是一个完整的控制器示例,包括处理 GET 请求和 POST 请求的方法。

处理 GET 请求

package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GreetingController {
    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, World!";
    }

    @GetMapping("/hello/user")
    public String sayHelloUser(@RequestParam String name) {
        return "Hello, " + name + "!";
    }
}

处理 POST 请求

package com.example.demo;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GreetingController {
    @PostMapping("/hello/user")
    public String sayHelloUser(@RequestBody User user) {
        return "Hello, " + user.getName() + "!";
    }

    public static class User {
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}

使用Spring Data JPA进行数据库操作

Spring Data JPA 是 Spring Boot 集成 JPA(Java Persistence API)的实现,可以简化数据库操作。

定义实体类

package com.example.demo;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;

    // Getter and Setter methods
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

创建仓库接口

package com.example.demo;

import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
}

创建服务类

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public List<User> findAll() {
        return userRepository.findAll();
    }

    public User save(User user) {
        return userRepository.save(user);
    }
}

创建控制器

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public List<User> getAllUsers() {
        return userService.findAll();
    }

    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
        return userService.save(user);
    }

    @PutMapping("/users/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        user.setId(id);
        return userService.save(user);
    }

    @DeleteMapping("/users/{id}")
    public void deleteUser(@PathVariable Long id) {
        userService.delete(id);
    }
}
Spring Boot中的Web开发

静态资源处理

Spring Boot 提供了内置的支持,可以自动处理静态资源(如 HTML、CSS、JavaScript 文件)。默认情况下,这些资源可以从 src/main/resources/staticsrc/main/webapp 目录加载。

添加静态资源

src/main/resources/static 目录下创建 index.html 文件。

<!DOCTYPE html>
<html>
<head>
    <title>Spring Boot Static Resource Example</title>
</head>
<body>
    <h1>Welcome to Spring Boot!</h1>
    <script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="scripts/app.js"></script>
</body>
</html>

src/main/resources/static/scripts 目录下创建 app.js 文件。

console.log("App.js is loaded");

模板引擎使用

Spring Boot 支持多种模板引擎,如 Thymeleaf 和 FreeMarker。这里以 Thymeleaf 为例进行介绍。

添加 Thymeleaf 依赖

pom.xml 文件中添加 Thymeleaf 依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    <version>2.5.4</version>
</dependency>

使用 Thymeleaf 模板

创建 src/main/resources/templates 目录,并在其中创建 index.html 文件。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Spring Boot Thymeleaf Example</title>
</head>
<body>
    <h1 th:text="'Hello, ' + ${name}">Hello, World!</h1>
</body>
</html>

创建控制器

package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class ThymeleafController {
    @GetMapping("/")
    public String home(Model model) {
        model.addAttribute("name", "World");
        return "index";
    }
}

使用Spring Security进行安全配置

Spring Security 是一个强大的安全框架,Spring Boot 提供了对它的集成。下面是如何配置基本的认证和授权。

添加 Spring Security 依赖

pom.xml 文件中添加 Spring Security 依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

配置 Spring Security

创建 SecurityConfig.java 类,配置认证和授权。

package com.example.demo;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/hello").permitAll()
                .anyRequest().authenticated()
            .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
            .and()
            .logout()
                .permitAll();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
                .withUser("user")
                .password(passwordEncoder().encode("password"))
                .roles("USER");
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

创建登录页面

src/main/resources/templates 目录下创建 login.html 文件。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Login Page</title>
</head>
<body>
    <form method="post" th:action="@{/login}" th:object="${user}">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" th:field="*{username}"/>
        <br/>

        <label for="password">Password:</label>
        <input type="password" id="password" name="password" th:field="*{password}"/>
        <br/>

        <input type="submit" value="Login"/>
    </form>
</body>
</html>
Spring Boot项目打包与部署

打包项目

Spring Boot 支持将应用程序打包为一个独立的可执行 JAR 文件,便于部署。打包过程使用 Maven 或 Gradle 任务。

使用 Maven 打包

mvn clean package

这将生成一个名为 demo-0.0.1-SNAPSHOT.jar 的文件,位于 target 目录下。

使用 Gradle 打包

./gradlew bootJar

这将生成一个名为 build/libs/demo-0.0.1-SNAPSHOT.jar 的文件。

部署到Tomcat服务器

Spring Boot 包含一个内置的 Tomcat 服务器,但是在生产环境中,通常部署到外部的独立 Tomcat 服务器。

部署步骤

  1. 将打包好的 JAR 文件复制到 Tomcat 服务器的 webapps 目录下。
  2. 启动 Tomcat 服务器。
  3. 访问应用地址 http://<tomcat-server-ip>:8080/<app-name>

部署到云服务器

部署到云服务器的步骤如下:

  1. 创建云服务器

    • 登录到云服务商控制台,创建一个新的云服务器实例。
    • 配置操作系统和网络设置,确保有足够的内存和磁盘空间。
  2. 安装Java和Tomcat

    • 登录到云服务器,安装所需的 JDK 和 Tomcat。
    • 确保安装路径正确,环境变量配置完成。
  3. 上传并解压JAR文件

    • 使用SCP或SFTP工具将打包好的 JAR 文件上传到云服务器。
    • 使用命令行解压并复制文件到 Tomcat 的 webapps 目录下。
  4. 启动Tomcat
    • 执行命令启动 Tomcat 服务器。
    • 确认服务是否正常运行,可以通过 http://<cloud-server-ip>:8080/<app-name> 访问应用。
实战案例:构建个人博客系统

需求分析

本案例将构建一个简单的个人博客系统,包含以下功能:

  • 用户注册和登录功能
  • 发布文章和查看文章列表
  • 用户评论功能

功能设计

系统功能设计如下:

  1. 用户注册和登录

    • 用户可以注册账号,并通过用户名和密码登录。
    • 使用 Spring Security 进行认证和授权。
  2. 文章管理

    • 用户可以发布新文章,包括标题、正文和标签。
    • 文章列表页面显示所有文章,可以按时间、标签分类查看。
  3. 评论功能
    • 用户可以对文章进行评论。
    • 管理员可以对评论进行审核和删除。

编码实现

创建基本项目结构

src/
├── main/
│   ├── java/
│   │   └── com.example.blog/
│   │       ├── Application.java
│   │       └── controller/
│   │           └── UserController.java
│   │           └── BlogController.java
│   └── resources/
│       ├── application.properties
│       └── templates/
│           └── index.html
└── test/
    └── java/
        └── com.example.blog/
            └── ApplicationTests.java

配置Spring Security

package com.example.blog;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/blog").permitAll()
                .anyRequest().authenticated()
            .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
            .and()
            .logout()
                .permitAll();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
                .withUser("user")
                .password(passwordEncoder().encode("password"))
                .roles("USER");
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

创建用户控制器

package com.example.blog.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class UserController {
    @GetMapping("/")
    public String home(Model model) {
        model.addAttribute("name", "World");
        return "index";
    }
}

创建博客控制器

package com.example.blog.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class BlogController {
    @GetMapping("/blog")
    public String blog(Model model) {
        model.addAttribute("title", "Spring Boot Blog");
        return "blog";
    }
}

创建模板页面

src/main/resources/templates 目录下创建 index.htmlblog.html 文件。

<!-- index.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Spring Boot Blog</title>
</head>
<body>
    <h1>Welcome to Spring Boot Blog!</h1>
    <p th:text="'Hello, ' + ${name}"></p>
</body>
</html>

<!-- blog.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Blog Page</title>
</head>
<body>
    <h1 th:text="${title}"></h1>
    <p>Welcome to the blog page!</p>
</body>
</html>

测试与部署

单元测试

编写单元测试类 ApplicationTests.java,验证控制器功能。

package com.example.blog;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class ApplicationTests {
    @Test
    public void contextLoads() {
        // 单元测试代码
    }
}

部署到Tomcat

  1. 打包项目:mvn clean package
  2. 复制 JAR 文件到 Tomcat 的 webapps 目录。
  3. 启动 Tomcat 服务器。
  4. 访问应用地址 http://localhost:8080/blog

总结

通过本文的介绍,你已经掌握了从环境搭建到项目部署的整个 Spring Boot 开发流程。从简单的 RESTful 服务到复杂的博客系统,Spring Boot 提供了强大的功能和简便的开发体验。希望这些内容能够帮助你在实际开发中更高效地使用 Spring Boot。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消