person:
????lastName:?hello
????age:?18
????boss:?false
????birth:?2017/12/12
????maps:?{k1:?v1,k2:?12}
????lists:
??????‐?lisi
??????‐?zhaoliu
????dog:
??????name:?小狗
??????age:?12
对应的实体Bean为:
/**
?*?将配置文件中配置的每一个属性的值,映射到这个组件中
?*?@ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定,默认是application.yml/application.properties;
?*??????prefix?=?"person":配置文件中哪个key开始将下面的所有属性进行一一映射
?*?只有当前实体Bean是容器中的组件,才能使用 @ConfigurationProperties开启自动注入配置功能;
?*
?*/
@Component
@ConfigurationProperties(prefix?=?"person")
public?class?Person?{
????private?String?lastName;
????private?Integer?age;
????private?Boolean?boss;
????private?Date?birth;
????private?Map<String,Object>?maps;
????private?List<Object>?lists;
????private?Dog?dog;
}
使用这个功能,我们还可以将配置文件处理器的依赖添加进来,以后再去编写配置文件的时候就有属性提示了,会自动帮我们查找关联当前配置文件的实体Bean,pom坐标如下:
<!‐‐导入配置文件处理器,配置文件进行绑定就会有提示‐‐>
<dependency> ???????
<groupId>org.springframework.boot</groupId> ???????????
<artifactId>spring‐boot‐configuration‐processor</artifactId> ???????????
<optional>true</optional> ???????????
</dependency>
在需要获取对应配置的地方使用自动注入B该实体Bean即可
使用@Value获取值和@ConfigurationProperties获取值比较
同样在SpringBoot中我们还可以通过传统的方式–@Value注解的方式,将配置文件中的每一个属性单独注入到指定的字段中,而使用@Value和使用@ConfigurationProperties方式注入配置文件有何不同?我们将两种方式的区别是局限性列了表格,作为参照,表格如下:
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL语法 | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
前面我们通过@ConfigurationProperties读取了application.yml的配置信息,那么我们能不能读取其他的配置文件加载进对应的配置bean中呢?在SpringBoot中提供了一个@PropertySource的注解,可以指定加载的配置文件,例如:
@PropertySource(value?=?{"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix?=?"person")
public?class?Person?{
????private?String?lastName;
????private?Integer?age;
????private?Boolean?boss;
}
这样就可以指定其他的配置文件加载进对应的配置实体中
ImportResource
我们在使用Spring编程的时候,往往喜欢使用xml配置的方式配置对应的bean实例,而在SpringBoot中可以通过@ImportResource注解的方式,导入对应的xml配置文件,将其配置在某个配置类上,即可将xml配置文件中的实例注册,例如我们现在编写一个xml配置文件:
<?xml?version="1.0"?encoding="UTF‐8"?>
<beans?xmlns="http://www.springframework.org/schema/beans"
???????xmlns:xsi="http://www.w3.org/2001/XMLSchema‐instance"
???????xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring‐beans.xsd">
????<bean?id="helloService"?class="com.atguigu.springboot.service.HelloService"></bean>
</beans>
然后使用@ImportResource将xml配置文件导入:
//导入Spring的配置文件让其生效
@ImportResource(locations?=?{"classpath:beans.xml"})
而熟悉Spring注解驱动开发的应该明白,在Spring4.x版本开始,Spring支持全注解式申明Bean配置,而要完成注解式申明Bean,我们只需要@Configuration替代xml配置文件,而在配置类中,我们需要注册的Bean可以使用@Bean 将组件添加进Spring中,即可实现和xml配置一样的操作,例如:
/**
?*?@Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件
?*
?在配置文件中用<bean><bean/>标签添加组件
?*
?*/
@Configuration
public?class?MyAppConfig?{
????//将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
????@Bean
????public?HelloService?helloService02(){
????????System.out.println("往Spring中添加HelloService组件...");
????????return?new?HelloService();
????}
}
多Profile文件配置
我们在日常开发过程中往往会遇到需要多个环境使用多个配置的场景,这个时候我们往往会配置多个profile,即
application-{profile}.properties/yml 文件,而在yml中还支持多个文档块的方式配置,即可以在一个yml文件中配置多个profile环境的配置:
server:
??port:?8081
spring:
??profiles:
????active:?prod
server:
??port:?8083
spring:
??profiles:?dev
server:
??port:?8084
spring:
??profiles:?prod??#指定属于哪个环境
而使用也比较简单,可以选择以下几种方式指定默认激活的环境:
1.在配置文件中指定
我们在配置文件中可以指定
spring.profiles.active=dev
2.java启动命令参数指定
java -jar spring-boot-config.jar --spring.profiles.active=dev;
3.配置jvm虚拟机启动参数指定默认参数
-Dspring.profiles.active=dev
默认加载配置文件
最后
总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习
CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】
还有更多学习笔记面试资料也分享如下:
原创文章,作者:3628473679,如若转载,请注明出处:https://blog.ytso.com/148595.html