继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Springboot企业级开发资料入门教程

杨魅力
关注TA
已关注
手记 326
粉丝 56
获赞 259
概述

本文提供了全面的Spring Boot企业级开发资料,涵盖了从环境搭建到实战应用的各个层面。内容包括开发环境配置、快速创建项目、核心功能详解以及数据库集成、Web服务开发、安全与权限管理、日志与监控等模块。文章通过示例代码和详细步骤,帮助开发者深入了解和掌握Spring Boot的各项特性。

Spring Boot简介与环境搭建

Spring Boot介绍

Spring Boot是由Pivotal团队提供的一个开源框架,其主要目标是简化新Spring应用的初始搭建以及开发过程。Spring Boot可以在没有Spring配置的情况下运行,它通过自动配置、内置的Web服务器、开箱即用的生产就绪特性等功能,使开发者更加专注于业务逻辑的实现。

Spring Boot具有以下特性:

  • 独立运行:无需外部依赖,可以独立运行
  • 自动配置:自动配置了许多常用的框架和库
  • 内嵌Web服务器:嵌入了Tomcat、Jetty或Undertow等Web服务器
  • 简化Maven/Gradle配置:内置了默认配置,减少了配置的复杂性
  • 工具支持:支持自动重启功能、内嵌配置文件等
  • 无代码生成:无需生成配置文件或XML文件

开发环境配置

要开发Spring Boot应用,首先需要安装Java开发环境,并确保环境变量已正确配置。

安装Java开发环境

  1. Java JDK:下载并安装最新版本的Java JDK,如Java 11或更高版本。
  2. 环境变量配置:设置JAVA_HOME环境变量到JDK安装目录,并确保PATH包含%JAVA_HOME%\bin

示例代码(环境变量配置):

set JAVA_HOME=C:\Program Files\Java\jdk-11
set PATH=%JAVA_HOME%\bin;%PATH%

安装Maven

  1. 下载Maven:从 Maven 官方网站下载并安装 Maven。
  2. 配置环境变量:设置MAVEN_HOME环境变量到Maven安装目录,并确保PATH包含%MAVEN_HOME%\bin

示例代码(环境变量配置):

set MAVEN_HOME=C:\Program Files\apache-maven-3.8.1
set PATH=%MAVEN_HOME%\bin;%PATH%

安装IDE

使用支持Java开发的IDE,如 IntelliJ IDEA 或 Eclipse。

  1. IntelliJ IDEA:下载并安装 IntelliJ IDEA,确保 IDE 已安装了 Java 插件和 Maven 插件。
  2. Eclipse:下载并安装 Eclipse,确保 IDE 已安装了 Java 插件和 Maven 插件。

快速创建Spring Boot项目

使用 Spring Initializr 快速创建Spring Boot项目:

  1. 访问 Spring Initializr 网站(https://start.spring.io/)。
  2. 选择项目的基本信息:
    • Project:Maven Project
    • Language:Java
    • Spring Boot:使用当前提供版本
    • Project Metadata:项目名、组织名、描述等
  3. 选择项目依赖:
    • Dependencies:选择所需的依赖,如Spring Web、Spring Data JPA等
  4. 点击“Generate”按钮,下载生成的项目文件夹。
  5. 解压下载的文件夹,导入到IDE中。

示例代码:

<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>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.8</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>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
Spring Boot核心功能详解

自动配置与依赖管理

Spring Boot通过自动配置和依赖管理简化开发过程。自动配置使开发者无需编写繁琐的配置代码,而是通过注解和配置文件来自动配置应用。

自动生成的配置

Spring Boot会根据类路径上的依赖自动配置应用。例如,添加了spring-boot-starter-web依赖,Spring Boot会自动配置一个嵌入的Tomcat服务器和Spring MVC。

示例代码(自动配置):

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

依赖管理

Spring Boot父POM会自动管理依赖版本,避免版本冲突。通过继承父POM,子项目可以继承父POM的依赖管理。

示例代码(父POM配置):

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.8</version>
</parent>
``

### Spring Boot Starter的使用

Spring Boot Starter 是一组可快速配置的依赖集合,使用这些依赖可以快速开发一个可运行的Spring应用。常用的Starter包括:

- `spring-boot-starter-web`:用于开发Web应用
- `spring-boot-starter-data-jpa`:用于开发基于JPA的数据访问应用
- `spring-boot-starter-security`:用于开发安全应用

示例代码(Starter配置):
```xml
<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>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
</dependencies>

配置文件详解(application.properties/application.yml)

Spring Boot支持使用application.propertiesapplication.yml来配置应用的属性。

application.properties

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/dbname
spring.datasource.username=root
spring.datasource.password=root

application.yml

server:
  port: 8080
spring:
  datasource:
  url: jdbc:mysql://localhost:3306/dbname
  username: root
  password: root
实战应用:数据库集成

Spring Data JPA简介与使用

Spring Data JPA 是Spring Data项目的一部分,用于简化JPA(Java Persistence API)的使用。它提供了CRUD操作、分页、排序等功能,并兼容多种数据库。

依赖添加

pom.xml中添加spring-boot-starter-data-jpa依赖。

示例代码(JPA依赖):

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

数据库连接配置

application.propertiesapplication.yml中配置数据库连接信息。

示例代码(数据库连接配置):

spring.datasource.url=jdbc:mysql://localhost:3306/dbname
spring.datasource.username=root
spring.datasource.password=root

实体类和Repository接口定义

创建实体类和JPA Repository接口。

示例代码(实体类):

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

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

    // Getters and Setters
}

示例代码(Repository接口):

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

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

数据库操作示例

通过Repository接口进行数据库操作。

示例代码(数据库操作):

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

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

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

    public User findUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }
}
实战应用:Web服务开发

创建RESTful API

使用Spring Boot创建RESTful API服务。

创建Controller

创建一个Controller类处理HTTP请求。

示例代码(Controller创建):

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.findUserById(id);
    }

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

控制器开发与测试

使用Postman等工具测试API接口。

示例代码(Controller测试):

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication implements CommandLineRunner {
    @Autowired
    private UserService userService;

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

    @Override
    public void run(String... args) throws Exception {
        User user = new User();
        user.setName("John Doe");
        user.setEmail("john.doe@example.com");
        userService.saveUser(user);
    }
}

响应式编程与WebFlux介绍

Spring WebFlux是Spring Boot 2.x版本引入的响应式Web框架。它基于Reactor库,支持非阻塞I/O和响应式编程。

创建WebFlux应用

示例代码(WebFlux创建):

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.RouterFunctions;
import org.springframework.web.reactive.function.server.ServerResponse;

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

    @Bean
    public RouterFunction<ServerResponse> route() {
        return RouterFunctions.route()
                .GET("/users", this::getUserById)
                .POST("/users", this::createUser)
                .build();
    }

    public Mono<ServerResponse> getUserById(ServerRequest request) {
        Long id = Long.parseLong(request.pathVariable("id"));
        return ServerResponse.ok().body(userService.findUserById(id), User.class);
    }

    public Mono<ServerResponse> createUser(ServerRequest request) {
        return request.bodyToMono(User.class)
                .flatMap(user -> ServerResponse.ok().body(userService.saveUser(user), User.class));
    }
}
实战应用:安全与权限管理

Spring Security集成与配置

Spring Security 是Spring框架的一个安全模块,用于保护应用免受未授权访问。它支持多种认证和授权策略。

添加依赖

pom.xml中添加spring-boot-starter-security依赖。

示例代码(安全依赖添加):

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

安全配置

创建一个安全配置类,继承WebSecurityConfigurerAdapter

示例代码(安全配置类):

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;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/users/**").permitAll()
                .anyRequest().authenticated()
            .and()
                .httpBasic();
    }
}

用户认证与授权

使用Spring Security的认证功能,允许特定用户访问资源。

示例代码(用户认证配置):

import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@Configuration
public class SecurityConfig {
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        PasswordEncoder encoder = new BCryptPasswordEncoder();
        auth.inMemoryAuthentication()
            .withUser("user").password(encoder.encode("password")).roles("USER")
            .and()
            .withUser("admin").password(encoder.encode("password")).roles("ADMIN");
    }
}

配置CSRF保护和Session管理

CSRF保护

启用CSRF保护,防止跨站请求伪造攻击。

示例代码(CSRF保护配置):

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;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/users/**").permitAll()
                .anyRequest().authenticated()
            .and()
                .csrf().disable()
                .httpBasic();
    }
}

Session管理

配置Session管理,控制Session的有效期和行为。

示例代码(Session管理配置):

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.web.session.HttpSessionEventPublisher;

@Configuration
public class SecurityConfig {
    @Bean
    public HttpSessionEventPublisher httpSessionEventPublisher() {
        return new HttpSessionEventPublisher();
    }
}
实战应用:日志与监控

日志管理(SLF4J,Logback)

Spring Boot默认使用SLF4J和Logback作为日志框架。

配置日志级别

application.propertiesapplication.yml中配置日志级别。

示例代码(日志级别配置):

# application.properties
logging.level.root=INFO
logging.level.com.example=DEBUG
# application.yml
logging:
  level:
    root: INFO
    com.example: DEBUG

使用Logback配置文件

可以自定义Logback配置文件logback-spring.xml

示例代码(Logback配置文件):

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

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

应用监控工具(Micrometer, Prometheus)

Spring Boot Actuator提供了一组预定义的端点,用于监控和管理应用。Micrometer是Spring Boot推荐的监控库,支持多种监控后端,如Prometheus、Grafana等。

添加依赖

pom.xml中添加Micrometer依赖。

示例代码(Micrometer依赖添加):

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

配置Prometheus

application.propertiesapplication.yml中配置Prometheus监控。

示例代码(Prometheus配置):

# application.properties
management.endpoints.web.exposure.include=prometheus
management.metrics.web.server.request-time-quantiles=0.5, 0.95
# application.yml
management:
  endpoints:
    web:
      exposure:
        include: prometheus
  metrics:
    web:
      server:
        request-time-quantiles: 0.5, 0.95

Actuator端点配置与使用

Actuator提供了一系列管理端点,可以用来获取应用的运行时信息,如健康检查、环境信息等。

启用Actuator端点

pom.xml中添加spring-boot-starter-actuator依赖。

示例代码(Actuator依赖添加):

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

配置Actuator端点

application.propertiesapplication.yml中配置Actuator端点。

示例代码(Actuator端点配置):

# application.properties
management.endpoints.web.exposure.include=health,info
management.endpoint.health.show-details=always
# application.yml
management:
  endpoints:
    web:
      exposure:
        include: health,info
  endpoint:
    health:
      show-details: always

访问Actuator端点

启动应用后,访问/actuator/health/actuator/info等端点获取应用信息。

示例代码(Actuator端点使用):

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.actuate.health.HealthEndpoint;
import org.springframework.boot.actuate.health.HealthEndpointComposite;
import org.springframework.boot.actuate.info.InfoProperties;
import org.springframework.boot.actuate.info.InfoContributor;
import org.springframework.boot.actuate.info.InfoContributorRegistry;
import org.springframework.boot.actuate.info.InfoPropertiesCustomizer;
import org.springframework.boot.actuate.info.InfoPropertiesCustomizerRegistry;
import org.springframework.context.annotation.Bean;

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

    @Bean
    public InfoPropertiesCustomizer customizer() {
        return new InfoPropertiesCustomizer() {
            @Override
            public void customize(InfoProperties properties) {
                properties.setApp("myapp");
            }
        };
    }
}

通过上述配置和代码示例,你已经能够掌握Spring Boot项目的基本开发和管理。希望这些知识和实践对你有所帮助。如有需要,可以继续深入学习Spring Boot的更多高级功能。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP