内部配置加载顺序
Springboot程序启动时,会从以下位置加载配置文件:
file:./config/
:当前项目下的/config目录下file:./
:当前项目的根目录classpath:/config/
:classpath的/config目录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容器中。而@Impor
t提供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 在项目启动时,会对几个监听器进行回调,我们可以实现这些监听器接口,在项目启动时完成
一些操作。
ApplicationContextInitializer
、SpringApplicationRunListener
、CommandLineRunner
、ApplicationRunner
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