文章目录
主要简化了使用spring的难度,简省看繁重的配置,提供了各种启动器,开发者能快速上手。
启动类上面的注解是**@SpringBootApplication**,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描。
2、@MapperScan: spring-boot支持mybatis组件的一个注解,通过此注解指定mybatis接口类的路径,即可完成对mybatis接口的扫描。
3、@ImportResource @Import @PropertySource 这三个注解都是用来导入自定义的一些配置文件
@ImportResource(locations={}) 导入其他xml配置文件,需要标准在主配置类上。
导入property的配置文件 @PropertySource指定文件路径,这个相当于使用spring的标签来完成配置项的引入。
@import注解是一个可以将普通类导入到spring容器中做管理
4、控制层controller
rest风格:@GetMapping,@PostMapping,@PutMapping,@DeleteMapping
@RestController: @Controller 和@ResponseBody的结合,一个类被加上@RestController 注解,数据接口中就不再需要添加@ResponseBody。更加简洁。
5、@Transactional: 通过这个注解可以声明事务,可以添加在类上或者方法上。
6、其他常用注解
简单来说自动装配机制就是通过@EnableAutoConfiguration将配置为@Configuration类下面的@Bean方法加载到Spring容器中,其实spring boot自动装配机制就是为了满足其他插件进行扩展,由于外部很多bean我们无法管理,也不知道具体包路径,这时候使用自动装配机制可以让外部的类能够注入到Spring项目中,其次,Spring boot自动装配也就是Spring的自动装配,由于Spring里ImportSelector动态bean的装载机制实现了自动装载,同时使用了Meta-inf/spring.factories中spi机制实现了Spring自动扫描到自动装载的bean机制。
参考下面理解:
总而言之,Spring发展就是由xml文件到注解方式的一个循序渐进过程,比如@Component以及它的派生注解@Controller等。最后Spring直接将xml转换为@Configuration交给Spring容器来管理。这样一来,Springboot自动装载机制就是将外部xml文件中bean配置导入到自己项目中,让bean在自己的项目中运行,@EnableAutoConfiguration起中介作用。
Spring Boot 推荐使用 Java 配置而非 XML 配置,但是 Spring Boot 中也可以使用 XML 配置,通过 @ImportResource 注解可以引入一个 XML 配置。
单纯做 Spring Boot 开发,可能不太容易遇到 bootstrap.properties 配置文件,但是在结合 Spring Cloud 时,这个配置就会经常遇到了,特别是在需要加载一些远程配置文件的时侯。
spring boot 核心的两个配置文件:
bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加载的,比 applicaton 优先加载,配置在应用程序上下文的引导阶段生效。一般来说我们在 Spring Cloud Config 或者 Nacos 中会用到它。且 boostrap 里面的属性不能被覆盖;
application (. yml 或者 . properties): 由ApplicatonContext 加载,用于 spring boot 项目的自动化配置。
Spring Profiles 允许用户根据配置文件(dev,test,prod 等)来注册 bean。因此,当应用程序在开发中运行时,只有某些 bean 可以加载,而在 PRODUCTION中,某些其他 bean 可以加载。假设我们的要求是 Swagger 文档仅适用于 QA 环境,并且禁用所有其他文档。这可以使用配置文件来完成。Spring Boot 使得使用配置文件非常简单。
注解@CrossOrigin
gateway网关
nginx请求转发
jsonp前端
Spring Boot 项目最终打包成的 jar 是可执行 jar ,这种 jar 可以直接通过 java -jar xxx.jar 命令来运行,这种 jar 不可以作为普通的 jar 被其他项目依赖,即使依赖了也无法使用其中的类。
1)打包用命令或者放到容器中运行-打包jar放在linux运行
2)用 Maven/ Gradle 插件运行
3)直接执行 main 方法运行
内置tomcat,jetty
它提供了一个 @ControllerAdvice注解以及 @ExceptionHandler注解,前者是用来开启全局的异常捕获,后者则是说明捕获哪些异常,对那些异常进行处理。
1、redis 集中管理session(常用的方式)
redis : 对于key-》生成唯一的随机值id, 对于value->用户数据
cookie : 把redis生成key的值存放在cookie里面
访问项目其他模块,发送请求带着cookie进行发送,获取cookie数值,拿着cookie进行各种操作,
获取cookie之后,去redis里面进行查询,根据key进行查询,如果查询就是登录。
2.cookie同步session 如JWT(json web token)
token:按照一定规则生成字符串包含用户信息
这种完全把客户的登陆信息保存在客户端的cookie中,每次请求带着cookie中的Token
优点:由于完全舍弃了session 会减轻服务器端的压力
缺点:是把信息暴露在外,就算有加密算法还是存在安全问题。禁止使用cookie的情况下无效。
方案一:使用内置注解@Scheduled
方案二:使用第三方框架Quartz
https://www.jianshu.com/p/ef6f0c0de38f
通过 SpringFactoriesLoader加载 META-INF/spring.factories⽂件,获取并创建 SpringApplicationRunListener对象 ,应用开始启动了。
然后由 SpringApplicationRunListener来发出 starting 消息
创建参数,并配置当前 SpringBoot 应⽤将要使⽤的 Environment
完成之后,依然由 SpringApplicationRunListener来发出 environmentPrepared 消息
创建 ApplicationContext
初始化 ApplicationContext,并设置 Environment,加载相关配置等
由 SpringApplicationRunListener来发出 contextPrepared消息,告知SpringBoot 应⽤使⽤的 ApplicationContext已准备OK
将各种 beans 装载⼊ ApplicationContext,继续由 SpringApplicationRunListener来发出 contextLoaded 消息,告 知 SpringBoot 应⽤使⽤的 ApplicationContext已装填OK
refresh ApplicationContext,完成IoC容器可⽤的最后⼀步
由 SpringApplicationRunListener来发出 started 消息
完成最终的程序的启动
由 SpringApplicationRunListener来发出 running 消息,告知程序已运⾏起来了
给表加唯一索引,此方法最简单,当数据重复插入时,直接报SQL异常,对应用影响不大;
alter table 表名 add unique(字段)
示例,两个字段为唯一索引,如果出现完全一样的 order_name, create_time 就直接重复报异常;
alter table `order` add unique(order_name,create_time)
分布式锁也可以实现接口等幂次校验,知识追寻者有写过一篇使用redis实现分布式锁思路的一篇文件,小伙伴们可以参考下《为什么你不会redis分布式锁?因为你没看到这篇文章》
使用乐观锁(基于版本号实现),或者 悲观锁(表锁或者行锁)实现;
入库时先查询是否有该数据,无插入,否则不插入;
token 机制 也就是本篇文章的重点;大致实现思路就是 发起请求的时候先去 redis 获取 token , 将获取的token 放入 请求的hearder , 当请求到达服务端的时候拦截请求,对请求的 hearder 中的token,进行校验,如果校验通过则 放开拦截,删除token,否则 使用自定义异常返回错误信息;
校验:非空,是否过期,是否已经存在
一个服务编写好后,一启动就会自动注册到服务中心,调用方只管向服务中心发送服务的名称和参数,根本不关注服务的路径。springboot就是做服务的工具,springcloud是管理服务运行的工具。
如果您希望在Spring中启用定时任务功能,则需要在主类上添加 @EnableScheduling 注解。这样Spring才会扫描 @Scheduled 注解并执行定时任务。在大多数情况下,只需要在主类上添加 @EnableScheduling 注解即可,不需要在Service层或其他类中再次添加。以下是一个示例,演示如何在SpringBoot中启用定时任务功能:@SpringBootApplication@EnableSchedulingpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.ru
软件特点部署后能通过浏览器查看线上日志。支持Linux、Windows服务器。采用随机读取的方式,支持大文件的读取。支持实时打印新增的日志(类终端)。支持日志搜索。使用手册基本页面配置路径配置日志所在的目录,配置后按回车键生效,下拉框选择日志名称。选择日志后点击生效,即可加载日志。windows路径E:\java\project\log-view\logslinux路径/usr/local/XX历史模式历史模式下,不会读取新增的日志。针对历史文件可以分页读取,配置分页大小、跳转。历史模式下,支持根据关键词搜索。目前搜索引擎使用的是jdk自带类库,搜索速度相对较低,优点是比较简单。2G日志全文搜
1.依赖导入org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-validation2.validation常用注解@Null被注释的元素必须为null@NotNull被注释的元素不能为null,可以为空字符串@AssertTrue被注释的元素必须为true@AssertFalse被注释的元素必须为false@Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值@Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值@D
文章目录华为OD面试流程1.mysql数据库建了两个字段,且设置了联合索引,如果其中有一个字段为空会出现什么问题?2.谈谈springIOC的理解,有什么好处,解决了什么问题3.谈谈springAOP的理解,切面编程有没有实际应用,有哪些注解,作用是什么,有那些应用场景?4.Erika和zookeeper有了解过吗,作用是什么,主要解决了什么问题5.谈谈JDK、JRE、JVM的理解,区别是什么6.谈谈对泛型的理解7.JVM的组成华为OD面试流程机试:三道算法题,关于机试,橡皮擦已经准备好了各语言专栏,可以直接订阅。性格测试:机试技术一面(本专栏核心)技术二面(本专栏核心)主管面试定级定薪发of
Iparking停车收费管理系统-可商用介绍Iparking是一款基于springBoot的停车收费管理系统,支持封闭车场和路边车场,支持微信支付宝多种支付渠道,支持多种硬件,涵盖了停车场管理系统的所有基础功能。技术栈Springboot,MybatisPlus,Beetl,Mysql,Redis,RabbitMQ,UniApp功能云端功能序号模块功能描述1系统管理菜单管理配置系统菜单2系统管理组织管理管理组织机构3系统管理角色管理配置系统角色,包含数据权限和功能权限配置4系统管理用户管理管理后台用户5系统管理租户管理多租户管理6系统管理公众号配置租户公众号配置7系统管理操作日志审计日志8系统
一、Elasticsearch简介实际业务场景中,多端的查询功能都有很大的优化空间。常见的处理方式有:建索引、建物化视图简化查询逻辑、DB层之上建立缓存、分页…然而随着业务数据量的不断增多,总有那么一张表或一个业务,是无法通过常规的处理方式来缩短查询时间的。在查询功能优化上,作为开发人员应该站在公司的角度,本着优化客户体验的目的去寻找解决方案。本人有幸做过Tomcat整合solr,今天一起研究一下当前比较火热的Elasticsearch搜索引擎。Elasticsearch是一个非常强大的搜索引擎。它目前被广泛地使用于各个IT公司。Elasticsearch是由Elastic公司创建。它的代码位
场景在SpringBoot项目中需要对接三方系统,对接协议是TCP,需实现一个TCP客户端接收服务端发送的数据并按照16进制进行解析数据,然后对数据进行过滤,将指定类型的数据通过mybatis存储进mysql数据库中。并且当tcp服务端断连时,tcp客户端能定时检测并发起重连。全流程效果 注:博客:霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主实现1、SpringBoot+Netty实现TCP客户端本篇参考如下博客,在如下博客基础上进行修改Springboot+Netty搭建基于TCP协议的客户端(二):https://www.cnblogs.com/haolb
一、SpringBoot是什么SpringBoot是依赖于Spring的,比起Spring,除了拥有Spring的全部功能以外,SpringBoot无需繁琐的Xml配置,这取决于它自身强大的自动装配功能;并且自身已嵌入Tomcat、Jetty等web容器,集成了SpringMvc,使得SpringBoot可以直接运行,不需要额外的容器,提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等,其实Spring大家都知道,Boot是启动的意思。所以,SpringBoot其实就是一个启动Spring项目的一个工具而已,总而言之,SpringBoot是一个服务于框架的
一、引入依赖:dependency>groupId>org.springframework.bootgroupId>artifactId>spring-boot-starter-websocketartifactId>2.7.1-->dependency>二、准备工具类:/***@authorWeiDaPang*/@ConfigurationpublicclassScheduledConfiguration{@BeanpublicTaskSchedulertaskScheduler(){ThreadPoolTaskSchedulertaskScheduler=newThreadPoolTask
使用postman访问springboot项目,出现UnsupportedMediaType415错误以及java.sql.SQLException:Field‘userId’doesn’thaveadefaultvalueidea控制台显示Resolved[org.springframework.web.HttpMediaTypeNotSupportedException:Contenttype‘multipart/form-data;boundary=--------------------------508983844580882655519308;charset=UTF-8’notsu