SpringBoot的自动配置是其最强大的特性之一,它通过以下方式工作: • 基于类路径上的jar包依赖自动配置Spring应用 • 使用@EnableAutoConfiguration
注解开启 • 通过spring-boot-autoconfigure
jar中的META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件定义配置类
@SpringBootApplication // 包含@EnableAutoConfiguration
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
SpringBoot提供了一系列"starter"依赖,简化了依赖管理: • spring-boot-starter-web
- 用于构建web应用 • spring-boot-starter-data-jpa
- 用于JPA和Hibernate • spring-boot-starter-test
- 用于测试
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
主应用类通常放在根包下,包含main
方法:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
SpringBoot支持多种配置方式:
application.properties
或application.yml
# application.yml示例
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: password
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping
public List<User> getAllUsers() {
return userService.findAll();
}
@PostMapping
public User createUser(@RequestBody User user) {
return userService.save(user);
}
}
全局异常处理示例:
@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);
}
}
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByLastName(String lastName);
@Query("SELECT u FROM User u WHERE u.email = ?1")
User findByEmailAddress(String emailAddress);
}
@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);
}
}
@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());
}
}
@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerIntegrationTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private UserService userService;
@Test
public void shouldReturnUsersList() throws Exception {
List<User> users = Arrays.asList(
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)));
}
}
添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
配置示例:
management:
endpoints:
web:
exposure:
include: health,info,metrics
endpoint:
health:
show-details: always
创建自定义starter步骤:
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
中注册配置类@SpringBootApplication
的exclude属性禁用不需要的自动配置spring.main.lazy-initialization=true
)# 打包为可执行jar
mvn package
# 打包为war(需要修改pom.xml中的packaging)
mvn package -DskipTests
示例Dockerfile:
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生态的不断发展,建议持续关注官方文档和社区动态,以获取最新的最佳实践。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有