一、SpringBoot核心特性
1. 自动配置(Auto-Configuration)SpringBoot的自动配置是其最强大的特性之一,它通过以下方式工作: • 基于类路径上的jar包依赖自动配置Spring应用 • 使用@EnableAutoConfiguration注解开启 • 通过spring-boot-autoconfigurejar中的META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件定义配置类
代码语言:javascript代码运行次数:0运行复制@SpringBootApplication // 包含@EnableAutoConfiguration
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}2. 起步依赖(Starter Dependencies)SpringBoot提供了一系列"starter"依赖,简化了依赖管理: • spring-boot-starter-web - 用于构建web应用 • spring-boot-starter-data-jpa - 用于JPA和Hibernate • spring-boot-starter-test - 用于测试
代码语言:javascript代码运行次数:0运行复制
二、SpringBoot应用结构1. 主应用类主应用类通常放在根包下,包含main方法:
代码语言:javascript代码运行次数:0运行复制@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}2. 配置管理SpringBoot支持多种配置方式:
application.properties或application.yml环境变量命令行参数代码语言:javascript代码运行次数:0运行复制# application.yml示例
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: password三、Web开发关键点1. REST控制器代码语言:javascript代码运行次数:0运行复制@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping
public List
return userService.findAll();
}
@PostMapping
public User createUser(@RequestBody User user) {
return userService.save(user);
}
}2. 异常处理全局异常处理示例:
代码语言:javascript代码运行次数:0运行复制@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity> resourceNotFoundException(ResourceNotFoundException ex) {
ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage());
return new ResponseEntity<>(errorDetails, HttpStatus.NOT_FOUND);
}
}四、数据访问1. Spring Data JPA代码语言:javascript代码运行次数:0运行复制public interface UserRepository extends JpaRepository
List
@Query("SELECT u FROM User u WHERE u.email = ?1")
User findByEmailAddress(String emailAddress);
}2. 事务管理代码语言:javascript代码运行次数:0运行复制@Service
public class UserService {
@Transactional
public User updateUser(Long id, User userDetails) {
User user = userRepository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("User not found"));
user.setFirstName(userDetails.getFirstName());
user.setLastName(userDetails.getLastName());
return userRepository.save(user);
}
}五、测试1. 单元测试代码语言:javascript代码运行次数:0运行复制@ExtendWith(MockitoExtension.class)
public class UserServiceTest {
@Mock
private UserRepository userRepository;
@InjectMocks
private UserService userService;
@Test
public void whenValidId_thenUserShouldBeFound() {
Long userId = 1L;
User mockUser = new User(userId, "John", "Doe");
when(userRepository.findById(userId)).thenReturn(Optional.of(mockUser));
User found = userService.getUserById(userId);
assertEquals(userId, found.getId());
}
}2. 集成测试代码语言:javascript代码运行次数:0运行复制@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerIntegrationTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private UserService userService;
@Test
public void shouldReturnUsersList() throws Exception {
List
new User(1L, "John", "Doe"),
new User(2L, "Jane", "Doe")
);
when(userService.findAll()).thenReturn(users);
mockMvc.perform(get("/api/users"))
.andExpect(status().isOk())
.andExpect(jsonPath("$", hasSize(2)));
}
}六、高级特性1. Actuator监控添加依赖:
代码语言:javascript代码运行次数:0运行复制
配置示例:
代码语言:javascript代码运行次数:0运行复制management:
endpoints:
web:
exposure:
include: health,info,metrics
endpoint:
health:
show-details: always2. 自定义Starter创建自定义starter步骤:
创建自动配置模块创建starter模块在META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports中注册配置类3. 性能优化建议使用@SpringBootApplication的exclude属性禁用不需要的自动配置懒加载Bean(spring.main.lazy-initialization=true)使用JVM参数调优(-Xms, -Xmx)生产环境关闭DevTools七、部署1. 打包方式代码语言:javascript代码运行次数:0运行复制# 打包为可执行jar
mvn package
# 打包为war(需要修改pom.xml中的packaging)
mvn package -DskipTests2. Docker化示例Dockerfile:
代码语言:javascript代码运行次数:0运行复制FROM openjdk:11-jre-slim
VOLUME /tmp
COPY target/myapp.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]结语SpringBoot通过简化配置和提供一系列开箱即用的功能,极大地提高了开发效率。掌握这些关键知识点,可以帮助开发者快速构建健壮的企业级应用。随着SpringBoot生态的不断发展,建议持续关注官方文档和社区动态,以获取最新的最佳实践。