Spring boot使用

Spring Boot 是基于 Spring 框架的开发工具,旨在简化 Spring 应用的初始搭建和开发过程。它通过自动配置约定优于配置的理念,让开发者可以快速上手,专注于业务逻辑而非框架配置。

核心特性

  1. 自动配置

    • 根据项目依赖自动配置 Spring 框架,减少 XML 和 Java 配置。
    • 例如:引入spring-boot-starter-web会自动配置嵌入式 Tomcat 服务器和 Spring MVC。
  2. 起步依赖(Starters)

    • 一站式 Maven/Gradle 依赖管理,简化依赖配置。
    • 常用依赖:
    org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-data-jpa

嵌入式服务器

  • 内置 Tomcat、Jetty 或 Undertow,无需部署 WAR 文件。

  • 通过@SpringBootApplication注解启动应用:

    @SpringBootApplication
    public class MyApp {
    public static void main(String[] args) {
    SpringApplication.run(MyApp.class, args);
    }
    }

Actuator

  • 提供生产级监控和管理端点(如健康检查、指标收集、环境信息)。
  • 配置:
复制代码
  management:
    endpoints:
      web:
        exposure:
          include: "*"  # 暴露所有端点

快速上手

  1. 创建项目

  2. 编写 RESTful API

复制代码
   @RestController
   @RequestMapping("/api")
   public class UserController {
       @Autowired
       private UserService userService;

       @GetMapping("/users/{id}")
       public ResponseEntity<User> getUser(@PathVariable Long id) {
           return ResponseEntity.ok(userService.findById(id));
       }

       @PostMapping("/users")
       public ResponseEntity<User> createUser(@RequestBody User user) {
           return ResponseEntity.created(URI.create("/api/users/" + 
               userService.save(user).getId())).build();
       }
   }

配置文件
4. 使用application.propertiesapplication.yml配置应用:

复制代码
server:
  port: 8081  # 修改默认端口
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: secret
  jpa:
    hibernate:
      ddl-auto: update  # 自动更新数据库表结构

集成与扩展

  1. 数据库访问

    • 使用 Spring Data JPA 简化数据库操作:
    复制代码
      public interface UserRepository extends JpaRepository<User, Long> {
          Optional<User> findByEmail(String email);
      }

安全认证

  • 集成 Spring Security:
复制代码
  @Configuration
  @EnableWebSecurity
  public class SecurityConfig extends WebSecurityConfigurerAdapter {
      @Override
      protected void configure(HttpSecurity http) throws Exception {
          http
              .authorizeRequests()
              .antMatchers("/public/**").permitAll()
              .anyRequest().authenticated()
              .and()
              .formLogin();
      }
  }

异步处理

  • 使用@Async注解启用异步方法:
复制代码
  @Service
  public class EmailService {
      @Async
      public CompletableFuture<Void> sendEmail(String to) {
          // 异步发送邮件
          return CompletableFuture.completedFuture(null);
      }
  }

部署与监控

  1. 打包与运行

    • 打包为可执行 JAR:
    复制代码
      mvn clean package
      java -jar target/myapp-0.0.1-SNAPSHOT.jar

Docker 化

  • 创建 Dockerfile:
复制代码
  FROM openjdk:17-jdk-slim
  COPY target/myapp.jar app.jar
  ENTRYPOINT ["java","-jar","/app.jar"]
  • 监控与日志

    • 结合 Prometheus 和 Grafana 收集指标,使用 ELK Stack 处理日志。
  • 使用分层架构

    • 控制器层(Controller)→ 服务层(Service)→ 数据访问层(Repository)。
  • 配置外部化

    • 使用环境变量、配置中心(如 Spring Cloud Config)管理不同环境的配置。
  • 单元测试

    • 使用@SpringBootTest@WebMvcTest编写测试:
    复制代码
      @SpringBootTest
      class UserServiceTest {
          @Autowired
          private UserService userService;
    
          @Test
          void testCreateUser() {
              User user = new User("test@example.com");
              User savedUser = userService.save(user);
              assertNotNull(savedUser.getId());
          }
      }

常见问题

  1. 自动配置冲突

    • 使用@SpringBootApplication(exclude = ...)排除特定自动配置类。
  2. 依赖版本管理

    • Spring Boot 通过spring-boot-dependencies统一管理依赖版本,避免冲突。
  3. 性能优化

    • 合理配置线程池、连接池参数,避免内存泄漏
相关推荐
wWYy.30 分钟前
Mysql:一行数据是怎么存储的?
android·数据库·mysql
一米阳光86617 小时前
软考(中级)软件设计师核心笔记(3)数据库系统——概念、数据库设计
数据库·笔记·职场发展·软考·软件设计师
蓝斯4977 小时前
[原创]《C#高级GDI+实战:从零开发一个流程图》第章:增加贝塞尔曲线,上、下、左、右连接点
java·c#·流程图
前端工作日常8 小时前
我学习到的Java 的 Service 分层:itf 和 impl 到底是什么?
java·后端
奈斯先生Vector8 小时前
告别工具碎片化:基于 Nano Banana 全模态 AI 聚合架构搭建“文本-图像-视频”自动化协同生产线
运维·数据库·人工智能·架构·自动化·aigc·音视频
都叫我大帅哥8 小时前
Spring @Transactional 注解完全指南
java·spring
Java成神之路-8 小时前
G1 垃圾回收器 :SATB + TAMS核心机制深度解析
java·jvm
前端工作日常9 小时前
我学习到的JIT即时编译与机器码缓存失效
java·后端
带刺的坐椅9 小时前
Solon 的 10 种 HTTP 服务器:改一行依赖,换一个引擎
java·solon·jetty·undertow·mcp-server·htttp
建筑工程企业管理系统10 小时前
erp工程项目管理系统落地价值:实现工程多项目成本精细化核算与管控
大数据·数据库·人工智能