本文全面介绍了Spring Boot框架,包括其优势、与传统Spring框架的区别以及开发环境的搭建。文章详细讲解了如何创建并运行第一个Spring Boot项目,并深入探讨了Spring Boot的核心配置和常见Web开发实践。本文涵盖了从环境搭建到实战案例的全过程。
Spring Boot简介Spring Boot 是一个由Pivotal团队提供的框架,其目标是简化Spring应用的初始搭建以及开发过程。它通过提供一系列开箱即用的配置、自动化配置和“约定优于配置”(Convention over Configuration)的原则,使得开发者能够快速地构建和部署Spring应用,而无需深入理解Spring框架的复杂配置细节。
对于开发Spring Boot应用,选择合适的集成开发环境(IDE)十分重要。以下是一些常用的IDE选择:
下载Java JDK:访问Oracle官网下载Java JDK的最新版本,或者使用OpenJDK等开源版本。
安装Java JDK:按照安装向导完成Java JDK的安装。
配置环境变量:安装完成后,需要配置系统环境变量以确保Java JDK被正确识别。具体步骤如下:
setx JAVA_HOME "C:\Program Files\Java\jdk1.8.0_261" setx PATH "%JAVA_HOME%\bin;%PATH%"
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH
创建Spring Boot项目:使用Spring Initializr(https://start.spring.io/)快速创建一个Spring Boot项目,或者使用IDE内置的Spring Boot插件快速生成项目结构。以下是使用Spring Initializr创建项目的具体步骤:
项目文件结构:
src ├── main │ ├── java │ │ └── com │ │ └── example │ │ └── demo │ │ ├── DemoApplication.java │ │ └── controller │ │ └── HelloController.java │ └── resources │ └── application.properties └── test └── java └── com └── example └── demo └── DemoApplicationTests.java
DemoApplication.java
:项目的主入口类,包含main
方法。HelloController.java
:一个简单的控制器类,用于处理HTTP请求。application.properties
:配置文件,用于存储项目配置信息。DemoApplicationTests.java
:测试类,用于编写测试代码。DemoApplication.java
类,运行其中的main
方法。http://localhost:8080
,可以看到默认的欢迎页面,表示应用已成功启动。// 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); } }
// HelloController.java package com.example.demo.controller; 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!"; } }Spring Boot核心配置
Spring Boot提供两种配置文件格式:application.properties
和application.yml
。这些文件用于存储项目的配置信息,如数据库连接、服务器端口等。
# application.properties server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase spring.datasource.username=root spring.datasource.password=root
# application.yml server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/mydatabase username: root password: root
Spring Boot通过@Value
注解和@ConfigurationProperties
注解来实现属性的注入。
// 使用@Value注解注入属性值 package com.example.demo; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.beans.factory.annotation.Value; @Configuration @PropertySource("classpath:application.properties") public class AppConfig { @Value("${server.port}") private String serverPort; public String getServerPort() { return serverPort; } }
// 使用@ConfigurationProperties注解注入一组属性值 package com.example.demo; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "spring.datasource") public class DataSourceProperties { private String url; private String username; private String password; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
application-dev.properties
、application-prod.properties
。--server.port=8081
export SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/mydatabase
控制器是Spring MVC中的一个重要组件,用于处理HTTP请求。在Spring Boot中,可以通过创建一个简单的控制器类来实现HTTP请求的处理。
// 创建一个简单的Controller package com.example.demo.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MyController { @GetMapping("/greeting") public String greeting() { return "Hello, World!"; } }
Thymeleaf是一个强大的模板引擎,用于生成HTML、XML等静态文件。Spring Boot默认支持Thymeleaf作为模板引擎。
引入Thymeleaf依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
创建模板文件:
在src/main/resources/templates
目录下创建一个HTML文件,例如index.html
,文件内容如下:
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>My App</title> </head> <body> <h1 th:inline="text">Hello, [[${message}]]!</h1> </body> </html>
控制器返回模板:
// 控制器返回模板文件 package com.example.demo.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public class MyController { @GetMapping("/") public String index(Model model) { model.addAttribute("message", "World"); return "index"; } }
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
访问http://localhost:8080/actuator
,可以查看应用的健康状态、环境信息等。
创建一个简单的REST API:
// 创建一个简单的REST API package com.example.demo.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MyController { @GetMapping("/api/users") public String getUsers() { return "[{ \"name\": \"John\", \"age\": 25 }, { \"name\": \"Jane\", \"age\": 30 }]"; } }
使用Spring Data JPA进行资源操作:添加Spring Data JPA依赖。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency>
创建实体类User
。
// 创建实体类 package com.example.demo.model; 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 int age; // Getters and Setters }
创建DAO类。
// 创建DAO类 package com.example.demo.repository; import com.example.demo.model.User; import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository<User, Long> { }
创建控制器处理HTTP请求。
// 创建控制器处理HTTP请求 package com.example.demo.controller; import com.example.demo.model.User; import com.example.demo.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController public class UserController { @Autowired private UserRepository userRepository; @GetMapping("/api/users") public List<User> getUsers() { return userRepository.findAll(); } @PostMapping("/api/users") public User createUser(@RequestBody User user) { return userRepository.save(user); } @PutMapping("/api/users/{id}") public User updateUser(@PathVariable Long id, @RequestBody User user) { user.setId(id); return userRepository.save(user); } @DeleteMapping("/api/users/{id}") public void deleteUser(@PathVariable Long id) { userRepository.deleteById(id); } }
/api/users
接口,POST请求测试/api/users
接口,输入一个用户对象,PUT请求测试/api/users/{id}
接口,输入一个用户对象,DELETE请求测试/api/users/{id}
接口。http://localhost:8080/actuator
,查看应用的健康状态、依赖关系等信息,访问http://localhost:8080/actuator/metrics
,查看应用的性能指标。