SpringBoot项目属性配置

2018-06-18 00:13:08来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

我们知道,在项目中,很多时候需要用到一些配置的东西,这些东西可能在测试环境和生产环境下会有不同的配置,后面也有可能会做修改,所以我们不能在代码中写死,要写到配置中。我们可以把这些内容写到application.yml文件中。

举个例子,在微服务架构中,某个服务经常会调用其他服务来获取相关信息,那么需要配置其他服务的地址,我们可以做如下配置:

server:
  port: 8001

# 配置多个微服务的地址
url:
  # 订单微服务的地址
  orderUrl: http://localhost:8002
  # 用户微服务的地址
  userUrl: http://localhost:8003
  # 购物车微服务的地址
  shoppingUrl: http://localhost:8004

然后在代码中如何获取到这些配置内容呢?我们在属性上使用@Value注解即可获取到,如下:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
public class TestController {

    private static final Logger LOGGER = LoggerFactory.getLogger(TestController.class);

    @Value("${url.orderUrl}")
    private String orderUrl;

    @Value("${url.userUrl}")
    private String userUrl;

    @Value("${url.shoppingUrl}")
    private String shoppingUrl;

    @RequestMapping("/config")
    public String testConfig() {
        LOGGER.info("=====获取的订单服务地址为:{}", orderUrl);
        LOGGER.info("=====获取的用户服务地址为:{}", userUrl);
        LOGGER.info("=====获取的购物车服务地址为:{}", shoppingUrl);
        return "success";
    }
}

  

很简单,请求一下该8001端口的服务后,可以看到控制台会打印出三个服务的地址,在实际项目中也是这么用的,后面如果因为服务器部署的原因,需要修改某个服务的地址,那么只要在配置文件中修改即可。

这里再引申一个问题,随着业务复杂度的增加,一个项目中可能会有越来越多的微服务,那么代码中,如果这样一个个去使用@Value注解引入的话,太繁琐,也不科学。所以可以考虑封装一个配置类。

/**
 * @author shengwu ni
 * @date 2018/06/11
 */
@Component
@ConfigurationProperties(prefix = "url")
public class MicroServiceUrl {

    private String orderUrl;
    private String userUrl;
    private String shoppingUrl;
    // 省去get和set方法
}

使用@ConfigurationProperties注解可以指定一个前缀,然后该类中的属性名就是配置中去掉前缀后的名字,一一对应即可。同时,该类上面需要加上@Component注解,作为组件放到Spring容器中。对了,使用@ConfigurationProperties需要导入一个依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
OK,再写个Controller来测试一下,此时,不需要再一个个引入了,直接通过@Resource注解将刚刚的配置类注入进来即可使用了,非常方便。如下:
@RestController
@RequestMapping("/test")
public class TestController {

    private static final Logger LOGGER = LoggerFactory.getLogger(TestController.class);

    @Resource
    private MicroServiceUrl microServiceUrl;
    
    @RequestMapping("/config")
    public String testConfig() {
        LOGGER.info("=====获取的订单服务地址为:{}", microServiceUrl.getOrderUrl());
        LOGGER.info("=====获取的用户服务地址为:{}", microServiceUrl.getUserUrl());
        LOGGER.info("=====获取的购物车服务地址为:{}", microServiceUrl.getShoppingUrl());

        return "success";
    }
}

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Spring boot 之自定义 Banner

下一篇:Java 10 实战第 1 篇:局部变量类型推断