SpringBoot
Spring Boot基本概念和功能
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。下面是Spring Boot的基本概念和功能:
- 自动配置:Spring Boot提供了自动配置功能,可以根据项目依赖自动配置Spring应用,减少繁琐的配置工作。
- 起步依赖:Spring Boot提供了起步依赖功能,可以简化依赖管理,一组相关的依赖被打包成一个起步依赖。
- 内嵌容器:Spring Boot内嵌了Tomcat、Jetty等Servlet容器,可以直接运行应用,无需部署WAR包。
- 生产就绪功能:Spring Boot提供了健康检查、指标监控、外部化配置等生产就绪功能。
- 无代码生成和XML配置:Spring Boot不需要代码生成,也不需要XML配置文件,使用注解和配置类即可完成配置。
为什么要用Spring Boot?
使用Spring Boot有以下几个优点:
- 简化开发:Spring Boot简化了Spring应用的初始搭建和开发过程,开发者可以快速构建应用。
- 约定优于配置:Spring Boot采用约定优于配置的理念,提供了默认配置,开发者只需在需要时进行覆盖。
- 微服务友好:Spring Boot非常适合构建微服务应用,可以快速开发和部署独立的微服务。
- 生态丰富:Spring Boot与Spring生态系统无缝集成,可以使用Spring的各种功能。
- 社区活跃:Spring Boot有着庞大的社区支持和活跃的开发者社区,可以保证Spring Boot的更新和维护。
总之,使用Spring Boot可以帮助开发者快速构建Spring应用,提高开发效率,降低学习成本。
Spring Boot应用场景
Spring Boot主要应用于Web应用开发、微服务架构、RESTful API开发、批处理应用等场景,适合快速构建生产级别的Spring应用。
Spring Boot核心组件
Spring Boot的核心组件包括:
- Spring Boot Starter:起步依赖,用于简化依赖管理。例如:spring-boot-starter-web、spring-boot-starter-data-jpa等。
- Spring Boot Autoconfigure:自动配置模块,用于根据依赖自动配置Spring应用。
- Spring Boot Actuator:生产就绪功能模块,提供了健康检查、指标监控、环境信息等功能。
- Spring Boot CLI:命令行工具,用于快速开发Spring Boot应用。
- Spring Boot DevTools:开发工具模块,提供了热部署、LiveReload等功能,提高开发效率。
Spring Boot核心架构图
+------------------+ +------------------+ +------------------+
| Spring Boot | | Spring Boot | | Spring Boot |
| Application | | Application | | Application |
+------------------+ +------------------+ +------------------+
| | |
| | |
| | |
+------------------+ +------------------+ +------------------+
| @SpringBoot | | @SpringBoot | | @SpringBoot |
| Application | | Application | | Application |
+------------------+ +------------------+ +------------------+
| | |
| | |
| | |
+------------------+ +------------------+ +------------------+
| @EnableAuto | | @EnableAuto | | @EnableAuto |
| Configuration | | Configuration | | Configuration |
+------------------+ +------------------+ +------------------+
| | |
| | |
| | |
+------------------+ +------------------+ +------------------+
| @ComponentScan | | @ComponentScan | | @ComponentScan |
+------------------+ +------------------+ +------------------+
| | |
| | |
| | |
+------------------+ +------------------+ +------------------+
| Spring Boot | | Spring Boot | | Spring Boot |
| Autoconfigure | | Autoconfigure | | Autoconfigure |
+------------------+ +------------------+ +------------------+
| | |
| | |
| | |
+------------------+ +------------------+ +------------------+
| Embedded | | Embedded | | Embedded |
| Container | | Container | | Container |
| (Tomcat/Jetty) | | (Tomcat/Jetty) | | (Tomcat/Jetty) |
+------------------+ +------------------+ +------------------+在上面的架构图中,展示了Spring Boot的核心组件之间的关系:@SpringBootApplication注解包含@EnableAutoConfiguration和@ComponentScan,@EnableAutoConfiguration启用自动配置,@ComponentScan扫描组件,自动配置模块根据依赖配置应用,内嵌容器运行应用。
Spring Boot快速入门
1、创建项目
使用Spring Initializr创建项目:
访问 https://start.spring.io/,选择项目配置并下载项目压缩包。
或者使用IDE创建项目:
- IntelliJ IDEA:File -> New -> Project -> Spring Initializr
- Eclipse:File -> New -> Other -> Spring Boot -> Spring Starter Project
2、添加依赖
在pom.xml中添加依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
<relativePath/>
</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-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>3、创建主类
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}4、创建Controller
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, Spring Boot!";
}
}5、运行项目
运行Application类的main方法,或者使用Maven命令:
mvn spring-boot:run访问 http://localhost:8080/hello 即可看到结果。
Spring Boot配置文件
Spring Boot支持多种配置文件格式,包括properties和YAML。
application.properties
server.port=8080
server.servlet.context-path=/api
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=trueapplication.yml
server:
port: 8080
servlet:
context-path: /api
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mydb
username: root
password: 123456
jpa:
hibernate:
ddl-auto: update
show-sql: trueSpring Boot常用注解
核心注解
- @SpringBootApplication:组合注解,包含@Configuration、@EnableAutoConfiguration、@ComponentScan
- @Configuration:标识配置类
- @ComponentScan:组件扫描
- @EnableAutoConfiguration:启用自动配置
Web注解
- @RestController:组合注解,包含@Controller和@ResponseBody
- @Controller:标识控制器
- @RequestMapping:映射HTTP请求
- @GetMapping:映射GET请求
- @PostMapping:映射POST请求
- @PutMapping:映射PUT请求
- @DeleteMapping:映射DELETE请求
- @RequestParam:绑定请求参数
- @PathVariable:绑定路径变量
- @RequestBody:绑定请求体
数据访问注解
- @Repository:标识数据访问层
- @Service:标识服务层
- @Entity:标识实体类
- @Table:指定数据库表名
- @Id:标识主键
- @GeneratedValue:主键生成策略
- @Column:指定数据库列名
Spring Boot数据访问
Spring Data JPA
Spring Data JPA是Spring Boot中最常用的数据访问框架。
1、添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>2、配置数据源
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mydb
username: root
password: 123456
jpa:
hibernate:
ddl-auto: update
show-sql: true3、创建实体类
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@Column(name = "email")
private String email;
// getter和setter方法
}4、创建Repository接口
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
List<User> findByEmailContaining(String email);
}5、使用Repository
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User findById(Long id) {
return userRepository.findById(id).orElse(null);
}
public List<User> findAll() {
return userRepository.findAll();
}
public User save(User user) {
return userRepository.save(user);
}
public void delete(Long id) {
userRepository.deleteById(id);
}
}Spring Boot Actuator
Spring Boot Actuator提供了生产就绪功能,包括健康检查、指标监控、环境信息等。
1、添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>2、配置端点
management:
endpoints:
web:
exposure:
include: health,info,metrics,env
endpoint:
health:
show-details: always3、常用端点
- /actuator/health:健康检查
- /actuator/info:应用信息
- /actuator/metrics:指标信息
- /actuator/env:环境信息
- /actuator/beans:Bean信息
- /actuator/mappings:URL映射信息
Spring Boot测试
Spring Boot提供了完善的测试支持。
1、添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>2、单元测试
@SpringBootTest
public class UserServiceTest {
@Autowired
private UserService userService;
@Test
public void testFindById() {
User user = userService.findById(1L);
assertNotNull(user);
assertEquals("admin", user.getUsername());
}
}3、Web层测试
@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testGetUser() throws Exception {
mockMvc.perform(get("/api/users/1"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.username").value("admin"));
}
}Spring Boot打包部署
1、打包为JAR
mvn clean package生成的JAR包在target目录下。
2、运行JAR包
java -jar target/myapp-0.0.1-SNAPSHOT.jar3、打包为WAR
修改pom.xml:
<packaging>war</packaging>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>修改主类:
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}参考链接
https://spring.io/projects/spring-boot
https://docs.spring.io/spring-boot/docs/current/reference/html/
