一、项目启动核心源码
上一篇文章说了项目是如何启动的,仍然与springboot一样,找到启动类Bootstarp.java,本篇讲讲启动之前到底干了些什么,还是使用的web服务器吗如tomcat等?
1.ProxyConfigurationLoader.load 就是将我们填写的配置文件server.yaml 或者 config-encrypt.yaml 来解析出来封装为YamlProxyConfiguration 对象。
2.下面的port 、addresses 都是配置文件中定义的,项目的端口是什么
3.核心方法 new BootstrapInitializer().init 初始化了些什么,具体参考下面
4.new ShardingSphereProxy().start(port, addresses); 使用了netty作为服务器
public static void main(final String[] args) throws IOException, SQLException {
BootstrapArguments bootstrapArgs = new BootstrapArguments(args);
// 读取配置文件,创建Yaml对象
YamlProxyConfiguration yamlConfig = ProxyConfigurationLoader.load(bootstrapArgs.getConfigurationPath());
int port = bootstrapArgs.getPort().orElseGet(() -> new ConfigurationProperties(yamlConfig.getServerConfiguration().getProps()).getValue(ConfigurationPropertyKey.PROXY_DEFAULT_PORT));
List<String> addresses = bootstrapArgs.getAddresses();
// 初始化 -如:将配置持久化到存储设备等等
new BootstrapInitializer().init(yamlConfig, port, bootstrapArgs.getForce());
boolean cdcEnabled = null != yamlConfig.getServerConfiguration().getCdc() && yamlConfig.getServerConfiguration().getCdc().isEnabled();
if (cdcEnabled) {
new CDCServer(addresses, yamlConfig.getServerConfiguration().getCdc().getPort()).start();
}
// 类似netty启动,里面注册了很多消息处理器,规定了客户端发送消息服务端到底如何接收
new ShardingSphereProxy().start(port, addresses);
}
1.核心方法 new BootstrapInitializer().init
其中唯一的核心方法就是createContextManager(proxyConfig, modeConfig, port, force);创建上下文的管理器,剩下的几乎都是将配置信息封装为元数据对象。
public void init(final YamlProxyConfiguration yamlConfig, final int port, final boolean force) throws

本文详细描述了SpringBoot项目启动时,如何加载配置文件、解析配置对象、进行持久化,并利用SPI机制降低耦合度的过程,特别关注了ProxyConfigurationLoader和ContextManager的初始化工作。
最低0.47元/天 解锁文章
750

被折叠的 条评论
为什么被折叠?



