需要澄清引导Spring Boot应用程序的推荐方法

时间:2016-03-25 09:31:35

标签: java spring spring-boot

SpringApplication的Java文档中,提到:

  

SpringApplication可以读取各种不同的bean   源。通常建议单@Configuration   class用于引导你的应用程序[...]

此声明是否意味着建议应用 只有一个@Configuration ,或者是否建议通过已使用@ConfigurationSpringApplication注释的类(例如,使用run方法) - 对@Configuration类的数量没有任何限制?

此外,我发现该陈述的其余部分难以解释:

  

[...]但是,也可以使用以下任何来源:

     
      
  • Class - 由AnnotatedBeanDefinitionReader
  • 加载的Java类   
  • Resource - 要由XmlBeanDefinitionReader加载的XML资源,或者要加载的groovy脚本   GroovyBeanDefinitionReader
  •   
  • Package - 由ClassPathBeanDefinitionScanner
  • 扫描的Java包   
  • CharSequence - 根据需要加载的类名,资源句柄或包名。如果CharSequence无法解析   类并且不会解析为它将存在的Resource   被视为Package
  •   

虽然我以前使用SpringApplication.run没有任何问题,但现在阅读它的JavaDocs描述让我完全糊涂了。

2 个答案:

答案 0 :(得分:1)

这就是我理解的方式:

  

单个@Configuration类用于引导您的应用程序

您应该有一个@Configuration类,它是应用程序的根配置。

这使得配置更容易理解和调试。 当然,您可以使用@Import导入其他配置。

实际上,对于测试和prod,您可能有不同的根配置。但是你总是只使用一个作为起点。

  

但是,也可以使用以下任何来源:

该部分描述了可以使用哪种类型的源来创建应用程序上下文。这些源可以传递给构造函数:

public SpringApplication(Object... sources)

或者一个二传手:

public void setSources(Set<Object> sources)
  • Class - 使用@Configuration
  • 注释的类
  • 资源 - 具有弹簧配置的xml文件
  • 包 - 将扫描以查找配置的包
  • CharSequence - 具有类或包名称的字符串。这允许例如使用在编译时不可用的配置类。

我个人从未配置过提供构造函数或setter源代码的SpringApplication。我有一个根配置,并使用@Import注释我的SpringApplication类。

答案 1 :(得分:0)

使用@SpringApplication@EnableAutoConfiguration春季启动时automatically configure your Spring application based on the jar dependencies that you have added

并且应该只在您的应用程序中使用一次,另一方面@Configuration可以在@SpringApplication@EnableAutoConfiguration的同一根中使用它。

Spring建议只添加@Configuration

的一个主要@EnableAutoConfiguration

您可以在主要@Configuration

中包含和排除所需数量@EnableAutoConfiguration

https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html#using-boot-auto-configuration

从我的理解@EnableAutoConfiguration@SpringApplication几乎有相同的工作