SpringBoot高级概述

内部配置加载顺序

Springboot程序启动时,会从以下位置加载配置文件:

  1. file:./config/:当前项目下的/config目录下
  2. file:./ :当前项目的根目录
  3. classpath:/config/:classpath的/config目录
  4. classpath:/ :classpath的根目录
    加载顺序为上文的排列顺序,高优先级配置的属性会生效

Condition

自定义条件:

① 定义条件类:自定义类实现Condition接口,重写 matches 方法,在 matches 方法中进行逻辑判断,返回 boolean值 。 matches 方法两个参数:
context:上下文对象,可以获取属性值,获取类加载器,获取BeanFactory等。
metadata:元数据对象,用于获取注解属性。
② 判断条件: 在初始化Bean时,使用 @Conditional(条件类.class)注解

SpringBoot 提供的常用条件注解:

ConditionalOnProperty:判断配置文件中是否有对应属性和值才初始化Bean
ConditionalOnClass:判断环境中是否有对应字节码文件才初始化Bean
ConditionalOnMissingBean:判断环境中没有对应Bean才初始化Bean

@Import注解

@Enable*底层依赖于@Import注解导入一些类,使用@Import导入的类会被Spring加载到IOC容器中。而@Import提供4中用 法:

① 导入Bean

@SpringBootApplication
@Import(User.class)
public class Demo7Application {
    
    

    public static void main(String[] args) {
    
    
        ConfigurableApplicationContext context =
                SpringApplication.run(Demo7Application.class, args);
        
        User user = context.getBean(User.class);
        System.out.println(user);
        
        Map<String, User> map = context.getBeansOfType(User.class);
        System.out.println(map);
    }

}

② 导入配置类

@SpringBootApplication
@Import(UserConfig.class)
public class Demo7Application {
    
    

    public static void main(String[] args) {
    
    
        ConfigurableApplicationContext context =
                SpringApplication.run(Demo7Application.class, args);

        User user = context.getBean(User.class);
        System.out.println(user);	

    }

③ 导入 ImportSelector 实现类。一般用于加载配置文件中的类

package com.demo7.config;

import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;

//先创建一个MyImportSelector
public class MyImportSelector implements ImportSelector {
    
    
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
    
    
        return new String[]{
    
    "com.demo7.domain.User","com.demo7.domain.Role"};
    }
}
@SpringBootApplication
@Import(MyImportSelector.class)
public class Demo7Application {
    
    

    public static void main(String[] args) {
    
    
        ConfigurableApplicationContext context =
                SpringApplication.run(Demo7Application.class, args);

        User user = context.getBean(User.class);
        System.out.println(user);
        Role role = context.getBean(Role.class);
        System.out.println(role);
    }

}

④ 导入 ImportBeanDefinitionRegistrar 实现类。

package com.demo7.config;

import com.itheima.domain.User;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;

public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    
    

    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry){
    
    
        AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(User.class).getBeanDefinition();
        registry.registerBeanDefinition("user",beanDefinition);
    }
}
@SpringBootApplication
@Import({
    
    MyImportBeanDefinitionRegistrar.class})
public class Demo7Application {
    
    

    public static void main(String[] args) {
    
    
        ConfigurableApplicationContext context =
                SpringApplication.run(Demo7Application.class, args);

        User user = context.getBean(User.class);
        System.out.println(user);
       
    }

}

@EnableAutoConfiguration 注解

@EnableAutoConfiguration 注解内部使用 @Import(AutoConfigurationImportSelector.class)来加载配置类。
的配置类,当 SpringBoot 应用启动时,会自动加载
这些配置类,初始化Bean
并不是所有的Bean都会被初始化,在配置类中使用Condition来加载满足条件的Bean

Java 监听机制

SpringBoot 的监听机制,其实是对Java提供的事件监听机制的封装。
Java中的事件监听机制定义了以下几个角色:
① 事件:Event,继承 java.util.EventObject 类的对象
② 事件源:Source ,任意对象Object
③ 监听器:Listener,实现 java.util.EventListener 接口 的对象

SpringBoot 监听机制

SpringBoot 在项目启动时,会对几个监听器进行回调,我们可以实现这些监听器接口,在项目启动时完成
一些操作。
ApplicationContextInitializerSpringApplicationRunListenerCommandLineRunnerApplicationRunner

SpringBoot 监控使用

路径 描述
/beans 描述应用程序上下文里全部的Bean,以及它们的关系
/env 获取全部环境属性
/env/{name} 根据名称获取特定的环境属性值
/health 报告应用程序的健康指标,这些值由HealthIndicator的实现类提供
/info 获取应用程序的定制信息,这些信息由info打头的属性提供
/mappings 描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系
/metrics 报告各种应用程序度量信息,比如内存用量和HTTP请求计数
/metrics/{name} 报告指定名称的应用程序度量值
/trace 提供基本的HTTP请求跟踪信息(时间戳、HTTP头等)

SpringBoot 监控 - Spring Boot Admin

Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序。
Spring Boot Admin 有两个角色,客户端(Client)和服务端(Server)。
应用程序作为Spring Boot Admin Client向为Spring Boot Admin Server注册
Spring Boot Admin Server 的UI界面将Spring Boot Admin Client的Actuator Endpoint上的一些监控信息。

步骤

admin-server:

创建 admin-server 模块
导入依赖坐标 admin-starter-server
在引导类上启用监控功能@EnableAdminServer

admin-client:

创建 admin-client 模块
导入依赖坐标 admin-starter-client
配置相关信息:server地址等
启动server和client服务,访问server

猜你喜欢

转载自blog.csdn.net/weixin_44459831/article/details/120303233