如何有选择地使一个类成为应该在 Spring (Spring Boot 2.x) 中运行的代码
Posted
技术标签:
【中文标题】如何有选择地使一个类成为应该在 Spring (Spring Boot 2.x) 中运行的代码【英文标题】:How to selectively make one class to be the code that should be run in Spring (Spring Boot 2.x) 【发布时间】:2019-04-27 12:27:28 【问题描述】:在我们的 Spring Boot 2.x 项目中,我们有几个使用 @Component
符号注释的类 - 但我们希望在运行时仅选择其中一个类。
为了进一步详细说明,我们创建了一个 Uber Jar - 它将在多台机器上运行 - 但每个 jar 应该运行不同的逻辑,并且该逻辑由此类中的一个决定。
在 Spring boot 2.x 中实现这一目标的最简洁方法是什么?我阅读了一些关于配置文件等的内容。非常感谢任何更清洁的解决方案。
【问题讨论】:
How do I tell Spring Boot which main class to use for the executable jar?的可能重复 也许您正在寻找:docs.spring.io/spring-boot/docs/current/maven-plugin/usage.html,然后是 docs.spring.io/spring-boot/docs/current/reference/html/…,后者查看启动器清单以及它在 PropertiesLauncher 中的使用方式一旦您选择了该启动器,您就可以直接通过 loader.main 属性指定要运行的 Main 类。 【参考方案1】:使用 Spring Boot Maven 插件,并将其配置为使用 PropertiesLauncher,然后通过命令行设置 loader.main。或者,您可以通过命令行指定整个内容。假设您使用 Maven(或 Gradle)Spring Boot 插件来构建 jar/war 文件:
java -cp bootApp.jar -Dloader.main=org.your.package.DemoApplication org.springframework.boot.loader.PropertiesLauncher
【讨论】:
【参考方案2】:您可以将这些 @Component
类分组和移动到多个 @Configuration
类中。在这种情况下,您必须手动将它们声明为@Bean
s(方法)。您将定义与机器数量一样多的 @Configuration 类。
此外,您可以通过Spring Profiles 启用或禁用配置类。使用 spring.profiles.active
系统属性 (-Dspring.profiles.active=profile1,profile2) 启用配置文件。
如果你想让它干净,那么你必须以“依赖倒置原则”的方式来做:你应该为你的@Components 定义接口,每个@Configuration 都会声明一个具体类型的@Beans。这样你就可以在不知道具体实现的情况下使用@Autowired
依赖注入。
【讨论】:
以上是关于如何有选择地使一个类成为应该在 Spring (Spring Boot 2.x) 中运行的代码的主要内容,如果未能解决你的问题,请参考以下文章
使用 spring data neo4j 3 使 Cypher 查询成为动态的一部分