亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Spring Boot框架學習:從入門到實踐

標簽:
雜七雜八
概述

Spring Boot框架学习:本文旨在引领开发者深入探索Spring Boot的高效特性,从快速搭建到实战应用全过程。Spring Boot简化了Spring应用的开发流程,提供自动配置与启动支持,适用于Web应用、服务端与微服务架构。通过步骤指南与实战案例,您将掌握Spring Boot的安装、基础配置、核心组件应用以及高级特性,从入门到精通,实现高效开发与部署。

简介

Spring Boot 是一个用于快速构建基于 Spring 的应用的框架。它简化了 Spring 的配置和依赖管理,提供了方便的启动器,使得开发者能够更快地将精力集中在业务逻辑的实现上。Spring Boot 应用于多种场景,如 Web 应用程序、服务端应用、微服务架构等。它的主要优势包括简化开发流程、提供自动配置和启动功能、允许使用 JSON 格式配置文件等。

在开始之前,请确保你的系统已经安装了JDK(Java Development Kit)和Maven。Spring Boot 依赖于 Maven 进行项目构建和依赖管理。

安装与环境配置

  1. 下载 Spring Boot:从 Spring官网 下载最新版本的 Spring Boot。

  2. 创建项目:使用 IDEA、IntelliJ 或任何你喜欢的开发环境。选择“文件 > 新建 > Spring Initializr”。

  3. 配置 Maven:在项目根目录下创建或修改 pom.xml 文件,添加 Spring Boot 相关依赖,例如:

    <dependencies>
       <!-- Spring Boot Starter Web -->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       <!-- 用于集成 H2 数据库 -->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-data-jpa</artifactId>
       </dependency>
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <scope>runtime</scope>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-devtools</artifactId>
           <scope>runtime</scope>
       </dependency>
    </dependencies>
  4. 配置文件:在项目根目录下创建一个 application.properties 文件,用于存储应用配置。例如:

    server.port=8080
    spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;USEallax=TRUE
    spring.datasource.driverClassName=org.h2.Driver
    spring.datasource.username=sa
    spring.datasource.password=
    spring.jpa.show-sql=true
    spring.jpa.hibernate.ddl-auto=update
基础配置

Maven与Spring Boot整合

在上述步骤中,我们已经通过 pom.xml 文件配置了 Maven 与 Spring Boot 的集成。Maven 会自动下载并管理所有的依赖文件。

创建第一个Spring Boot项目

  1. 项目目录结构:创建目录结构如 src/main/javasrc/main/resourcessrc/main/resources/static 等。

  2. Controller:在 src/main/java 目录下创建一个 HelloController 类,用于处理 HTTP 请求:

    package com.example.demo;
    
    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, Spring Boot!";
       }
    }
  3. 运行应用:使用 mvn spring-boot:run 命令启动应用。

  4. 访问应用:在浏览器中访问 http://localhost:8080/hello,应该可以看到输出 "Hello, Spring Boot!"

配置文件详解

application.properties 文件中,我们配置了服务器端口、数据库连接信息等。这些配置允许应用在不同的环境(如开发、测试、生产)下进行调整,而无需修改代码。

核心组件探索

Spring Boot MVC框架使用

在上述示例中,我们使用了 Spring Boot 的自动配置特性,无需显式配置 Spring MVC 的相关组件。Spring Boot 会自动配置一个简单的 MVC 处理器。

静态资源与静态文件服务器

Spring Boot 提供了自动化的静态资源服务,无需额外配置。在 src/main/resources/static 目录下添加静态资源文件,应用在运行时会自动提供这些资源。

Thymeleaf模板引擎介绍与应用

Thymeleaf 是一个现代、全面的服务器端模板引擎,用于生成 HTML 内容。在项目中引入 Thymeleaf 相关依赖:

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
</dependency>

创建一个 index.html 文件在 src/main/resources/templates 目录下,编写基本的 HTML 结构:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Spring Boot App</title>
</head>
<body>
    <h1 th:text="${message}">Welcome to Spring Boot!</h1>
</body>
</html>

HelloController 类中添加一个新的方法来加载 index.html

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class HelloController {

    @GetMapping("/")
    public String index(Model model) {
        model.addAttribute("message", "Welcome to Spring Boot!");
        return "index";
    }
}

运行应用,访问 http://localhost:8080 应该能看到加载了 index.html 内容并显示 "Welcome to Spring Boot!"

数据库集成

使用JPA与H2数据库

application.properties 中添加以下配置:

spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;USEallax=TRUE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect

创建一个用户实体类 User.java

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.AUTO)
    private Long id;
    private String name;
    private String email;

    // 构造函数、getter和setter
}

src/main/resources/config 目录下创建一个 UserRepository.java

package com.example.demo.config;

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

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

创建 UserRepository 的 JPA 实现:

package com.example.demo.repository;

import com.example.demo.User;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepositoryImpl extends UserRepository {
}

HelloController 中,添加一个方法来处理用户的 CRUD 操作:

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

import com.example.demo.User;
import com.example.demo.repository.UserRepositoryImpl;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserRepositoryImpl userRepository;

    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) {
        return ResponseEntity.ok(userRepository.save(user));
    }
}

templates 目录下创建一个 users.html 文件,用于显示用户列表:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>User List</title>
</head>
<body>
    <h1>User List</h1>
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>Email</th>
            </tr>
        </thead>
        <tbody>
            <tr th:each="user : ${users}">
                <td th:text="${user.id}"></td>
                <td th:text="${user.name}"></td>
                <td th:text="${user.email}"></td>
            </tr>
        </tbody>
    </table>
</body>
</html>
Spring Boot高级特性

@SpringBootApplication注解

此注解组合了 @SpringBootConfiguration@EnableAutoConfiguration@ComponentScan 三个注解,简化了应用的启动配置。

配置属性与外部化配置

application.properties 文件中配置属性,或者使用 application.yaml 文件。外部化配置允许应用在不同的环境(如开发、测试、生产)下使用不同的配置文件。

# application.properties
spring.profiles.active=development

依赖管理与自动装配

依赖的版本可以通过 pom.xml 文件中的 <version> 标签进行管理。Spring Boot 会自动装配应用中使用的组件。

实践项目

构建一个简单的Web应用实例

项目规划

  • 应用名称:SpringDemoApp
  • 功能:用户注册、登录、用户列表展示

项目目录结构

spring-demo-app/
    ├── application.properties
    ├── src
    │   ├── main
    │   │   ├── java
    │   │   │   ├── com.example.demo.config
    │   │   │   └── com.example.demo.controller
    │   │   └── resources
    │   │       ├── static
    │   │       ├── templates
    │   │       └── config
    │   └── test
    └── README.md

实现

  1. 创建实体类

    package com.example.demo.config;
    
    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 username;
       private String password;
    
       // 构造函数、getter和setter
    }
  2. 创建仓库接口

    package com.example.demo.config;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    
    public interface UserRepository extends JpaRepository<User, Long> {
    }
  3. 创建配置类

    package com.example.demo.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.crypto.password.PasswordEncoder;
    import org.springframework.security.crypto.password.StandardPasswordEncoder;
    
    @Configuration
    public class AppConfig {
    
       @Bean
       public PasswordEncoder passwordEncoder() {
           return new StandardPasswordEncoder();
       }
    }
  4. 创建安全配置类

    package com.example.demo.config;
    
    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.password.PasswordEncoder;
    
    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
       @Override
       protected void configure(AuthenticationManagerBuilder auth) throws Exception {
           auth.inMemoryAuthentication()
              .withUser("user").password(passwordEncoder().encode("password")).roles("USER")
              .and()
              .withUser("admin").password(passwordEncoder().encode("admin")).roles("ADMIN");
       }
    
       @Override
       protected void configure(HttpSecurity http) throws Exception {
           http.authorizeRequests()
              .antMatchers("/").permitAll()
              .antMatchers("/admin/**").hasRole("ADMIN")
              .anyRequest().authenticated()
              .and()
              .formLogin()
              .loginPage("/login").defaultSuccessUrl("/")
              .permitAll()
              .and()
              .logout()
              .permitAll();
       }
    
       @Bean
       public PasswordEncoder passwordEncoder() {
           return new StandardPasswordEncoder();
       }
    }
  5. 创建控制器

    package com.example.demo.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.security.crypto.password.PasswordEncoder;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.*;
    import com.example.demo.config.User;
    import com.example.demo.config.UserRepository;
    
    @Controller
    public class UserController {
    
       @Autowired
       private UserRepository userRepository;
       @Autowired
       private PasswordEncoder passwordEncoder;
    
       @GetMapping("/login")
       public String login() {
           return "login";
       }
    
       @PostMapping("/login")
       public String loginSubmit(@RequestParam String username, @RequestParam String password, Model model) {
           User user = userRepository.findByUsername(username);
           if (user != null && passwordEncoder.matches(password, user.getPassword())) {
               return "redirect:/";
           } else {
               model.addAttribute("error", "Invalid username or password");
               return "login";
           }
       }
    
       @GetMapping("/register")
       public String register() {
           return "register";
       }
    
       @PostMapping("/register")
       public String registerSubmit(@RequestParam String username, @RequestParam String password, Model model) {
           User user = new User();
           user.setUsername(username);
           user.setPassword(passwordEncoder.encode(password));
           userRepository.save(user);
           return "redirect:/";
       }
    }
  6. 创建登录页面

    package com.example.demo.templates;
    
    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
       <title>Login</title>
    </head>
    <body>
       <form th:action="@{/login}" method="post">
           Username: <input type="text" name="username"><br>
           Password: <input type="password" name="password"><br>
           <button type="submit">Login</button>
       </form>
    </body>
    </html>
  7. 创建注册页面

    package com.example.demo.templates;
    
    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
       <title>Register</title>
    </head>
    <body>
       <form th:action="@{/register}" method="post">
           Username: <input type="text" name="username"><br>
           Password: <input type="password" name="password"><br>
           <button type="submit">Register</button>
       </form>
    </body>
    </html>
  8. 运行应用

    使用 mvn spring-boot:run 命令运行项目。

部署与运行Spring Boot应用

Spring Boot 应用可以部署到任何支持 Java 的应用服务器,如 Jetty、Tomcat、TomEE 等。对于轻量级的应用,直接运行在本地即可。

日志与监控基础实践

Spring Boot 自带了日志处理功能,通过配置 logback.xml 文件可以定制日志输出的格式和目标。例如,在 logback.xml 中添加以下配置:

<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>

通过访问 http://localhost:8080/actuator/health 可以查看应用的健康状态。

通过以上的实践,可以深入理解 Spring Boot 的核心功能,并在实际项目中灵活应用。希望这些内容能够帮助到您在学习和使用 Spring Boot 过程中的问题解决和实践操作。

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消