小马哥 VPI 中期回顾
TOC
[TOC]
回顾
- Spring Boot Logger
- Spring Boot Actuator 联想到 JMX
- 为生产而准备的特性。
- JMX, 管控,就是控制它,单机的时候怎么办?集群的时候怎么办?
Endpoint
的/restart
- JMX restart operation 操作
讨论范畴
- Spring Boot
- Spring Framework 设计模式
- Spring Security
- Spring Boot 还有命令行的创建方式。
某次事件
- 解决问题需要有具体的方式。
为什么不用 ftp 把文件下载下来去看呢?
有很多网站上的文章,网上并不是很正确
不患无位,患所以立
Profile
- Spring Cloud config Service
- provider 当 Profile 一样的时候,会进行更新配置。
- 自己多种实现
- 找到方便的实现
- 对周围人的接受程度怎么样
Spring Boot 三大特性
- 自动装配(可以实现)
- 嵌入式容器(可以实现)
- 为生产准备(可以相关协议来实现)
- 干什么
- 怎么做
- 怎么应用的更好
安全
HealthEndpoint
- sensitive 不敏感的 false
RestartEndpoint
- sensitive 敏感的 true
前端开始 面向对象
- 规模扩大,必须统一认知
没有统一的认知,造成代码比较乱
- 方法和技术如何学习
- 实施
- 协调
Spring Framwork
重复的发明轮子
- Tomcat
- Embed 版本
Spring
EmbeddedServletContainFactory
org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedContext
org.springframework.boot.web.embedded.jetty.JettyEmbeddedWebAppContext
你都可以进行实现不同的 注入。
理解 Filter
PipeLine
1
value -> value -> value
Filter
1
filter -> filter -> filter
1
2
3
4
5
6
HandlerInterceptor handlerInterceptor ;
@Controller
public String index() {
}
1
2
3
void begin();
void do();
void after();
-
AfterReturnAdvide
-
MethodBeforeAdvice
设计模式的理解在于
- 看了多少代码
- 写了多少代码
Spring Boot 的内置的 Tomcat
有一个 AbstractEmbeddedServletContainerFactory
的入口,
EmbeddedServletContainerFactory
Spring Boot 有几种嵌入式容器,进入了不同的 classPath
,然后进行加载不同的容器,在进入自动装配。里边有一个 条件装配,有一个顺序, Tomcat,Jetty,Undertow
Spring MVC 怎么学习?
@RestController
1
2
3
@RestController
- @ResponseBody
- @Controller
- 我们可以通过
MedieType
来指定自描述消息。这样子可以实现一套自定义的自描述消息。
@RequestMapping
produces
consume
是Content-Type
就是我们的Accept
HttpMessageConverter
可以进行解析。
- 可以转化来,转化去。
老罗说:
- 学习不能躺着学
- 单词不背,是考不上雅思的。。。。
每个程序员都有擅长的地方,不擅长的地方。
- 诚实
- 诚信
REST
-
JSP
性能比较好,XML,纯的 HTML,都可以进行支持 -
thymeleaf
可能不是特别的适用于线上,设计起来不是特别好,性能不怎么样
教育能够改变一个人的人生观,财富观,世界观。可能对人的一生造成很大的影响。
评估技术的时候要理性的评估,不要头脑发热
- Spring Boot 易学难精
- 问题不容易找到解决的方式,需要自己有经验,社交方式发生了改变。
application/html
- 介质 / 格式 / 限制
Properties 也可以是 XML
java.util.Properties#loadFromXML
Spring Cloud
Spring Cloud config
1
2
3
4
5
6
7
8
9
10
11
12
13
14
+-------------+ +-------------+
| Application | | Config |
+----> | A 1 | -----> | |-----+
| +-------------+ +-------------+ |
| |
+-------------+ | +-------------+ +-------------+ | +-------------+
| Application |----+---->| Application | | Config |-----+-----> | Git |
| A | | | A2 | -----> | | | | |
+-------------+ | +-------------+ +-------------+ | +-------------+
| |
| +-------------+ +-------------+ |
| | Application | | Config | |
+----> | A 3 | -----> | | ----+
+-------------+ +-------------+
config-server
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
+-------------+ +-------------+ +-------------+
| config |----+ | Config |-----+-----> | Git |
| client | | +--> | Server | | | |
+-------------+ | | +-------------+ | +-------------+
| | |
| | | ....
| | |
+-------------+ | +-------------+ | +-------------+ | +-------------+
| config |----+---->| Application | | | Config |----+-----> | Git |
| client | | | A2 | -+---> | Server | | | |
+-------------+ | +-------------+ | +-------------+ | +-------------+
| | |
| | | ....
| | |
+-------------+ | | +-------------+ | +-------------+
| config |----+ +----> | Config |----+-----> | Git |
| client | | Server | | |
+-------------+ +-------------+ +-------------+
Apollo
1
2
3
4
5
6
7
8
9
10
11
12
13
+-----------+ +--------+ +--------------+
| config |----->| WEB | +--Push--- | Web Console |
| client | | | ----pull---> +-------------+ | +--------------+
+-----------+ +--------+ | Config | <----+
| Server |
+-------------+
|
| +-------------+
+---------------------| Mysql |
| |
+-------------+
断路保护器
-
服务端,有保护器
-
客户端,也需要保护器
Spring Cloud config client
发布订阅模式
Observer
/ ` Observable`
事件监听模式
Event
/EventListener
我们可以注册事件监听器,然后
我们可以发布事件,进行响应。
我们的
ConfigFileApplicationListener
配置服务器监听事件- 我们可以配置很多个应用,意味着,我们可以有多个服务
- 我们可以配置很多个应用,意味着,我们可以有多个服务
META-INF/spring.factories
1
2
3
4
ApplicationListener=\
xxxListener,\
XXXListener
\xxx
BootstrapApplicationListener
- 优先于
ConfigFileApplicationListener
进行加载
EnvironmentEndpoint
- 关联多个 带名称的
PropertySource
MutablePropertySources
关联然后进行修改。
Eureka
- XML RPC
- WebService -> SOAP
- REST -> JSON/XML
高可用架构
- URI
- URL
- Nginx
- xxx
Eureka 客户端
Eureka 服务端
- 自我注册
- 快速失败
- 容错
高可用
- Eureka 客户端的高可用
- 多个服务端
- 还可以替换掉 健康检查的端口
- 服务端高可用
- 相互注册
Ribbon
IRule
- 各种规则
需要从整体的去把控,看到整个系统的全貌。
- 随机分配可能不太确定,所以还是轮询更加稳定一点。
Hystrix
整合 Turbine
- 聚合
Hystrix
- 把相同的应用的状态给集中起来。
- 配置集群的配置
Spring Cloud Demo ,不太完整。
1
2
3
4
5
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-boot-starter-turbine</artifactId>
</dependency>
1
2
3
4
5
# 服务端口
sever.port=8080
# server port
management.port=8081
问答
-
Ribbon 是用来做什么,只能做负载均衡吗?
答:主要用户客户端均衡
-
Kafka 与 Active MQ
答:
-
Active MQ 相对完善,
-
Kafka 在能力上比较灵活放弃不少约束,性能相对较好
-
-
Java 基础的提高书籍
答:《Java 编程思想》、 《Effect Java》………
-
{@link}
??答:Java Doc 一部分,
{@link xxx}
引用到某个类@since
开始版本@version
当前版本@author
作者<code></code>
嵌入代码
-
Spring cloud config 配置,获取到 git 中的 properties 文件属性(
my.name
) 嵌套在 Spring xml 中使用答:利用注解
@ImportResource("abc.xml")
abc.xml
1 2 3
<bean id="person" class="com.darian.Person"> <property name="name" value="${my.name}"/> </bean>
启动类
Main.java
1 2 3 4 5 6 7 8
@ImportReource("abc.xml") @SpringBootApplication public class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); } }
-
将实时数据放在 Redis,Stom 去消费号码?
答:Stom 对数据持久好一点,Redis 比 DB 逊色一点。
-
new SpringApplicationBuilder().sources(Appconfig.class)
方式启动,AppliConfig
和配置文件哪个先加载?答:
Appconfig
是一个@Configuration
的 class,配置文件是一个外部资源,不会相互影响,- 如果
Appconfig
配置了@PropertySource
或者@PropertySources
的话,会优先加载@PropertySource
中的配置资源。
- 如果
1 2 3 4 5 6 7 8 9 10 11 12
@PropertySources( { @PropertySource(value = "config.properties", encoding = "UTF-8"), @PropertySource(value = "config-3.config", encoding = "GBK") } ) @SpringBootApplication public class Java9CoreApplication { //.......... ////
Java 8 以后支持了
@Repeatable
可以同时标记多个。
人的依赖性不太好,要自己多多思考问题,再去和别人讨论。