gpt4 book ai didi

java - 通过环境属性实现Spring服务

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:44:21 28 4
gpt4 key购买 nike

我有一个服务接口(interface)

interface ImageSearchService {
// methods...
}

我有两个实现:

@Service
class GoogleImageSearchImpl implements ImageSearchService {
// methods...
}

@Service
class AzureImageSearchImpl implements ImageSearchService {
// methods...
}

我有一个 Controller 可以使用两者之一:

@Controller
ImageSearchController {

@Autowired
ImageSearchService imageSearch; // Google or Azure ?!?

}

如何使用 Environment API设置正确的实现方式?

如果环境属性是my.search.impl=google spring 需要使用GoogleImageSearchImpl,或者如果环境是my.search.impl=google > spring 需要使用 AzureImageSearchImpl

最佳答案

您可以使用 Spring Profiles 实现这一点。

interface ImageSearchService {}

class GoogleImageSearchImpl implements ImageSearchService {}

class AzureImageSearchImpl implements ImageSearchService {}

请注意,@Service 注释已从两个实现类中删除,因为我们将动态实例化它们。

然后,在您的配置中执行此操作:

<beans>
<beans profile="azure">
<bean class="AzureImageSearchImpl"/>
</beans>
<beans profile="google">
<bean class="GoogleImageSearchImpl"/>
</beans>
</beans>

如果您使用 Java 配置:

@Configuration
@Profile("azure")
public class AzureConfiguration {
@Bean
public ImageSearchService imageSearchService() {
return new AzureImageSearchImpl();
}
}

@Configuration
@Profile("google")
public class GoogleConfiguration {
@Bean
public ImageSearchService imageSearchService() {
return new GoogleImageSearchImpl();
}
}

运行应用程序时,通过设置变量 spring.profiles.active 的值来选择您想要运行的配置文件。您可以将其作为-Dspring.profiles.active=azure 传递给JVM,将其配置为环境变量等。

Here是一个示例应用程序,展示了 Spring Profiles 的实际应用。

关于java - 通过环境属性实现Spring服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28697296/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com