Spring boot 配置类与配置文件详解


Spring boot 配置类与配置文件详解

文章插图
 
前言在现今Spring boot 流行年代,相信大部人都非常喜欢Spring boot简洁而非常有效的配置,让我们从庞大xml配置解放出来,让每个框架都需要手动配置集成的劳动中解放出来 。这一切都是spring Boot基于约定优于配置的思想,大量的减少了配置文件的使用 。
@SpringBootApplication注解一个简单的@SpringBootApplication注解可以试下这那三个功能:
  • @EnableAutoConfiguration: 启动Spring boot 的自动化配置机制
  • @ComponentScan : 在程序所在的包下面启用组件扫描
  • @Configuration: 允许在上下文中注册额外的bean或导入其他配置类
Spring boot的配置类Spring boot 偏好于基于JAVA类的配置,尽管SpringApplication也可以和XML配置一起使用,但是Spring boot建议我们的配置写在单个 @Configuration 注解的类中,通常,Spring boot 官方声称定义主方法的类作为主@configuration是一个很好的选择 。但我们也可以根据我们的业务需要写多个@configuration,比如说 数据库连接配置一个 @configuration,线程池配置一个 @configuration等等
【Spring boot 配置类与配置文件详解】导入配置类
我们不需要将所有@configuration放到一个类中 。@import注解可用于导入其他配置类 。或者,您可以使用@components can自动扫描所有Spring组件,包括@configuration类 。
@SpringBootApplication@Import({LinkConfig.class, ConnectionPoolConfig.class, HttpConfig.class, CuratorConfig.class, GlobalConfig.class})public class ExampleController 导入xml配置
如果你一定要使用基于xml的配置,建议仍然从@configuration类开始 。然后可以使用@ImportResource注解加载XML配置文件
SpringBootApplication@ImportResource("classpath:*.xml")public class ExampleController 自动配置
Spring Boot自动配置功能会尝试根据你添加的JAR依赖项自动配置您的Spring应用程序 。例如,如果hsqldb在你的类路径上,并且你没有手动配置任何数据库连接bean,那么spring boot会自动为你配置一个内存数据库 。
你只需要选择自动配置,方法是将@EnableAutoconfiguration或@SpringBootApplication注释添加到您的@configuration类中 。
注意:你应该只添加一个@SpringBootApplication或@EnableAutoconfiguration注解 。我们通常建议您只向主要@configuration类添加一个注解(主要configuration 是带main方法的启动类)
自动化配置是非侵入式的,在任何一个点上,你可以定义你自己的配置去替换 auto-configuration 引入的配置 。例如,你添加了自己的数据源配置,则auto-configuration 带进来的数据配置将会无效 。
禁用部分自动配置类
如果你发现一些不想应用的特定自动配置类,可以使用@EnableAutoconfiguration的exclude属性禁用它们,如下例所示:
@Configuration@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})public class ExampleController Spring boot 的配置文件Spring boot允许将配置外部化,以便应用程序代码在不同的环境中使用不同的配置 。可以使用properties文件、yaml文件、环境变量和命令行参数来外部化配置 。属性值可以通过使用@value注解直接注入bean,通过Spring的环境抽象访问,或者通过@ConfigurationProperties绑定到结构化对象 。
Spring Boot使用一个非常特殊的属性源顺序,这样设计是为了个这些配置一个优先级,以便于进行的合理覆盖 。属性按以下顺序:
  1. 主目录上的devtools全局设置属性(~/.spring-boot-devtools.properties,当devtools处于活动状态时)
  2. @TestPropertySource 注解在你的测试代码上
  3. @SpringBootTest 注解上的属性值在测试代码上,测试应用程序特殊部分的测试注解
  4. 命令行参数
  5. 来自于SPRING_APPLICATION_JSON 的参数属性值,(嵌入在环境变量或系统属性中的内联JSON)
  6. ServletConfig 初始化的参数
  7. ServletContext 初始化参数
  8. 来自 java:comp/env 的JNDI 属性值
  9. Java System 的属性(System.getProperties())
  10. 系统环境变量
  11. 仅在RandomValuePropertySource*中具有属性的RandomValuePropertySource 。
  12. 在打包的JAR之外配置特定的Profile-specific.properties(application-{profile}.properties 和yaml 文件)
  13. 在打包的JAR里面配置特定的Profile-specific.properties(application-{profile}.properties 或yaml 文件)
  14. 在打包的JAR之外的 application.properties或yaml 文件
  15. 在打包的JAR里面的 application properties(application.properties 或yaml 文件)
  16. @PropertySource注解在你的 @Configuration 配置类上


    推荐阅读