本文共 4469 字,大约阅读时间需要 14 分钟。
好的文章进行收集整理:
1.SpringApplication.run做了哪些事
2.SpringBoot @ConditionalOnBean、@ConditionalOnMissingBean
@ConditionalOnBean(Abc.class) Abc.class 已注入的Bean存在时处理
@ConditionalOnMissingBean(Abc.class)
@Bean@ConditionalOnMissingBeanpublic NacosDiscoveryProperties nacosProperties() { return new NacosDiscoveryProperties();}
NacosDiscoveryProperties不存在时,进行初始化NacosDiscoveryProperties
@ConditionalOnProperty是指在application.yml里配置的属性是否为true,其他的几个都是对class的判断。
3.Java中Class标签@PostConstruct和@PreDestroy,表示执行顺序,服务器仅加载一次
4.Spring cloud 网络配置相关,InetUtils、InetUtilsProperties和UtilAutoConfiguration提供了网络配置相关的功能。
网卡选择:
Spring Cloud Netflix Eureka: 多网卡环境下Eureka服务注册IP选择问题
Spring Cloud Eureka 多网卡配置最终版
5.@CallerSensitive
使用CallerSensitive后,getCallerClass不再用固定深度去寻找actual caller(“我”),而是把所有跟反射相关的接口方法都标注上CallerSensitive,搜索时凡看到该注解都直接跳过,这样就有效解决了前面黑客通过构造双重反射来提升权限的问题
6.EndPoint 主要用于暴漏SpringMvc内部运行的信息
Spring boot actuator监控端点集成,可以集成监控+数据暴漏+grafana图表软件,进行图形化展示
源码解析:
端点小总结:
Endpoint也是通过spring.factories实现扩展功能,注入了对应的Bean来实现应用监控的功能
7.@Bean 注册对象时,方法参数是取Spring 容器中的具体声明类的注册Bean。如果声明类注册的对象有多个,则需要参数名一致,否则会报不确定选择哪个Bean。
@Bean @ConditionalOnBean(AutoServiceRegistrationProperties.class) public NacosAutoServiceRegistration nacosAutoServiceRegistration( NacosServiceRegistry registry, AutoServiceRegistrationProperties autoServiceRegistrationProperties, NacosRegistration registration) { return new NacosAutoServiceRegistration(registry, autoServiceRegistrationProperties, registration); }
8.Spring autoConfigure 通过标签进行自动化配置,带条件的初始化,以及配置先后顺序,具体Bean没有了后进行自动再注册(防止对象的销毁,跟对象的初始化进行处理)
具体标签说明:
@Configuration@EnableConfigurationProperties@ConditionalOnNacosDiscoveryEnabled@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true)@AutoConfigureAfter({ AutoServiceRegistrationConfiguration.class, AutoServiceRegistrationAutoConfiguration.class })public class NacosDiscoveryAutoConfiguration { @Bean public NacosServiceRegistry nacosServiceRegistry( NacosDiscoveryProperties nacosDiscoveryProperties) { return new NacosServiceRegistry(nacosDiscoveryProperties); } @Bean @ConditionalOnBean(AutoServiceRegistrationProperties.class) public NacosRegistration nacosRegistration( NacosDiscoveryProperties nacosDiscoveryProperties, ApplicationContext context) { return new NacosRegistration(nacosDiscoveryProperties, context); } @Bean @ConditionalOnBean(AutoServiceRegistrationProperties.class) public NacosAutoServiceRegistration nacosAutoServiceRegistration( NacosServiceRegistry registry, AutoServiceRegistrationProperties autoServiceRegistrationProperties, NacosRegistration registration) { return new NacosAutoServiceRegistration(registry, autoServiceRegistrationProperties, registration); }}
9.SpringBoot使用ApplicationEvent&Listener完成业务解耦
10.Spring框架开发之SmartLifecycle接口
Spring加载和初始化所有bean后,接着执行一些任务或者启动需要的异步服务,当Spring容器加载所有bean并完成初始化之后,会接着回调实现该接口的类中对应的方法(start()方法)。
11.nacos discovery 流程原理
12.nacos 源码
13.Spring boot 配置资源类 PropertySourceLocator 远程config读取主要类
例如nacos的配置中心:
@Order(0)public class NacosPropertySourceLocator implements PropertySourceLocator
14.Spring boot FailureAnalyzer 一种很好的方式在启动时拦截异常并将其转换为易读的消息,并将其包含在FailureAnalysis中。
public class NacosConnectionFailureAnalyzer extends AbstractFailureAnalyzer{ @Override protected FailureAnalysis analyze(Throwable rootFailure, NacosConnectionFailureException cause) { return new FailureAnalysis("Application failed to connect to Nacos server", "check your nacos server config", cause); }}
同时META-INF/spring.factories中添加
org.springframework.boot.diagnostics.FailureAnalyzer=\org.springframework.cloud.alibaba.nacos.diagnostics.analyzer.NacosConnectionFailureAnalyzer
因为SpringApplication.run执行时初始化了FailureAnalyzers
ApplicationArguments applicationArguments = new DefaultApplicationArguments( args);ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments);Banner printedBanner = printBanner(environment);context = createApplicationContext();analyzers = new FailureAnalyzers(context);prepareContext(context, environment, listeners, applicationArguments, printedBanner);refreshContext(context);afterRefresh(context, applicationArguments);listeners.finished(context, null);stopWatch.stop();if (this.logStartupInfo) { new StartupInfoLogger(this.mainApplicationClass) .logStarted(getApplicationLog(), stopWatch);}return context;
15.AbstractHealthIndicator
Spring 内部healthEndPoint 解析
转载地址:http://igadi.baihongyu.com/