以编程方式配置 Spring Boot 应用程序

Posted

技术标签:

【中文标题】以编程方式配置 Spring Boot 应用程序【英文标题】:Programmatically configure Spring Boot app 【发布时间】:2017-02-24 11:20:59 【问题描述】:

获得 Spring Boot 优点但不尝试自动配置所有内容的最简单方法是什么?例如,要仅使用我们已经配置的属性(一些通过 Consul + Spring Cloud 加载)运行 flyway,我希望我可以执行以下操作:

@Configuration
@Import(DataSourceAutoConfiguration.class, FlywayAutoConfiguration.class)
public class FlywaySetup 

并让 main 方法调用 SpringApplication.run(FlywaySetup.class)

这样做的问题是它会拾取所有组件扫描/其他依赖项的疯狂长列表。任何方式来专门配置依赖项(但仍然获得框架的优点)

【问题讨论】:

【参考方案1】:

如果您运行这个应用程序,它根本不应该使用组件扫描。除了@ComponentScan(在@SpringBootApplication 上可用)之外,没有什么可以触发spring boot 中的组件扫描。

如果您能提供更准确的详细信息而不是“一长串其他依赖项的疯狂列表”,那将会有所帮助。运行 FlywaySetup 应该只加载这两个 configuration 类(重要:这些不再作为自动配置处理)。如果您进行了组件扫描,则说明您没有显示其他内容。

【讨论】:

感谢您的回复。如果没有整个应用程序,很难找出细节,但基本上在主要方法中,我会检查一些参数,如果存在,则运行这个备用应用程序。但是,spring web / data / etc 都从该单个运行语句自动加载(除了我所有的 @Controller 类等)。 spring.factories 等不会自动加载和处理吗? 我已经在我的回复中回答了这个问题(不,除非你有 @EnableAutoConfiguration 在你的例子中你没有)。对于您分享的详细信息,我无法为您提供帮助,抱歉。【参考方案2】:

您可以排除不需要的自动配置。

您可能想看看this SO answer 以探索如何做到这一点的机制。

【讨论】:

以上是关于以编程方式配置 Spring Boot 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot的特性: 以编程方式设置profiles

如何使用 Spring Boot 以编程方式确定当前的活动配置文件 [重复]

如何使用 Spring Boot 以编程方式确定当前的活动配置文件 [重复]

如何使用 Spring Boot 以编程方式确定当前的活动配置文件 [重复]

如果我们在Spring Boot中以编程方式配置数据源,spring boot数据源属性是否有效

在 Spring Boot 中使用默认模式以编程方式配置 OracleDataSource