SpringBoot 面试题, Spring Boot 中 application.properties 和 application.yml 的区别是什么?
SpringBoot 面试题, Spring Boot 中 application.properties 和 application.yml 的区别是什么?
QA
Step 1
Q:: Spring Boot 中 application.properties 和 application.
yml 的区别是什么?
A:: application.properties 和 application.
yml 都是 Spring Boot 项目中用来配置应用程序的文件。两者的区别主要在于语法和可读性:
1. 语法:application.
properties 使用键值对形式配置,例如 server.port=8080
。而 application.
yml 使用 YAML 格式,结构更加清晰,例如:
server:
port: 8080
2.
可读性:YAML 格式由于其层次结构,更加适合复杂配置,使配置文件更具可读性。
3.
多环境配置:两者都支持多环境配置,但 YAML 格式在处理复杂的嵌套配置时更加简洁。
Step 2
Q:: 如何在 Spring Boot 中使用多环境配置?
A:: 在 Spring Boot 中,可以通过配置文件和注解来实现多环境配置。常见的方法包括:
1.
使用不同的配置文件:可以创建不同的配置文件,如 application-dev.properties
、application-prod.properties
,然后在启动时指定使用哪个配置文件。
2.
使用 @Profile
注解:在代码中使用 @Profile
注解标注不同环境下的 bean。例如:
@Configuration
@Profile("dev")
public class DevConfig {
// 开发环境配置
}
3.
通过命令行参数或环境变量指定配置文件:在启动时使用 --spring.profiles.active=dev
来指定使用的配置文件。
Step 3
Q:: 什么是 Spring Boot 自动配置?
A:: Spring Boot 自动配置(Auto-
Configuration)是指 Spring Boot 根据项目中依赖的库和类路径中的存在情况,自动配置 Spring 应用上下文的功能。这种机制使得开发人员不需要手动配置大量的 XML 或 Java 配置类。例如,当在类路径中发现了 spring-webmvc
依赖时,Spring Boot 会自动配置 DispatcherServlet 等 MVC 组件。
Step 4
Q:: 如何在 Spring Boot 项目中禁用某个自动配置?
A:: 可以使用 @SpringBootApplication
注解的 exclude
属性来禁用某个自动配置类。例如:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
此外,还可以在 application.properties
文件中通过配置项禁用某个自动配置:
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
Step 5
Q:: Spring Boot 中的 @
Conditional 注解有什么作用?
A:: @Conditional 注解用于根据特定条件创建 bean。常见的 @Conditional 注解有 @ConditionalOnProperty、@ConditionalOnClass、@ConditionalOnMissingBean 等。例如,使用 @
ConditionalOnProperty 可以根据配置文件中的某个属性值来决定是否创建某个 bean:
@Bean
@ConditionalOnProperty(name = "my.feature.enabled", havingValue = "true")
public MyFeature myFeature() {
return new MyFeature();
}