Java 在Spring中将环境替换为@Value
如何用Java 在Spring中将环境替换为@Value,java,spring,spring-boot,Java,Spring,Spring Boot,如何用@Value替换环境 我有一个配置,想替换环境和获取属性: @Configuration public class RabbitConfig { @Autowired Environment environment; @Bean("googleRabbitService") public RabbitService getGoogleRabbitService(RabbitTemplate rabbitTemplate) {
@Value
替换环境
我有一个配置,想替换环境
和获取属性
:
@Configuration
public class RabbitConfig {
@Autowired
Environment environment;
@Bean("googleRabbitService")
public RabbitService getGoogleRabbitService(RabbitTemplate rabbitTemplate) {
return new RabbitService(
environment.getProperty("rabbit-service.google.request-exchange-name"),
environment.getProperty("rabbit-service.google.request-queue-name"),
environment.getProperty("rabbit-service.google.response-exchange-name"),
environment.getProperty("rabbit-service.google.dead-exchange-name"),
rabbitTemplate
);
}
@Bean("amazonRabbitService")
public RabbitService getAmazonRabbitService(RabbitTemplate rabbitTemplate) {
return new RabbitService(
environment.getProperty("rabbit-service.amazon.request-exchange-name"),
environment.getProperty("rabbit-service.amazon.request-queue-name"),
environment.getProperty("rabbit-service.amazon.response-exchange-name"),
environment.getProperty("rabbit-service.amazon.dead-exchange-name"),
rabbitTemplate
);
}
在构造函数中直接使用@Value(${rabbit service.google.request exchange name}”)
时,我得到一个错误:此处不允许使用批注
我可以使用字段:
@Value("${rabbit-service.gogle.request-exchange-name}")
private String googleRequestExchange;
@Value("${rabbit-service.gogle.request-exchange-name}")
private String googleResponseExchange;
...
然后:
public RabbitService getGoogleRabbitService(RabbitTemplate rabbitTemplate) {
return new RabbitService(
googleRequestExchange,
googleResponseExchange,
...
rabbitTemplate
);
但我必须创建一组字段。是否有任何方法可以使用@Value
?您可以执行以下操作:
@Configuration
public class RabbitConfig {
@Bean("googleRabbitService")
public RabbitService getGoogleRabbitService(
@Value("rabbit-service.google.request-exchange-name") String requestExchangeName,
@Value("rabbit-service.google.request-queue-name") String requestQueueName,
@Value("rabbit-service.google.response-exchange-name") String responseExchangeName,
@Value("rabbit-service.google.dead-exchange-name") String deadExchangeName,
RabbitTemplate rabbitTemplate) {
return new RabbitService(
requestExchangeName,
requestQueueName,
responseExchangeName,
deadExchangeName,
rabbitTemplate
);
}
尝试使用@ConfigurationProperties
,然后还需要定义表示用户不喜欢的属性的字段<代码>公共RabbitService getAmazonRabbitService(RabbitTemplate RabbitTemplate,@Value(${rabbit service.gogle.request exchange name})){/…}
不适用于您?只是在本地尝试了类似的东西,没有任何问题。如果您使用的是Spring Boot,请按照建议使用@ConfigurationProperties
。您可能需要定义一个POJOrabbitmplateproperties
,并在基类上有一个Map
,以保存多个并行配置。