以编程方式配置 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 以编程方式确定当前的活动配置文件 [重复]