为什么要看源码
- 因为源码获得很容易, 代码本身是最准确的讲解
- 推测的结论不准
- “ 实验 ” 周期长, 代价大
- 通过查看历史版本差异, 了解功能演化
- 源码面前, 了无秘密
下载源码方法
直接点 CTRL + 类, 通常是编译的内容, 可以在不下载源码时简单看一下, 但有时编译效果不好, 也没有注释说明等. 这时最好是下载源码.
IDE 中都有相应功能, IDEA 和 eclipse 都有相应功能
IDEA 中下载源码 [Download Sources], 可以只下载某个 jar 包对应的源码.
命令行方式可以一次下载全部源码:
mvn dependency:sources
...
Downloading from ssllrepo: http://dev.myrepo.com/artifactory/repo/com/fasterxml/classmate/1.3.4/classmate-1.3.4-sources.jar
Downloaded from ssllrepo: http://dev.myrepo.com/artifactory/repo/com/fasterxml/classmate/1.3.4/classmate-1.3.4-sources.jar (48 kB at 694 kB/s)
...
下载的代码会保存到本地 maven 库里, 即${user.home}/.m2/repository
下
查看源码先要了解模块全图, 了解原理
核心功能:
- Distributed/versioned configuration
- Service registration and discovery
- Routing
- Service-to-service calls
- Load balancing
- Circuit Breakers
- Global locks
- Leadership election and cluster state
- Distributed messaging
看源码要注意的问题
- 要从结构上把握, 胸中要有全景图
- 要从需求出发, 知晓作者是在解决一个什么问题
- 重点是作者为什么是这么解决的, 好处, 坏处, 如何取舍的
- 你的时间很宝贵, 不要过度纠缠, 通过源码能解决你的疑问
最好带着问题去看
问题 1: 有哪些配置选项
https://docs.spring.io/spring…
配置举例:
三种方式
application.properties 或 application.yml 或命令行选项
配置项
# REMOTE DEVTOOLS (RemoteDevToolsProperties)
spring.devtools.remote.context-path=/.~~spring-boot!~ # Context path used to handle the remote connection.
spring.devtools.remote.proxy.host= # The host of the proxy to use to connect to the remote application.
spring.devtools.remote.proxy.port= # The port of the proxy to use to connect to the remote application.
spring.devtools.remote.restart.enabled=true # Whether to enable remote restart.
spring.devtools.remote.secret= # A shared secret required to establish a connection (required to enable remote support).
spring.devtools.remote.secret-header-name=X-AUTH-TOKEN # HTTP header used to transfer the shared secret.
对应的 Java 类
RemoteDevToolsProperties.java
官方的 Java 包会在通过 META-INF
目录下的
spring-autoconfigure-metadata.properties
spring-configuration-metadata.json
例如:
~/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/2.0.3.RELEASE/spring-boot-autoconfigure-2.0.3.RELEASE.jar!/META-INF/spring-configuration-metadata.json
{
"hints": [
...,
{
"name": "spring.datasource.data",
"providers": [
{
"name": "handle-as",
"parameters": {"target": "java.util.List<org.springframework.core.io.Resource>"}
}
]
},
{
"name": "spring.datasource.driver-class-name",
"providers": [
{
"name": "class-reference",
"parameters": {"target": "java.sql.Driver"}
}
]
},
...
}
JSON 结构比较简单, 容易看懂.
在这个文件里定义了相应的配置项, 数值类型, 以及可能的备选项进行描述, 从而使得 IDE 可以透过代码提示, 方便用户键入.
问题 2: 最小原型是什么
未完待续(鉴于很多转载 / 抓取的从不注明出处,我先发个半截的)
问题 3: 如何调试
未完待续
问题 4: 如何模拟服务失败, 模拟容错
未完待续
问题 5: 如何负载均衡
未完待续
问题 6: 如何进行压力测试, 模拟熔断
未完待续
问题 7: 如何自动布署
未完待续
用测试代码验证自己的想法
请 mark https://segmentfault.com/a/11… 等待更新。