🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,获得2024年博客之星荣誉证书,高级开发工程师,数学专业,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用,熟悉DICOM医学影像及DICOM协议,业余时间自学JavaScript,Vue,qt,python等,具备多种混合语言开发能力。撰写博客分享知识,致力于帮助编程爱好者共同进步。欢迎关注、交流及合作,提供技术支持与解决方案。
技术合作请加本人wx(注明来自csdn):xt20160813
Spring Boot开发三板斧:高效构建企业级应用的核心技法
第一板斧:RESTful API极速开发
1.1 注解驱动开发
@RestController
@RequestMapping("/api/products")
@RequiredArgsConstructor // Lombok自动生成构造器
public class ProductController {
private final ProductService productService;
@GetMapping("/{id}")
public ResponseEntity<ProductDTO> getProduct(@PathVariable Long id) {
return ResponseEntity.ok(productService.getById(id));
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void createProduct(@Valid @RequestBody ProductCreateRequest request) {
productService.create(request);
}
@ExceptionHandler(ProductNotFoundException.class)
public ResponseEntity<ErrorResponse> handleNotFound(ProductNotFoundException ex) {
return ResponseEntity.status(HttpStatus.NOT_FOUND)
.body(new ErrorResponse(ex.getMessage()));
}
}
核心技巧:
- 使用
@RestController
组合注解替代@Controller
+@ResponseBody
- 利用Lombok的
@RequiredArgsConstructor
实现不可变依赖注入 - 统一异常处理采用
@ExceptionHandler
+@ControllerAdvice
1.2 接口文档自动化
<!-- Swagger集成依赖 -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.1.0</version>
</dependency>
@OpenAPIDefinition(
info = @Info(title = "电商平台API", version = "1.0"),
servers = @Server(url = "/", description = "默认服务器")
)
@Configuration
public class OpenApiConfig {
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.components(new Components())
.info(new Info().title("电商平台API"));
}
}
第二板斧:数据持久化最佳实践
2.1 JPA高效使用
@Entity
@Table(name = "orders")
@Getter @Setter @NoArgsConstructor
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(precision = 10, scale = 2)
private BigDecimal totalAmount;
@Enumerated(EnumType.STRING)
private OrderStatus status;
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
private List<OrderItem> items = new ArrayList<>();
public void addItem(OrderItem item) {
items.add(item);
item.setOrder(this);
}
}
public interface OrderRepository extends JpaRepository<Order, Long> {
@Query("SELECT o FROM Order o WHERE o.status = :status AND o.createTime > :start")
List<Order> findRecentByStatus(@Param("status") OrderStatus status,
@Param("start") LocalDateTime startTime);
@Modifying
@Query("UPDATE Order o SET o.status = :newStatus WHERE o.id = :id")
int updateStatus(@Param("id") Long orderId,
@Param("newStatus") OrderStatus newStatus);
}
性能优化点:
- 使用
@Transactional
控制事务边界 - 批量操作采用
@Modifying
+@Query
- N+1查询问题通过
@EntityGraph
解决
2.2 多数据源配置
spring:
datasource:
primary:
jdbc-url: jdbc:mysql://primary-db:3306/main
username: admin
password: ${PRIMARY_DB_PASSWORD}
secondary:
jdbc-url: jdbc:mysql://report-db:3306/report
username: reporter
password: ${REPORT_DB_PASSWORD}
@Configuration
@EnableJpaRepositories(
basePackages = "com.example.primary",
entityManagerFactoryRef = "primaryEntityManager",
transactionManagerRef = "primaryTransactionManager"
)
public class PrimaryDataSourceConfig {
// 主数据源配置
}
@Configuration
@EnableJpaRepositories(
basePackages = "com.example.secondary",
entityManagerFactoryRef = "secondaryEntityManager",
transactionManagerRef = "secondaryTransactionManager"
)
public class SecondaryDataSourceConfig {
// 次数据源配置
}
第三板斧:生产级运维保障
3.1 健康监控配置
management:
endpoints:
web:
exposure:
include: health,info,metrics
endpoint:
health:
show-details: always
group:
db:
include: db
custom:
include: diskSpace
metrics:
export:
prometheus:
enabled: true
3.2 自定义健康检查
@Component
public class PaymentGatewayHealthIndicator implements HealthIndicator {
private final PaymentService paymentService;
@Override
public Health health() {
boolean isHealthy = paymentService.checkHealth();
if (isHealthy) {
return Health.up()
.withDetail("version", "1.2.3")
.build();
}
return Health.down()
.withDetail("error", "支付网关无响应")
.build();
}
}
3.3 性能指标监控
@Bean
public MeterRegistryCustomizer<PrometheusMeterRegistry> metricsCommonTags() {
return registry -> registry.config().commonTags(
"application", "order-service",
"environment", env.getProperty("spring.profiles.active")
);
}
三板斧进阶技巧
1. 热部署神器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
效果:
- 修改Java类后自动重启(Classloader级别)
- 静态资源修改无需重启
- 默认禁用模板缓存
2. 配置终极方案
@Configuration
@ConfigurationProperties(prefix = "app.notification")
@Data // Lombok自动生成getter/setter
public class NotificationConfig {
private boolean enabled = true;
private int retryCount = 3;
private List<String> channels = List.of("SMS");
private Map<String, String> templates = new HashMap<>();
}
3. 安全防护标配
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig {
private final UserDetailsService userDetailsService;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests(auth -> auth
.antMatchers("/api/public/**").permitAll()
.antMatchers("/api/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
)
.formLogin(form -> form
.loginPage("/login")
.defaultSuccessUrl("/dashboard")
)
.rememberMe(remember -> remember
.key("uniqueAndSecret")
.tokenValiditySeconds(86400)
)
.logout(logout -> logout
.logoutSuccessUrl("/login?logout")
);
return http.build();
}
}
常见问题解决方案
问题1:依赖冲突
# 查看依赖树
mvn dependency:tree -Dincludes=com.fasterxml.jackson.core
# 解决方案:排除冲突依赖
<dependency>
<groupId>problematic-group</groupId>
<artifactId>problematic-artifact</artifactId>
<exclusions>
<exclusion>
<groupId>conflict-group</groupId>
<artifactId>conflict-artifact</artifactId>
</exclusion>
</exclusions>
</dependency>
问题2:配置不生效
# 启用配置调试
--debug
# 或在application.yml中设置
debug: true
问题3:性能调优
# 调整Tomcat参数
server:
tomcat:
max-threads: 200
min-spare-threads: 10
accept-count: 100
connection-timeout: 5000
# 配置HikariCP连接池
spring:
datasource:
hikari:
maximum-pool-size: 20
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
三板斧实战口诀
-
API开发三步走
@RestController
定框架 →@Service
写逻辑 →@Repository
管数据 -
配置管理三原则
环境分离(dev/test/prod) → 安全隔离(Vault/加密) → 版本控制(Git管理) -
运维保障三件套
健康检查(/actuator/health) → 指标监控(Prometheus) → 日志追踪(ELK)
掌握这三项核心技能,即可快速构建符合生产要求的Spring Boot应用。建议从官方Starters列表(spring.io/projects/spring-boot)中选择必要依赖,保持依赖最小化原则,逐步扩展功能模块。