springboot 精华
一、基础
官方文档地址:Spring Boot
注:以下部分例子 有些用到 .properties 方式,有些用 .yml方式,两者可自行学习,这里部分是为了省空间而写 .properties 方式。
1、泛谈
(1)优势
- 快速构建,去除传统 spring xml配置
- 内嵌web容器,并提供监控/健康检查
- starters 自动依赖包,大量自动配置(“习惯大于配置”)
(2)springboot项目创建
- 创建 maven项目
- 引入 相应的 starters(继承parent & 引入web),并加入 maven 插件
- 创建 启动类(@SpringBootApplication & SpringApplication.run())
注:如果不想继承 parent,也可以
2、属性配置
(1)获取方式
- @Value 方式 或者 Environment:
// @Value("${name:default}") 双引号后面可以加 默认值
@Value("${name}")
private String name;等同于下面,不过下面这种如果配置文件中不存在值的时候,启动不会报错,而上面启动都不行
@Autowired
private Environment env;
env.getProperty("name");
- @ConfigurationProperties 方式:
// 其实基于 @EnableConfigurationProperties 来完成
@Component
@ConfigurationProperties(prefix = "lin")
@Data
public class LinProperties {private String name;private Integer age;private String email;private Boolean boss;private Date birth;private Map<String, String> system;
// private UserSystem system;private List<String> work;
}
(2)数据类型
- 简单类型:
lin:name: 小林boss: falsebirth: 1995/02/17email: 928232596@qq.com
- 对象 & Map类型:
lin:system:username: linzhuzaipassword: 123456#也可以写成 system: {username: linzhuzai, password: 123456}#如果是 properties文件,还能写成 lin.system[username]=linzhuzai 或者 lin.system.username=linzhuzai# 如果获取方式是 @Value("#{${lin.system}}")
lin:system: '{"MY0003": "MY0001"}'
- List & Set类型:
lin:work:- 佛山- 广州#也可以写成 work: [佛山,广州]#如果是 properties文件,还能写成 lin.work[0]=佛山
(3)引入文件
- 导入xml 文件:
@ImportResource(locations = {"classpath:beans.xml"})
@SpringBootApplication
public class SpringbootApplication {public static void main(String[] args){SpringApplication.run(SpringbootApplication.class, args);}
}
- 导入 properties 文件:
@PropertySource(value = {"classpath:lin.properties"})
@Component
@ConfigurationProperties(prefix = "lin")
public class LinProperties {
}
(4)多环境配置
如有多个 yml文件配置:application.yml & application-dev.yml & application-prod.yml
- yml 文件:spring.profiles.active=dev
- 启动命令行:--spring.profiles.active=dev
- 虚拟机参数:-Dspring.profiles.active=dev
(5)随机值 & 引用值
- 随机值:利用 random,如 age: ${random.int}
- 引用值:可引用已配置的值,如 name: ${lin.name}
(6)配置目录优先级:
- –file: ./config/
- –file: ./
- –classpath: /config/
- –classpath: /
(7)配置优先级:
- 命令行参数配置
- 系统环境变量
- bootstrap.properties/bootstrap.yml(优先级高于 application,它是 spring-cloud的)
- jar包外,内的 application-{profile}.properties / application-{profile}.yml
- jar包外,内的 application.properties / application.yml
注:① 命令行>系统环境>bootstrap>application-{profile}>application;② properties>yaml>yml;③ jar包外 优先于 包内
二、@SpringBootApplication
1、@SpringBootConfiguration:等同于 @Configuration
2、@EnableAutoConfiguration:
- (1)
3、@ComponentScan:
三、原理
1、@Import 原理:
(1)@Import:可用来导入 普通类或者配置类,这样类本身和类中配置的 Bean都可被 spring托管
ImportSelector & ImportBeanDefinitionRegistrar
2、自动装配:
(1)工作流程:在 classpath下搜索所有 META-INF/spring.factories文件,将里面 org.springframework.boot.autoconfigure.EnableAutoConfiguration 配置的项都加载到 spring容器
(2)源码:
SpringApplication.run() => prepareContext() => load() => createBeanDefinitionLoader()
AbstractApplicationContext.refresh() => invokeBeanFactoryPostProcessors() => invokeBeanDefinitionRegistryPostProcessors() => ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry() => ConfigurationClassParser.parse() => processConfigurationClass() => doProcessConfigurationClass()@EnableAutoConfiguration => @Import({AutoConfigurationImportSelector.class}) => AutoConfigurationImportSelector => selectImports() => getAutoConfigurationEntry() =>
getCandidateConfigurations() => SpringFactoriesLoader.loadFactoryNames() => "META-INF/spring.factories" => org.springframework.boot.autoconfigure.EnableAutoConfiguration=XXXX
(3)实现关键:
- ImportSelector
- Conditional:可限制加载条件(如某些类存在或不存在才实例化,若用户自己实现则不加载 springboot自动配置的等等)
- @EnableAutoConfiguration(exclude = ) 可进行排除
3、启动原理:
(1)源码:
// 启动流程:在启动类 SpringApplication => run() 到 AbstractApplicationContext => refresh() 之间做了很多准备工作,用 listener监听器来实现,比如自动装配、内嵌tomcat等等// 创建 ApplicationContext实例、注册 CommandLinePropertySource参数命令行解析器、刷新 applicationContext并加载单例对象、触发 CommandLineRunner的bean// EventPublishingRunListener 执行 ApplicationStartingEvent、ApplicationEnvironmentPreparedEvent、ApplicationStartedEvent、ApplicationReadyEvent
// 启动流程
SpringApplication.run() => new SpringApplication() => getSpringFactoriesInstances() => SpringFactoriesLoader.loadFactoryNames() => loadSpringFactories() => 加载 spring-boot/spring-boot-autoconfigure下的META-INF/spring.factories => SpringApplication.createSpringFactoriesInstances()=> SpringApplication.run() => getRunListeners() => new DefaultApplicationArguments() => SpringApplication.prepareEnvironment()/configureEnvironment()/configurePropertySources() => SpringApplication.createApplicationContext() => SpringApplication.prepareContext() => postProcessApplicationContext()
=> SpringApplication.refreshContext()// spring-boot
org.springframework.context.ApplicationContextInitializer=
org.springframework.context.ApplicationListener=
org.springframework.boot.env.PropertySourceLoader=
org.springframework.boot.SpringApplicationRunListener=
org.springframework.boot.env.EnvironmentPostProcessor=// spring-boot-autoconfigure
org.springframework.context.ApplicationContextInitializer=
org.springframework.context.ApplicationListener=
org.springframework.boot.autoconfigure.AutoConfigurationImportListener=
org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=
org.springframework.boot.autoconfigure.EnableAutoConfiguration=
3、Tomcat 原理:
四、JDBC & Mybatis & DAO
springboot整合数据库和mybatis_真是呆子啊的博客-CSDN博客
五、Web开发
1、静态资源:
(1)路径优先级:优先级高到低
- classpath:/META-INF/resources
- classpath:/resources
- classpath:/static
- classpath:/public
2、模板引擎:
3、视图配置:
3、组件配置:
2、自定义 web配置:springboot集成mvc_spring boot 继承mvc_真是呆子啊的博客-CSDN博客
2、国际化:
6、认证
六、应用
1、日志
springboot 默认是 slf4j + logback,spring 默认是 jcl,mybatis 默认是 slf4j + log4j
(1)日志包:
- 日志抽象:JCL(Jakarta Commons Logging)、slf4j
- 日志实现:logback、log4j、log4j2、jul(java.util.logging)、jboss-logging
- 日志适配:slf4j-log4j12、slf4j-jdk14
(2)日志配置:
(3)日志级别:
2、缓存:
3、异常:springboot 全局异常处理_真是呆子啊的博客-CSDN博客
4、定时任务:springboot集成定时任务_真是呆子啊的博客-CSDN博客
5、事务:springboot 事务与并发及回滚_真是呆子啊的博客-CSDN博客
6、异步:@Async + @EnableAsync
7、消息/事件监听:ApplicationListener + ApplicationEvent
七、运维
1、测试:springboot 单元测试集合_真是呆子啊的博客-CSDN博客
2、部署:
(1)开发热部署:spring-boot-devtools
(2)linux 下部署:springboot 项目在linux下部署_真是呆子啊的博客-CSDN博客
(3)docker 下部署:docker基于Dockerfile将springboot项目构建成镜像,并推送远端仓库_真是呆子啊的博客-CSDN博客
3、监控:
- 添加依赖:spring-boot-starter-actuator
- 访问项目: 项目访问 + /actuator
- 可配置监控参数:
management.server.port=8888
management.server.servlet.context-path=/lin
八、扩展
1、自定义 starter:
2、使用外置 tomcat:
SpringBootServletInitiailzer
3、启动时执行方式:
(1)监听 Bean
使用@PostConstruct注解
实现InitializingBean和 DisposableBean接口(等同于配置 init-method)
(2)监听 spring 容器
接口 ApplicationContextInitializer
实现CommandLineRunner接口
实现ApplicationRunner接口
实现ServletContextAware接口并重写其setServletContext方法
实现ServletContextListener接口
WebApplicationInitializer
SpringBootServletInitializer
4、springboot2 的变化
- 基于 java8,可以不用模板方法提供默认实现而是直接在接口上默认实现
相关文章:
springboot 精华
一、基础 官方文档地址:Spring Boot 注:以下部分例子 有些用到 .properties 方式,有些用 .yml方式,两者可自行学习,这里部分是为了省空间而写 .properties 方式。 1、泛谈 (1)优势 快速构建…...
我用ChatGPT写2023高考语文作文(三):新课标I卷
2023年 新课标I卷 适用地区:山东、福建、湖北、江苏、广东、湖南、河北、浙江 好的故事,可以帮我们更好地表达和沟通,可以触动心灵、启迪智慧;好的故事,可以改变一个人的命运,可以展现一个民族的形象……故…...
HTML 标签的学习
1.HTML 的结构 前端三剑客: HTML CSS JS,本章我们学习的是HTML HTML > 超文本标记语言 HTML代码是由"标签"构成的. 形如 <body>hello</body>标签名 (body) 放到 < > 中大部分标签成对出现. 为开始标签, 为结束标签.少数标签只有开始标签…...
计算耗时为微秒的方法(包含:时/分/秒/毫秒/微秒/纳秒)
计算耗时为微秒的方法1 #include<stdio.h> #include <windows.h> int main() {int a[10002];int i 0;double run_time;_LARGE_INTEGER time_start; //开始时间_LARGE_INTEGER time_over; //结束时间double dqFreq; //计时器频率LARGE_INTEGER f; //计时器频率Qu…...
通过 Python 封装关键词搜索阿里巴巴商品api接口
以下是使用 Python 封装关键词搜索阿里巴巴商品列表数据的步骤: 使用 requests 库向阿里巴巴搜索接口发送 HTTP 请求,可以使用 GET 或 POST 方法,请求参数中应包含搜索关键词、每页展示数量、当前页码等信息。 解析返回的 response 中的 HTM…...
分布式光伏消纳的微电网群共享储能配置策略研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
C语言写网络爬虫总体思路
使用C语言编写爬虫可以实现网络数据的快速获取和处理,适用于需要高效处理海量数据的场景。与其他编程语言相比,C语言具有较高的性能和灵活性,可以进行底层操作和内存管理,适合处理较复杂的网络请求和数据处理任务。 但是…...
机器学习实战六步法之训练模型、优化模型、部署模型(七)
要落地一个机器学习的项目,是有章可循的,通过这六个步骤,小白也能搞定机器学习。 看我闪电六连鞭!🤣 训练模型 当确定好机器学习算法之后,就可以通过训练数据集中的特征和标签,根据样本数据的…...
《C++高级编程》读书笔记(七:内存管理)
1、参考引用 C高级编程(第4版,C17标准)马克葛瑞格尔 2、建议先看《21天学通C》 这本书入门,笔记链接如下 21天学通C读书笔记(文章链接汇总) 1. 使用动态内存 1.1 如何描绘内存 在本书中,内存单…...
Scrum团队的三个角色
Scrum团队中包括三个角色,他们分别是产品负责人、开发团队和 Scrum Master。 Scrum 团队是自组织、跨职能的完整团队。自组织团队决定如何最好地完成他们的工作,而不是由团队外的其他人来指挥他 们。 跨职能的团队拥有完成工作所需要的全部技能,不需要依赖团队外部…...
python环境中使用 requirement.txt 安装依赖
在 Python 项目中,我们通常使用 requirement.txt 文件记录项目所依赖的第三方库,以便在其他机器上部署项目时更方便地安装这些依赖。在使用 requirement.txt 安装依赖时,可以按照以下步骤进行: 安装 pip 要使用 requirement.txt…...
UE5 材质常用大全
名称快捷方式类别计算方式/简介用法/说明Contant1+鼠标左键基础常量定义浮点数,与多通道运算时,自动影响多通道。各种基础参数Constant2Vector2+鼠标左键基础常量2维向量,2通道,影响2个通道。R/G,用于调整UVConstant3Vector3+鼠标左键基础常量3维向量,3通道,影响3个通道R…...
笔记本安装centos操作系统
一、下载centos镜像 centos官方历史版本:Index of / 常用的镜像文件类型介绍: DVD ISO:普通光盘完整安装版镜像,可离线安装到计算机硬盘上,包含大量的常用软件(一般选择这种jing)。 Everythi…...
Polarion工作流插件(自定义)
创建插件命名插件配置插件Condition&Function package com.polarion.capital.example.conditions;import com.polarion.alm.tracker.model.IWorkItem; import com.polarion.alm.tracker.workflow.IArguments; import com.polarion.alm.tracker.workflow.ICallContext; impo…...
JavaScript库:jQuery,简化编程
1. jQuery介绍 官方网站 : https://jquery.com jQuery 是一个 JavaScript 库 。极大地简化了 JavaScript 编程,例如 JS 原生代码几十行 实现的功 能, jQuery 可能一两行就可以实现,因此得到前端程序猿广泛应用。 发展至今࿰…...
[springboot]菜鸟学习- JdbcTemplate用法浅尝
JdbcTemplate 是 Spring Framework 提供的一个非常强大的 JDBC 工具类,它可以显著简化 JDBC 编程的代码量,并提供了许多便捷的方法来执行 SQL 查询、更新等操作。 使用 JdbcTemplate 的步骤如下: 1. 创建 JdbcTemplate 对象:可以…...
11.无监督学习之主成分分析
11.1 降维 降维的两种应用:一是数据压缩;二是可视化数据。 11.1.1 数据压缩 将相关性强的两个特征导致冗余,可以直接去掉其中一个特征,或者将两个特征进行某种转换,得到一个特征。 11.1.2 可视化数据 直接看数据可…...
「HTML和CSS入门指南」figcaption 标签详解
什么是 figcaption 标签? 在 HTML 中,figcaption 标签用于为与 figure 元素相关的媒体内容提供说明性文本。通常用于包含图像、音频或视频等媒体元素的说明文本。 figcaption 标签的基本语法 以下是 figcaption 标签的基本语法: <figure><!-- 在这里放置您的媒体…...
电子企业实施数字化工厂建设之前,需要注意哪些
随着工业4.0时代的到来,数字化工厂建设已成为越来越多电子企业的重要议题。数字化工厂管理系统能够提高生产效率、降低成本、提高产品质量等多个方面的优势,对于企业的可持续发展具有重要意义。然而,在实施电子企业数字化工厂建设之前&#x…...
迅捷pdf实现多页插入
之前我们使用福昕阅读器实现了在每一页插入logo 这里我们用迅捷pdf再来一次,别问,问就是公司买了会员 首先声明,这里已经有会员了,所以不知道别人操作是不是需要会员,担心的话可以看看上一篇福昕阅读器版本 打开编辑…...
调用阿里云API实现证件照生成
目录 1. 作者介绍2. 算法介绍2.1 阿里云介绍2.2 证件照生成背景2.3 图像分割算法 3.调用阿里云API进行证件照生成实例3.1 准备工作3.2 实验代码3.3 实验结果与分析 参考(可供参考的链接和引用文献) 1. 作者介绍 王逸腾,男,西安工…...
PHP 转换 excel中读取的时间
首先,我们需要知道PHPExcel的时间和日期格式是以Excel内部的“1900年1月1日”为基础,以天为单位来计算的。即Excel日期与PHP时间戳之间存在一个时间偏移量。通过查阅PHPExcel的官方文档,我们可以得到以下的计算公式: // 读取exce…...
Cmake工具的简单使用
引言 本篇文章讲述如何简单的使用cmake工具构建一个项目,帮助入门的c新手学会如何使用cmake. 我们在Clion新创建一个项目时,会发现,除了main.cpp文件之外,还存在一个build-debug目录和一个CMakelists.txt文件,如图: …...
html选择器
基本选择器 基本选择器 : 标签选择器 , 类选择器 , ID选择器 标签选择器 代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEed…...
Leetcode 剑指 Offer II 030. 插入、删除和随机访问都是 O(1) 的容器
题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作…...
django实现读取数据导出生成excel表格
目录 一、简单示例: 1.创建文件对象: 2.添加工作表: 3.写入数据: 二、实践出真理 需要先安装xlwt模块 pip install -i https://pypi.douban.com/simple xlwt一、简单示例: import xlwt# 创建一个Excel文件对象 …...
DevOps系列文章之 Docker-compose
一,Docker-compose全集 1,Docker-compose简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层,分别是工程(project),…...
Vue Router入门:轻松构建单页应用程序
Vue.js是一种流行的前端JavaScript框架,可以让开发人员轻松构建动态用户界面。Vue.js的一个关键特性是其路由系统,它使得开发人员可以轻松创建具有多个视图和页面的单页应用程序(SPA)。在本文中,我们将探讨如何使用Vue Router在Vue.js中构建SPA。我们将介绍如何安装和配置…...
ITSM 如何帮助制造业企业
ITSM在现代制造业中的作用 在过去的几年中,制造业已经看到了快速的数字化,以智能制造技术改进生产技术。在工业4.0和工业5.0的推动下,制造商正在摆脱陈旧 以及利用物联网、人工智能、机器学习和大数据等先进技术的互联智能制造系统ÿ…...
leecode
leecode20,有效的括号,栈 class Solution:def isValid(self, s: str) -> bool:def check(ch1,ch2):if ch1 [ and ch2 ]:return Trueelif ch1 ( and ch2 ):return Trueelif ch1 { and ch2 }:return Trueelse:return Falsestack []for i in ran…...
python可以做的网站论文/东莞公司seo优化
2019 IDEA 多模块项目查看各模块依赖导入情况Project Structure 详细介绍 一、前言 使用IDEA工具创建了多模块项目后遇到了下面的的问题: ①、在项目中使用Gradle引入了依赖包,但是在模块中使用依赖包时候总是提示缺失依赖包。 ②、项目中导入第三发…...
做棋牌网站的步骤/网级移动营销app下载
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 进入http://www.open-open.com/jsoup/下载jsoup 通过链接获取到http://www.…...
绍兴建设局网站/哪些行业适合做seo
在黄霖的博客里看到这道题 是他们湘大比赛的一道 刚开始自己想的比较复杂 一看他 的 代码 原来这么简单 啊啊~TAT。。。看完他的思想 自己在写了一遍,其实 写的 和他差不多啦。。 #include<stdio.h> #include<string.h> int main() {int i,j,n,m,len,k…...
装修设计网站哪个平台最好/网站查询ip地址查询
前言 从毕业到现在面试也就那么几家公司,单前几次都比较顺利,在面到第三家时都给到了我offer!前面两次找工作,没考虑到以后需要什么,自己的对未来的规划是什么,只要有份工作,工资符合自己的要求…...
asp.net 4.0网站建设基础教程/东莞网站建设快速排名
2019独角兽企业重金招聘Python工程师标准>>> 上篇文章介绍了springBoot的各种优点,嗯,它很容易就能搭建一个web应用,那么具体怎么做呢? 那么我们简单的搭建一个hello 的web应用,这应用非常简单,…...
网站建设误期违约金赔偿限额/南阳本地网络推广优化公司
springboot run 的总体流程如下: (1)加载各种配置文件以及环境参数 主要根据main方法和自动配置文件META-INF/spring.factories 中的相关配置类进行自动化化加载初始化等操作。 注册监事件听器。 初始化容器上下文Context。 解析Compone…...