SpringBoot易学
组件自动装配:规约大于配置,专注于核心业务SpringBoot难精外部化配置:一次构建、按需调配,到处运行
嵌入式容器:内置容器、无需部署、独立运行
Spring Boot Starter : 简化依赖、按需装配、自我包容
Production-Ready : 一站式运维、生态无缝整合
组件自动装配:模式注解、@Enable模块、条件装配、加载机制Spring Boot 与 Java EE 规范外部化配置:Environment抽象、生命周期、破坏性变更
嵌入式容器:Servlet Web容器、Reactive Web 容器
Spring Boot Starter: 依赖管理、装配条件、装配顺序
Production-Ready: 健康检查、数据指标、@Endpoint管控
Web: Servlet (JSR-315、JSR-340)
SQL:JDBC(JSR-221)
数据校验:Bean Validation(JSR 303、JSR-349)
缓存:Java Caching API(JSR-107)
WebSockets:Java API for WebSocket(JSR-356)
Web Services:JAX-WS(JSR-224)
Java管理:JMX(JSR 3)
消息:JMS(JSR-914)
核心特性 Spring Boot三大特性组件自动装配:Web MVC 、Web Flux、JDBC等
嵌入式Web容器:Tomcat、Jetty以及Undertow
生产准备特性:指标、健康检查、外部化配置等
组件自动装配激活:@EnableAutoConfiguration
配置:/META-INF/spring.factories
实现:XXXAutoConfiguration
代码:@EnableAutoConfiguration
//在SpringBootApplication中也是包含了EnableAutoConfiguration @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
查看源码,包含EnableAutoConfiguration,因此我们直接启动DemoApplication是成功的。
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class} ), @Filter( type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class} )} ) public @interface SpringBootApplication{}
而对于配置文件,在Spring中是大部分存在的。
【图片】
嵌入式Web容器Web Servlet:Tomcat、Jetty和Undertow
Web Reactive:Netty Web Server
生产准备特性指标:/actuator/metrics
健康检查:/actuator/health
外部化配置:/actuator/configprops
Web应用 传统Servlet应用Servlet组件:Servlet、Filter、Listener
Servlet注册:Servlet注解、Spring Bean、RegistrationBean
异步非阻塞:异步Servlet、非阻塞Servlet
依赖实现org.springframework.boot spring-boot-starter-web
添加@WebServlet注解
根据3.1规范继承HttpServlet
URL映射:@WebServlet(urlPatterns = "/my/servlet")
在启动类上加注册:@ServletComponentScan(basePackages = "com.myself.demo.web.servlet")
启动SpringBoot,可以看到
2018-10-10 11:23:56.607 INFO 21788 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Servlet com.myself.demo.web.servlet.MyServlet mapped to [/my/servlet]异步非阻塞Servlet
启动WebServlet支持异步处理
@WebServlet(urlPatterns = "/my/servlet",asyncSupported = true
启动异步操作,以新线程执行,并在执行后触发完成
//映射、继承HttpServlet编程规范 ,asyncSupported支持异步处理 @WebServlet(urlPatterns = "/my/servlet",asyncSupported = true) public class MyServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //开始异步操作 AsyncContext asyncContext = req.startAsync(); //启动 asyncContext.start(()->{ try { resp.getWriter().println("Hello,World!"); //触发完成 asyncContext.complete(); } catch (IOException e) { e.printStackTrace(); } }); } }
注意:异步较为复杂,以上只是一个简单的实现例子Spring Web MVC应用
Web MVC视图:模版引擎、内容协商、异常处理等
Web MVC REST:资源服务、资源跨域、服务发现等
Web MVC 核心:核心架构、处理流程、核心组件
Web MVC 视图ViewResolver
View
模版引擎
Thymeleaf
Freemarker
JSP
内容协商
ContentNegotiationConfigurer
ContentNegotiationStrategy
ContentNegotiationViewResolver
异常处理
@ExceptionHandler
HandlerExceptionResolver --> ExceptionHandlerExceptionResolver
BasicErrorController(Spring Boot 项目默认错误页)
资源服务
@RequestMapping
@GetMapping
@ResponseBody
@RequestBody
资源跨域
CrossOrigin
WebMvcConfigurer#addCorsMappings
传统解决方案(IFrame、JSONP)
服务发现
HATEOS
Web MVC 核心核心架构
//后续补充
处理流程
//后续补充
核心组件
DispatcherServlet
HandlerMapping
HandlerAdapter
ViewResolver
...
Spring Web Flux应用(Spring5.0)Reactor基础:Java Lambda、Mono、Flux
Web Flux核心:Web MVC注解、函数式声明、异步非阻塞
使用场景:Web Flux优势和限制
Web MVC 注解兼容
@Controller
@RequestMapping
@ResponseBody
@RequestBody
函数式声明
RouterFunction
异步非阻塞
Servlet 3.1 +
Netty Reactor
使用场景
页面渲染
REST应用
性能测试
Web Server应用切换Web Server
Tomcat -> Jetty(Tomcat的优先级高于Jetty,所以需要剔除Tomcat依赖)
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat org.springframework.boot spring-boot-starter-jetty
替换Servlet容器 -> WebFlux
//这种情况下,需要先将其他外部服务剔除依赖
org.springframework.boot spring-boot-starter-webflux
自定义Servlet Web Server
Web ServerFactoryCustomizer
自定义Reactive Web Server
ReactiveWebServerFactoryCustomizer数据相关
JDBC:数据源、JDBCTemplate、自动装配
JPA:实体映射关系、实体操作、自动装配
事务:Spring事务抽象、JDBC事务处理、自动装配
JDBC依赖
org.springframework.boot spring-boot-starter-jdbc
数据源
javax.sql.DataSource
JDBCTemplate自动装配
DataSourceAutoConfiguration
JPA依赖
org.springframework.boot spring-boot-starter-data-jpa
实体映射
@javax.persistence.OneToOne
@javax.persistence.OneToMany
@javax.persistence.ManyToOne
@javax.persistence.ManyToMany
实体操作
javax.persistence.EntityManager
自动装配
HibernateJpaAutoConfiguration
事务(Transaction)依赖
org.springframework spring-tx
Spring事务抽象
PlatformTransactionManager
JDBC事务抽象
DataSourceTransactionManager
自动装配
TransactionAutoConfiguration
功能扩展 Spring Boot 应用SpringApplication:失败分析、应用特性、事件监听等
Spring Boot 配置:外部化配置、Profile、配置属性
Spring Boot Starter:Starter开发、最佳时间
分析报告FailureAnalysisReporter
应用特性SpringApplication Fluent API
//二者等价 new SpringApplicationBuilder(DemoApplication.class).run(args); //SpringApplication.run(DemoApplication.class, args);Spring Boot 配置
外部化配合 -> ConfigurationProperty
@Profile
配置属性 -> ProperySources
运维管理 Spring Boot Actuator端点:各类Web 和 JMX Endpoints
健康检查:Heath、HealthIndicator
指标:内建Metrics、自定义Metrics
依赖
org.springframework.boot spring-boot-starter-actuator
端点(Endpoints)
web Endpoints
JMS EndPoints
健康检查(Health Checks)
Health
HealthIndicator
指标(Metrics)
内建 Metrics -> Web Endpoint: /actuator/metrics
自定义Metrics
如果本文对你有所帮助,欢迎关注个人技术公众号
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/35620.html
摘要:基于最新的,是你学习的最佳指南。驱动程序通过自动注册,手动加载类通常是不必要。由于加上了注解,如果转账中途出了意外和的钱都不会改变。三的方式项目结构相比于注解的方式主要有以下几点改变,非常容易实现。公众号多篇文章被各大技术社区转载。 Github 地址:https://github.com/Snailclimb/springboot-integration-examples(Sprin...
摘要:容器内文件日志平台支持的文件存储是,避免了许多复杂环境的处理。以上是数人云在实践容器日志系统过程中遇到的问题,更高层次的应用包括容器日志分析等,还有待继续挖掘和填坑,欢迎大家提出建议,一起交流。 业务平台每天产生大量日志数据,为了实现数据分析,需要将生产服务器上的所有日志收集后进行大数据分析处理,Docker提供了日志驱动,然而并不能满足不同场景需求,本次将结合实例分享日志采集、存储以...
摘要:所以要用实现流与维表的分两步一用实现维表的功能要实现维表功能就要用到这个功能,是由阿里巴巴贡献给的。是由阿里巴巴贡献给社区的,于版本引入,主要目的是为了解决与外部系统交互时网络延迟成为了系统瓶颈的问题。 showImg(https://segmentfault.com/img/bVbqZJE?w=583&h=123); 作为一家创新驱动的科技公司,袋鼠云每年研发投入达数千万,公司80%...
摘要:从今天起,我将在这里更新一个系列的简单爬虫到建立网站的实践手记。内容将会从最简单的开始,环境搭建,基本爬虫,入库,用建立可供用户访问的网站,网站部署。第一部分,买,装环境。我们爬虫站点的所有文件都放在里面。 从今天起,我将在这里更新一个系列的python简单爬虫到建立网站的实践手记。 内容将会从最简单的开始,环境搭建,基本爬虫,入库,用Django建立可供用户访问的网站,网站部署。 ...
摘要:是一套开源分布式数据库系统。的应用场景具有常见分布式数据库,其自带的命令行工具完备,兼容性强,甚至机器都可以安装,因此维护升级都相对比较简单。使用数据的字节进行有顺分区。 Cassandra是一套开源分布式NoSQL数据库系统。由Facebook开发,主要用于储存收件箱等简单格式数据,集GoogleBigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身。2008...
阅读 1137·2021-09-13 10:25
阅读 404·2019-08-30 15:53
阅读 2101·2019-08-30 15:44
阅读 1676·2019-08-29 17:20
阅读 1486·2019-08-29 16:36
阅读 1659·2019-08-29 14:10
阅读 1673·2019-08-29 12:44
阅读 1035·2019-08-23 14:13