手记

SpringBoot资料入门教程

概述

本文全面介绍了Spring Boot的基本概念、优势以及如何快速搭建Spring Boot项目,涵盖了环境准备、项目创建、依赖添加和应用运行等关键步骤。文章还深入讲解了Spring Boot的核心功能,如自动配置、起步依赖和配置属性,并提供了多个实用示例。此外,文章还分享了Spring Boot开发中的一些常见问题及其解决方案,并推荐了相关的开发工具和社区资源。

SpringBoot简介

SpringBoot是什么

Spring Boot 是一个由 Pivotal 团队提供的全新框架,其主要目的是简化新 Spring 应用的初始搭建以及开发过程。Spring Boot 让我们无需配置也能运行一个 Java 应用。它使用约定优于配置的原则来减少样板配置,并支持快速集成和独立的运行。

Spring Boot 基于 Spring 框架,提供了自动配置、快速启动等特点,使得开发者能够快速开发出独立的、生产级别的应用。

SpringBoot的优势

  • 简化配置:Spring Boot 通过约定优于配置的原则来减少配置文件的复杂性,让开发人员能够快速搭建应用。
  • 独立运行:Spring Boot 应用可以打包成独立的 jar 或 war 文件,通过 java -jar 命令即可运行。
  • 自动配置:Spring Boot 根据所添加的依赖进行自动配置,减少了手动配置的繁琐。
  • 嵌入式服务器:Spring Boot 内置了 Tomcat、Jetty 和 Undertow 等嵌入式服务器,无需额外的 Web 服务器安装。
  • 全面的自动配置:Spring Boot 提供了对数据库、缓存、消息、web 服务等的全面自动配置。
  • 生产就绪特性:包括应用监控、健康检查、外部配置、自动重启等功能。

如何开始使用SpringBoot

  1. 环境准备

    • 安装 JDK 和 Maven。
    • 下载并安装 Spring Boot CLI 或者使用 Spring Initializr 来快速创建项目。
  2. 创建 Spring Boot 项目

  3. 添加依赖

    • Spring Boot 项目可以通过 Maven 或 Gradle 添加依赖。
    • 使用 Spring Initializr 创建项目时,会自动生成 pom.xmlbuild.gradle 文件,你可以根据需要添加不同的依赖。
  4. 运行应用
    • 使用 IDE 调试运行应用。
    • 打包成 jar 或 war 文件后,通过命令行运行 java -jar 命令。
快速搭建SpringBoot项目

使用IDE创建SpringBoot项目

  1. 打开 IntelliJ IDEA 或 Eclipse。
  2. 点击 File -> New -> Project
  3. 选择 Spring Initializr
  4. 输入项目信息,如 Group ID、Artifact ID 和 Project Name。
  5. 选择 Java 版本和 Spring Boot 版本。
  6. 选择要包含的依赖,如 Web、Thymeleaf、Spring Data JPA 等。
  7. 点击 Finish 完成项目创建。

添加依赖

在 Maven 项目中,依赖通常在 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>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

配置文件简介

Spring Boot 使用 application.propertiesapplication.yml 文件来进行配置。这些配置文件通常位于 src/main/resources 目录下。以下是一些常见的配置示例:

# application.properties
spring.application.name=demo
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.show-sql=true
spring.h2.console.enabled=true

或者使用 YAML 格式:

# application.yml
spring:
  application:
   name: demo
  datasource:
    url: jdbc:h2:mem:testdb
    driverClassName: org.h2.Driver
    username: sa
    password: password
  jpa:
    show-sql: true
  h2:
    console:
      enabled: true
SpringBoot核心概念

自动配置

Spring Boot 的自动配置机制会根据你添加的依赖进行自动配置。例如,如果你添加了 spring-boot-starter-web 依赖,Spring Boot 会自动配置一个 Tomcat 服务器并启用 Spring MVC。

以下是一个简单的自动配置示例:

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 提供了一系列的“起步依赖”(Starter Dependencies),这些依赖会自动将所有需要的依赖项添加到项目中。例如,spring-boot-starter-web 会自动添加 Tomcat 和 Spring MVC 所需的所有依赖。

配置属性

Spring Boot 使用 @ConfigurationProperties 注解来绑定配置属性到 Java 对象。以下是一个简单的配置属性示例:

# application.properties
app.name=Demo App
app.version=1.0.0

在 Java 类中绑定这些属性:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {
    private String name;
    private String version;

    // Getters and Setters
}
SpringBoot常用功能

创建RESTful服务

Spring Boot 提供了简单的注解来创建 RESTful 服务。以下是一个简单的示例:

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

@RestController
public class HelloController {

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

集成Spring Data JPA

Spring Data JPA 是 Spring Boot 中用于数据库访问的一个框架,它简化了数据库操作。以下是一个简单的示例:

  1. 添加 JPA 依赖到 pom.xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>
  1. 创建一个简单的实体类:
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;

    // Getters and Setters
}
  1. 创建一个 JPA 控制器:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;

@RestController
public class UserController {

    @Autowired
    private UserRepository userRepository;

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

    @GetMapping("/user/{id}")
    @Transactional
    public Optional<User> getUserById(Long id) {
        return userRepository.findById(id);
    }
}
  1. 创建一个 JPA 仓库接口:
import org.springframework.data.jpa.repository.JpaRepository;

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

集成Spring Security

Spring Security 是一个强大的、可扩展的安全框架,用于保护基于 Spring 的应用。以下是一个简单的示例:

  1. 添加 Spring Security 依赖到 pom.xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
  1. 创建一个简单的安全配置类:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/user/**").hasRole("USER")
                .anyRequest().authenticated()
            .and()
                .formLogin()
                .permitAll();
    }

    @Override
    @Bean
    public UserDetailsService userDetailsService() {
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(User.withDefaultPasswordEncoder()
                .username("user")
                .password("password")
                .roles("USER")
                .build());
        manager.createUser(User.withDefaultPasswordEncoder()
                .username("admin")
                .password("password")
                .roles("ADMIN")
                .build());
        return manager;
    }
}
SpringBoot开发技巧

日志管理

Spring Boot 使用 Logback 作为默认的日志框架,但也可以配置为使用 Log4j2 或其他日志框架。以下是一个配置 Logback 的示例:

<!-- src/main/resources/logback-spring.xml -->
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

错误处理

Spring Boot 提供了全局的异常处理机制,可以通过 @ControllerAdvice 注解来实现。以下是一个示例:

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(ResourceNotFoundException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public String handleResourceNotFoundException() {
        return "Resource not found";
    }
}

部署SpringBoot应用

  1. 打包应用

    • 使用 Maven 或 Gradle 打包应用。
    • 命令行运行 mvn packagegradle build
  2. 运行应用

    • 使用命令行运行:
      java -jar target/demo.jar
  3. 部署到云平台
    • 可以将 Spring Boot 应用部署到云平台,如阿里云、华为云等。
    • 使用 Docker 进行容器化部署。
SpringBoot实用资源

常用开发工具

  • IDE
    • IntelliJ IDEA
    • Eclipse
  • 构建工具
    • Maven
    • Gradle
  • 版本管理工具
    • Git
  • 调试工具
    • Chrome DevTools
    • Postman

开发社区与文档推荐

常见问题及解决方案

  • 问题 1:Spring Boot 应用启动失败

    • 解决方案:检查日志输出,查看具体的错误信息。可能是因为配置文件错误、依赖冲突等问题。例如,确保 application.propertiesapplication.yml 文件中的配置没有错误。
  • 问题 2:配置属性无法生效

    • 解决方案:确保配置属性的前缀与配置类上的 @ConfigurationProperties 注解一致。例如,如果属性文件中定义了 app.name,则注解中应该使用 @ConfigurationProperties(prefix = "app")
  • 问题 3:Spring Security 配置无效

    • 解决方案:检查 WebSecurityConfigurerAdapter 的配置是否正确,确保权限控制逻辑没有误配置。例如,确保 configure(HttpSecurity http) 方法中的路径和角色匹配正确。
  • 问题 4:数据库连接失败

    • 解决方案:检查 application.propertiesapplication.yml 中的数据库配置是否正确,确保数据库服务正常运行。例如,检查数据库 URL、用户名和密码是否正确。
  • 问题 5:Spring Boot 应用打包后启动失败
    • 解决方案:确保打包后的 jar 文件中的配置文件路径正确,可以使用 java -jar 命令时指定配置文件路径。例如,运行 java -jar target/demo.jar --spring.config.location=file:./config/application.properties
0人推荐
随时随地看视频
慕课网APP