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
。您可能需要定义一个POJO
rabbitmplateproperties
,并在基类上有一个
Map
,以保存多个并行配置。