boot

如何优雅关闭 Spring Boot 应用

不打扰是莪最后的温柔 提交于 2019-12-10 09:14:59
前言   随着线上应用逐步采用 SpringBoot 构建,SpringBoot应用实例越来多,当线上某个应用需要升级部署时,常常简单粗暴地使用 kill 命令,这种停止应用的方式会让应用将所有处理中的请求丢弃,响应失败。这样的响应失败尤其是在处理重要业务逻辑时需要极力避免的,那么有什么更好的方式来平滑地关闭 SpringBoot 应用呢?那就通过本文一起来探究吧。(本文主要针对基于Spring Boot 内嵌 Tomcat 容器作为 Web 服务的应用) 定制 Tomcat Connector 行为   要平滑关闭 Spring Boot 应用的前提就是首先要关闭其内置的 Web 容器,不再处理外部新进入的请求。为了能让应用接受关闭事件通知的时候,保证当前 Tomcat 处理所有已经进入的请求,我们需要实现 TomcatConnectorCustomizer 接口,这个接口的源码十分简单,从注释可以看出这是实现自定义 Tomcat Connector 行为的回调接口:     这里如果小伙伴对 Connector 不太熟悉,我就简单描述下:Connector 属于 Tomcat 抽象组件,功能就是用来接受外部请求,以及内部传递,并返回响应内容,是Tomcat 中请求处理和响应的重要组件,具体实现有 HTTP Connector 和 AJP Connector。     通过定制

SpringCloud之服务发现组件 Eureka与Feign组件(二)

谁说胖子不能爱 提交于 2019-12-10 08:12:51
本章课程学习目标: (1)Spring Cloud微服务架构 (2)服务发现组件 Eureka与Feign实现服务间的调用框架 (3)SHOP商城微服务 Eureka与Feign组件的应用 1Spring Cloud简介 1.1什么是Spring Cloud Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、熔断器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。 1.2Spring Cloud与spring boot的关系 Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单 个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具;Spring Boot专注于快速、方便集成的单个微服务个体,Spring Cloud关注全局的服务治理框架;Spring Boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了

SpringBoot学习一

不问归期 提交于 2019-12-10 05:41:10
简介 Spring Boot 使开发独立的,产品级别的基于 Spring 的应用变得非常简单,你只需 "just run" 。 我们为 Spring 平台及第三方库提供开箱即用的设置,这样你就可以有条不紊地开始。多数 Spring Boot 应用需要很少的 Spring 配置。你可以使用Spring Boot 创建 Java 应用,并使用 java -jar 启动它或采用传统的 war 部署方式 解决问题 依赖太多了, 且存在版本问题 配置太多了且每次都一样, 大部分工程, 配置每次都是一样的, 从一个地方拷贝到另外一个地方. 且Spring发展10多年, 各种配置版本太多, 对于很多程序员来说, 分不清哪个是有效, 哪个无效. 部署太麻烦. 需要tomcat部署, 项目结构也需要照着 Java EE 的目录结构来写. SpringBoot特点 创建独立的Spring应用程序 嵌入的Tomcat,无需部署WAR文件 简化Maven配置 自动配置Spring 提供生产就绪型功能,如指标,健康检查和外部配置 绝对没有代码生成和对XML没有要求配置 第一个SpringBoot程序 1.新建一个maven项目 pom文件引入 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot

Spring Boot开启的 2 种方式

烈酒焚心 提交于 2019-12-10 05:32:52
Spring Boot依赖 使用Spring Boot很简单,先添加基础依赖包,有以下两种方式 1. 继承spring-boot-starter-parent项目 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.6.RELEASE</version> </parent> 2. 导入spring-boot-dependencies项目依赖 <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.5.6.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencyManagement> Spring Boot依赖注意点 1. 属性覆盖只对继承有效 This only works if your Maven project inherits

Spring Boot配置文件

只谈情不闲聊 提交于 2019-12-10 04:02:12
配置文件 Spring Boot使用一个全局的配置文件,配置文件的名称是固定的:   application.properties   application.yml 配置文件的作用,修改Spring Boot自动配置的默认值,Spring Boot在底层都给我们自动配置好。 标记语言:   以前的配置文件,都是以“xxx.xml”文件;   YAML:以数据为中心,比json.xml更适合用作配置文件。   YAML实例:    server: port: 8080 YAML语法:   1、基本语法     K:(空格)V:表示一对键值对(空格必须有)     以空格的缩进来控制层级关系,只要左对齐的一列数据,都是同一层级的   注:属性和值也是大小写敏感   2、值得写法      字面量: 普通的值(数字、字符串、布尔)       k: v 字面值直接写         字符串不用加上单引号或双引号         “”:双引号,不会转译特殊字符         ‘’:单引号,会转译特殊字符,以普通字符串输出      对象、Map:属性和值(键值对)       k: v         值还是k: v值的方式          person: lastName: zhangsan age: 20 boss: false      数组(List、Set):      

spring cloud 入门系列一:初识spring cloud

我的未来我决定 提交于 2019-12-10 02:39:24
最近看到微服务很火,也是未来的趋势, 所以就去学习下,在dubbo和spring cloud之间我选择了从spring cloud,主要有如下几种原因: dubbo主要专注于微服务中的一个环节--服务治理,像服务注册和发现这种还需要zookeeper第三方的中间;但是spring cloud提供了微服务的一站式解决方案,该有的功能都有了。 spring cloud 社区似乎更加活跃,未来可能成为这个行业的标准。 自己所在公司的云部门就是用的spring boot/cloud,有先入为主的赶脚吧。 好,接下来我们来认识下spring cloud. 一、什么是spring cloud? 它的中文官网这样说: 微服务架构集大成者,云计算最佳业务实践。 百度百科这样说的: Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发, 如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。 Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来, 通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。 二、基础知识

C# - How to know when Windows is “settled” after startup?

流过昼夜 提交于 2019-12-10 02:19:10
问题 I'm writing an application that will have an option to run on Windows Startup. I can't stand when applications bog my PC down before it has really settled, and this is a non-critical application. I'd like my application to politely wait for all other startup items to finish and settle so that the user's PC becomes responsive before it starts doing any work. How would I go about detecting this condition? I suppose I could traverse the registry and look for all startup processes to be running,

每天一点Linux-01文档系统

会有一股神秘感。 提交于 2019-12-10 00:34:39
Windows: 以多根的方式组织文档 C: D: E: Linux: 以单根的方式组织文档 / /目录结构: FSH (Filesystem Hierarchy Standard) [root@yang ~]# ls / bin dev lib media net root srv usr boot etc lib64 misc opt sbin sys var cgroup home lost+found mnt proc selinux tmp 利用BASH Shell对文档进行管理 bin 二进制文档,存放这Linux常用操作命令的执行文档 dev 设备目录 home 相当于windows的c盘下的用户文档夹 lib64 64的库文档 media 媒体文档 mnt 外设目录(插u盘硬盘) opt 第三方软件安装目录(安装qq等) root root用户的home usr 用户共享目录(相当于windows中c盘的Program Files,系统内置软件都装在这个文档夹中) boot 内核启动目录 etc 配置文档目录 lib 库目录 lost+found 丢失目录 sbin 超级管理员的目录 tmp 临时目录(重启后会清空) var 变量目录大专栏 每天一点Linux-01文档系统 g> proc 虚拟的文档系统,反应出来的时内核,进程信息或是实时状态 selinux

Spring Boot Admin最佳实践

和自甴很熟 提交于 2019-12-09 23:58:58
本文不进行Spring Boot Admin入门知识点说明 在 Spring Boot Actuator 中提供很多像 health 、 metrics 等实时监控接口,可以方便我们随时跟踪服务的性能指标。 Spring Boot 默认是开放这些接口提供调用的,那么就问题来了,如果这些接口公开在外网中,很容易被不法分子所利用,这肯定不是我们想要的结果。在这里我们提供一种比较好的解决方案。 被监控的服务配置 为被保护的http请求添加请求前缀 123456 management: context-path: /example-context eureka: instance: status-page-url-path: ${management.context-path}/info health-check-url-path: ${management.context-path}/health 添加请求前缀 Spring Boot Admin 在启动的时候会去 eureka 拉去服务信息,其中 health 与 info 需要特殊处理,这两者的地址是根据 status-page-url-path 和 health-check-url-path 的值。 zuul 网关配置 zuul 保护内部服务http接口 12 zuul: ignoredPatterns: /*/example

spring boot 加入mail邮件支持

不想你离开。 提交于 2019-12-09 20:57:08
一、添加依赖 <!-- 邮件整合 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 二、添加mail.properties配置文件 #设置邮箱主机 spring.mail.host=smtp.qq.com #设置用户名 spring.mail.username=xxxxxxx #设置密码 #QQ邮箱->设置->账户->POP3/SMTP服务:开启服务后会获得QQ的授权码 spring.mail.password=xxxxxxxxxxxxxxxx #端口 spring.mail.port=465 #协议 #spring.mail.protocol=smtp #设置是否需要认证,如果为true,那么用户名和密码就必须的, #如果设置false,可以不设置用户名和密码,当然也得看你的对接的平台是否支持无密码进行访问的。 spring.mail.properties.mail.smtp.auth=true #STARTTLS[1] 是对纯文本通信协议的扩展。它提供一种方式将纯文本连接升级为加密连接(TLS或SSL),而不是另外使用一个端口作加密通信。 spring.mail