赞
踩
SpringBoot3快速启动框架
spring:spring家族的产品
boot:启动
用来创建spring应用,springboot提供了不同类型的启动器,依靠启动器来导入依赖包,springboot内部也有maven依赖。
springboot整合其他框架,主要是在配置文件中添加相关的配置信息,不设置也行,springboot提供了默认值。
springboot与spring使用对比:
1、spring:导入依赖,每整合一种框架需要编写其配置文件+相关语法,对于web项目需要将项目加入到tomcat中,并启动运行
2、springboot:导入依赖(启动类帮忙连带着导入了所需依赖),springboot有一个配置文件(可以将不同的环境的配置文件分离出去,在这里激活使用),每整合一种框架只需要在这里编写相关的属性,无需再自己编写配置类了,springboot会根据配置的信息自动实现以前spring编写配置类的功能
1、spring程序配置方式:XML、注解、Java配置类或混合用法,过于复杂和繁琐,对于单体项目,用spring是方便的,但是微服务,每一个服务都需要配置、注解。
2、SpringBoot 定义:可以简单、快速地创建一个独立的、生产级别的 Spring 应用(说明:SpringBoot底层是Spring),SpringBoot 只需要编写少量配置即可快速整合 Spring 平台以及第三方技术!
3、SpringBoot目标
4、SpringBoot3特性
总结:简化开发,简化配置,简化整合,简化部署,简化监控,简化运维。
5、自动配置机制
(1)初步理解:
(2)理解:导入starter-web:导入了web开发场景
6、开发环境版本要求
技术&工具 | 版本(or later) |
---|---|
SpringBoot | 3.0.5 |
maven | 3.6.3 or later 3.6.3 或更高版本 |
Tomcat | 10.0+ |
Servlet | 9.0+ |
JDK | 17+ |
场景:浏览器发送/hello请求,返回"Hello,Spring Boot 3!"
1、springboot实现流程
springboot可以快速创建一个项目,但是它的底层还是应用了spring、springmvc那些东西。springboot是减少了配置,注解还是要写,简化了一些
1、统一配置文件:SpringBoot工程下,统一在这一个文件完成程序功能参数设置和自定义参数声明(端口号、项目根路径、数据库连接信息等)。位置src/main/resources;必须命名为application 后缀 .properties(优先级更高) / .yaml / .yml;配置基本都有默认值。
因为src/main/resources目录是Spring Boot默认的类路径(classpath),配置文件会被自动加载并可供应用程序访问。
功能配置参数说明:需要配置哪些参数直接去网站上找即可
Common Application Properties (spring.io)
1、不同配置文件的使用
springboot配置文件文件properties示例
#固定的
# 启动端口号
server.port=80
#自定义
spring.jdbc.datasource.password=root
yaml配置文件示例
#固定的
server:
port: 80
#自定义
zwf:
bf:
-zy
-slw
age : 18
读取配置文件方式:
以读取yaml配置文件为例
@Component
@ConfigurationProperties(prefix = "zwf")
public class DataSourceConfigurationProperties {
private List<String> bf; //可以为集合赋值
private String age;//属性名=最后一个key值
}
1、多环境配置定义:在Spring Boot中,可以使用多环境配置来根据不同的运行环境(如开发、测试、生产)加载不同的配置。让应用程序在不同的环境中使用不同的配置参数,例如数据库连接信息、日志级别、缓存配置等。
2、多环境配置方式:属性文件/YAML文件相似
方式:将应用程序的配置参数分离到不同的配置文件中,每个环境对应一个属性文件。
不同配置文件的命名方式application-xxx.后缀名,分别定义各自环境的配置参数。
激活方式:
以配置文件YAML为例
#激活不同环境示例:比如有两种不同的环境的配置文件
#第一种:application-dev.yml(开发)
spring:
jdbc:
datasource:
username: root
#第二种:application-test.yml(测试)
spring:
jdbc:
datasource:
username: root
#application.yaml:中激活第一种
spring:
profiles:
active: dev
3、多环境配置作用
可以配置多环境配置参数不同
可以将不同块的参数分离到不同的配置文件中,使得主配置文件架构更清晰
创建项目→导入依赖(继承父项目spring-boot-starter-parent+web开发场景的启动器spring-boot-starter-web)→创建启动器类(加上注解@SpringBootApplication)→编写配置文件→创建实体类→编写controller(改写的注解和之前springmvc的配置一样)→启动启动器访问即可
描述了Spring Boot的配置文件中与Web应用程序相关的一些重要配置参数。
springboot得底层实现还是封装了springmvc的配置,实现了springmvc的功能!
springboot会有默认值:配置文件参考网站的“Server Properties”配置
常用的几个参数如下:
声明一个拦截器:springmvc提供了HandlerInterceptor可以在内部进行拦截(handler前后、视图解析器后)——分别有三种方法preHandle() 、postHandle() 、afterCompletion() 实现相关拦截功能即可。
定义springmvc的配置类:自动装配拦截器并为拦截器添加拦截路径。该配置类需要实现规范接口WebMvcConfigurer,并添加注解@Configuration表示这是一个配置类,在springboot启动器中就会自动扫描到。
定义拦截器后,拦截器的使用:
@Configuration
public class MvcConfig implements WebMvcConfigurer {
@Autowired
private MyInterceptor myInterceptor ;//自动装配拦截器
/**
* /** 拦截当前目录及子目录下的所有路径 /user/** /user/findAll /user/order/findAll
* /* 拦截当前目录下的以及子路径 /user/* /user/findAll
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor).addPathPatterns("/**");
}
}
1、整合的功能:数据库连接池【实现】、监控页面
Druid兼容SpringBoot2,对于SpringBoot3还需要写兼容性的配置(比如springboot中缺少对druid得自动装配,这就需要自己添加)
springboot3整合druid的配置文件
spring: datasource: # 连接池类型 type: com.alibaba.druid.pool.DruidDataSource # Druid的其他属性配置 springboot3整合情况下,数据库连接信息必须在Druid属性下! druid: url: jdbc:mysql://localhost:3306/day01 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver # 初始化时建立物理连接的个数 initial-size: 5 # 连接池的最小空闲数量 min-idle: 5 # 连接池最大连接数量 max-active: 20 # 获取连接时最大等待时间,单位毫秒 max-wait: 60000 # 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 test-while-idle: true # 既作为检测的间隔时间又作为testWhileIdel执行的依据 time-between-eviction-runs-millis: 60000 # 销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接(配置连接在池中的最小生存时间) min-evictable-idle-time-millis: 30000 # 用来检测数据库连接是否有效的sql 必须是一个查询语句(oracle中为 select 1 from dual) validation-query: select 1 # 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true test-on-borrow: false # 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true test-on-return: false # 是否缓存preparedStatement, 也就是PSCache,PSCache对支持游标的数据库性能提升巨大,比如说oracle,在mysql下建议关闭。 pool-prepared-statements: false # 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100 max-pool-prepared-statement-per-connection-size: -1 # 合并多个DruidDataSource的监控数据 use-global-data-source-stat: true logging: level: root: debug
配置了druid后的使用方式
@Slf4j //输出数据库日志 @Controller @RequestMapping("/user") public class UserController { @Autowired //自动装配 private JdbcTemplate jdbcTemplate; @GetMapping("/getUser") @ResponseBody public User getUser(){ String sql = "select * from users where id = ? ; "; User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), 1); log.info("查询的user数据为:{}",user.toString()); return user; } }
错误:cannot load driver class:org.h2.Driver
原因:启动器druid-spring-boot-3-starter目前最新版本是1.2.18,虽然适配springboot3,但是springboot3中缺少自动装配的配置文件
解决方法:手动在resources目录下创建META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,文件内容为com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure
需要填为启动类添加@MapperScan注解,用于扫描和注册Mapper接口!
springboot3整合mybatis的配置文件
server: port: 80 servlet: context-path: / spring: datasource: type: com.alibaba.druid.pool.DruidDataSource druid: url: jdbc:mysql:///day01 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver mybatis: #替代之前mybatis配置文件/mybatis配置类 configuration: # setting配置 auto-mapping-behavior: full map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl type-aliases-package: com.atguigu.pojo # 配置别名 mapper-locations: classpath:/mapper/*.xml # mapperxml位置
1、事务:针对数据库操作的,实现自动回滚,避免出现问题!
只需要导入依赖spring-boot-starter-jdbc启动器
SpringBoot项目会自动配置一个 DataSourceTransactionManager,所以我们只需在方法(或者类)加上 @Transactional 注解,就自动纳入 Spring 的事务管理了
2、整合AOP
导入依赖spring-boot-starter-aop启动器
创建切面类,直接使用aop注解即可,那些开启@EnableAspectJAutoProxy注解支持的都不需要了
切面的创建
@Component
@Aspect //表示这是一个切面类
@Order //设置切面类的优先级
public class LogAdvice {
@Before("execution(* com..service.*.*(..))")
public void before(JoinPoint joinPoint){ //JoinPoint可以获取目标类/方法信息!环绕通知实现的重要参数!
System.out.println("LogAdvice.before");
System.out.println("joinPoint = " + joinPoint);
}
}
1、对比普通web项目工程
普通web项目:打包war,放在tomcat/webapp下,启动tomcat后war会自动解压,就可以访问这个资源了
springboot工程内置服务器软件:打包jar(包含服务器软件),命令执行java -jar xx
2、打包运行流程
springboot3配置文件:配置springboot3工程项目的打包方式
<!-- SpringBoot应用打包插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
对于springboot3工程项目的jar的运行命令
//可以在命令窗口cmd执行
//这里也可激活指定的多环境
//命令格式:java -jar [选项] [参数] <jar文件名>
//1、-D<name>=<value>:设置系统属性
java -jar -Dserver.port=8080 myapp.jar。
//2、-X:设置JVM参数,如内存大小、垃圾回收策略。-Xmx<size>最大堆内存、-Xms<size>:初始堆内存大小
//3、-Dspring.profiles.active=<profile>:指定Spring Boot的激活配置文件
java -jar -Dspring.profiles.active=dev myapp.jar
除了上述的打包方式,可以使用idea工具直接执行,会帮我们打包并运行。
springboot3想要整合什么样的的框架,需要添加相关依赖(不同的启动器)→在配置文件中配置相关的的配置信息(不配置的话也会有默认值)→对于一些添加的第三方依赖无需@Bean注册组件,只需要直接声明@Autowired自动装配即可,但是一些不兼容(比如springboot3中缺少druid的自动装配的配置文件),此时也无需@Bean注册组件,只需要像上面解决druid装配错误的解决方法一样为其添加自动装配的配置信息。
创建启动类→正常实现相关功能即可!
springboot在整合mybatis、mybatisplus时,即有连接数据库需求时都需要在配置文件application.yaml中配置自己的数据库连接池信息。需要在启动类(用注解@SpringBootApplication标识)中再添加上注解@MapperScan(“com.atguigu.mapper”)。
注意:在使用SpringBoot3时用到druid连接池,必须要要完善连接池配置,因为springboot3中缺少自动装配
完善方式:文件夹META-INF.spring下文件org.springframework.boot.autoconfigure.AutoConfiguration.imports,添加内容内容:com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。