首页 > 解决方案 > 在 Spring 中用 @Value 替换环境

问题描述

我该如何Environment替换@Value

我有一个配置,想替换EnvironmentgetProperty

@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}")构造函数中我得到错误:Annotations are not allowed here.

我可以使用字段:

@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吗?

标签: javaspringspring-boot

解决方案


您可以执行以下操作:

@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
        );
    }

推荐阅读