当前位置: 首页 > news >正文

【微服务核心】Spring Boot

Spring Boot

文章目录

  • Spring Boot
  • 1. 简介
  • 2. 开发步骤
  • 3. 配置文件
  • 4. 整合 Spring MVC 功能
  • 5. 整合 Druid 和 Mybatis
  • 6. 使用声明式事务
  • 7. AOP整合配置
  • 8. SpringBoot项目打包和运行

1. 简介

SpringBoot,开箱即用,设置合理的默认值,同时也可以根据需求进行适当的调整。遵从约定大于配置,基本不需要主动编写配置类、也不需要 XML 配置文件。

2. 开发步骤

  1. 创建Maven工程

  2. 添加依赖,使用 spring-boot-starter-parentspring-boot-starter-web

  3. 编写启动配置类

    @SpringBootApplication
    public class MainApplication {public static void main(String[] args) {SpringApplication.run(MainApplication.class,args);}
    }
    
  4. 编写处理器 Controller

通过上述步骤,即可直接根据启动配置类直接启动

总结:

  1. spring-boot-starter-parent :父项目中把常见的依赖版本都声明好了

  2. spring-boot-starter-webStarter 启动器依赖,是一系列预定义依赖项的集合,旨在简化Spring应用程序的配置和构建过程,

    Spring Boot提供了许多预定义的Starter,例如spring-boot-starter-web用于构建Web应用程序,spring-boot-starter-data-jpa用于使用JPA进行数据库访问,spring-boot-starter-security用于安全认证和授权等等,Spring boot 提供的全部启动器地址:

    https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters

  3. @SpringBootApplication : 组合注解,功效由具体的子注解实现,含有的子注解及主要作用有:

    • @EnableAutoConfiguration :启用Spring Boot的自动配置机制
    • @ComponentScan :用于自动扫描并加载应用程序中的组件
    • @Configuration :将被标注的类声明为配置类。配置类可以包含Spring框架相关的配置、Bean定义,以及其他的自定义配置

3. 配置文件

默认读取,命名 application 后缀 .properties / .yaml / .yml 的配置文件,在配置文件中配置的属性可使用 @Value("${变量key}") 直接读取,集合定义用 , 隔开不同元素

  • @ConfigurationProperties :批量配置文件属性注入,指定 prefix 属性会将配置文件中配置的属性按属性名注入,底层依赖于 set方法 ,如无 set方法 将不会注入,而 @Value 不受此限制

多环境配置:不同环境配置可使用 application-dev.ymlapplication-uat.ymlapplication-prd.yml 命名来区分,在启动时指定 spring.profiles.activedevuatprd 即可。

指定活跃环境后有重叠属性则对应配置文件优先生效,无重叠属性时,application.yml 中的配置会生效。 spring.profiles.active 可同时指定多个,则对应配置文件都会生效,但一般只会按不同环境区分而只激活对应一个环境的配置文件。

配置文件中属性参考可看官方 Application Properties ,下面是其中 web 配置的 Server Properties 链接,也可点击进入参考其他属性:

https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties.server

常用参数:

  • server.port :指定应用程序的HTTP服务器端口号,默认 8080
  • server.servlet.context-path :设置应用程序的上下文路径
  • spring.resources.static-locations :配置静态资源的位置,设置了后会覆盖默认值。默认包含 classpath:/META-INF/resources/ , classpath:/resources/** , classpath:/static/** , classpath:/public/

4. 整合 Spring MVC 功能

基础用法如第2开发步骤所示,关于拦截器及其他功能,则还像之前一样使用,如拦截器,增加组件自定义拦截器,增加配置类,注入对应拦截器

  1. 自定义拦截器:
@Component
public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("MyInterceptor拦截器的preHandle方法执行....");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("MyInterceptor拦截器的postHandle方法执行....");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("MyInterceptor拦截器的afterCompletion方法执行....");}
}
  1. 配置拦截器:
@Configuration
public class MvcConfig implements WebMvcConfigurer {@Autowiredprivate MyInterceptor myInterceptor ;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(myInterceptor).addPathPatterns("/**");}
}

5. 整合 Druid 和 Mybatis

  1. 导入依赖

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.0</version>
    </parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-3-starter</artifactId><version>1.2.20</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.28</version></dependency>
    </dependencies>
    
  2. 配置文件

    spring:datasource:type: com.alibaba.druid.pool.DruidDataSourceusername: rootpassword: rooturl: jdbc:mysql:///databasedriver-class-name: com.mysql.cj.jdbc.Drivermybatis:configuration:auto-mapping-behavior: fullmap-underscore-to-camel-case: truelog-impl: org.apache.ibatis.logging.slf4j.Slf4jImpltype-aliases-package: com.springboot.pojomapper-locations: classpath:/mappers/*.xml
    
  3. 配置启动类

    @MapperScan("com.springboot.mapper") // 扫描 mapper 接口
    @SpringBootApplication
    public class SpringBootApplicationMain {public static void main(String[] args) {SpringApplication.run(SpringBootApplicationMain.class);}
    }
    
  4. 其他类及目录结构

在这里插入图片描述

@Data
public class Schedule {private Integer id;private String title;private Integer age;
}
@RequestMapping("schedule")
@RestController
public class ScheduleController {@Autowiredprivate ScheduleMapper scheduleMapper;@RequestMapping("query")public Result<List<Schedule>> query(@RequestBody(required = false) Schedule query) {return new Result<>(scheduleMapper.selectList(query));}
}
public interface ScheduleMapper {List<Schedule> selectList(Schedule schedule);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.springboot.mapper.ScheduleMapper"><select id="selectList" resultType="schedule">select * from schedule</select>
</mapper>

6. 使用声明式事务

引入了 spring-boot-starter-jdbc 即可直接使用

7. AOP整合配置

需引入依赖 spring-boot-starter-aop ,之后直接使用 aop 注解即可

@Aspect
@Component
@Slf4j
public class MyAdvice {@Pointcut("execution(* com.springboot.controller.*.*(..))")public void pointcut() {}@Around("pointcut()")public Object around(ProceedingJoinPoint proceedingJoinPoint) {try {log.info("入参:{}", proceedingJoinPoint.getArgs());Object proceed = proceedingJoinPoint.proceed();log.info("出参:{}", proceed);return proceed;} catch (Throwable t) {log.error("异常", t);throw new RuntimeException(t);}}
}

8. SpringBoot项目打包和运行

在Spring Boot项目中添加spring-boot-maven-plugin插件是为了支持将项目打包成可执行的可运行jar包。如果不添加spring-boot-maven-plugin插件配置,使用常规的java -jar命令来运行打包后的Spring Boot项目是无法找到应用程序的入口点,因此导致无法运行

<!--    SpringBoot应用打包插件-->
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

命令启动和参数说明:

java -jar  [选项] [参数] <jar文件名>
  1. -D<name>=<value>:设置系统属性,可通过 System.getProperty() 方法在程序中获取该属性值。如:java -jar -Dserver.port=8080 myapp.jar ,多参数可以 -Dserver.port=8080 -Dspring.profiles.active=prd
  2. -X:设置JVM参数,例如内存大小、垃圾回收策略等。常用的选项包括:
    • -Xmx<size>:设置JVM的最大堆内存大小,例如 -Xmx512m 表示设置最大堆内存为512MB
    • -Xms<size>:设置JVM的初始堆内存大小,例如 -Xms256m 表示设置初始堆内存为256MB
  3. -Dspring.profiles.active=<profile>:指定Spring Boot的激活配置文件,可以通过application-<profile>.propertiesapplication-<profile>.yml文件来加载相应的配置。例如:java -jar -Dspring.profiles.active=dev myapp.jar

相关文章:

  • aws-sdk-cpp通过bazel构建的S3_client轮子
  • sql_lab之sqli中的堆叠型注入(less-38)
  • 【C++】STL 容器 - list 双向链表容器 ① ( 容器特点 | 容器操作时间复杂度 | 构造函数 )
  • nginx-proxy-manager初次登录502 bad gateway
  • TensorFlow是什么
  • 单例模式你了解嘛?
  • Pytest框架 —— 用例标记和测试执行篇!
  • k8s搭建(一、环境配置与docker安装)
  • 【Python常见数据结构操作-持续更新】
  • 利用Jmeter做接口测试(功能测试)全流程分析!
  • Go在Win10上接收UDP组播数据
  • Y9000P + ubuntu22.04 配置Anaconda+pycharm +pytorch
  • python作业题百度网盘,python作业答案怎么查
  • 汽车零配件装配产线中使用RFID技术和不使用RFID技术的优缺点
  • Go 泛型发展史与基本介绍
  • CentOS6 编译安装 redis-3.2.3
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Python十分钟制作属于你自己的个性logo
  • Redis的resp协议
  • spark本地环境的搭建到运行第一个spark程序
  • vue--为什么data属性必须是一个函数
  • 搞机器学习要哪些技能
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 嵌入式文件系统
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 思考 CSS 架构
  • 写代码的正确姿势
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 【云吞铺子】性能抖动剖析(二)
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​一些不规范的GTID使用场景
  • "无招胜有招"nbsp;史上最全的互…
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • $.ajax,axios,fetch三种ajax请求的区别
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2)leetcode 234.回文链表 141.环形链表
  • (5)STL算法之复制
  • (arch)linux 转换文件编码格式
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二)hibernate配置管理
  • (二)斐波那契Fabonacci函数
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (转)c++ std::pair 与 std::make
  • **CI中自动类加载的用法总结
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET 5种线程安全集合
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET Framework .NET Core与 .NET 的区别
  • .Net 垃圾回收机制原理(二)
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET8使用VS2022打包Docker镜像
  • .NET国产化改造探索(一)、VMware安装银河麒麟