当前位置: 首页 > 知识库问答 >
问题:

将不同的@Configuration bean传递给基于rest的

毋树
2023-03-14

我有两个不同配置,我将从应用程序YML加载它们。 属性相同,但值可能不同。

如何使此工作giveMeRestTemplate(类型config)

//app.yml

    bus:
      tyres:8
      seats:40
      color:red
      url: www.businfo.com
    car:
      tyres:4
      seats:6
      color:blue
      url: www.carinfo.com

所以我有不同的ConfigruationProperties类,类似于CarConfig

@ConfigurationProperties("bus")
    public class BusConfig{
      public int tyres;
      public int seats;
      public string color ;
      public string url;
    //setters and getters below.

    }

然后我有一个rest客户机,我用它调用一些api来获取信息。 所以这个api可以返回你可以说的不同类型车辆的信息。

public class RestClientHelper{

    public RestTemplate giveMeRestTemplate(Type config);
    {
     return restTemplate; //using the above type which might have url to the specific api to call.

     }
}

其思想是,调用代码可以根据发送给它的配置获得不同的rest模板。

   public SomeClient{

    @Autowired
    RestClientHelper rch;
    
    @Autowired
    BusConfig bc;

    @Autowired
    CarConfig cc;

    
    public void publishDetails(){
     rch.giveMeRestTemplate(bc);    //so if i send cc then it should prepare rest template for cc
    }
   }

共有1个答案

吴星汉
2023-03-14

我建议您稍微修改一下配置属性(为简洁起见省略getter和setter):

public enum Type {
    BUS, CAR
}

@ConfigurationProperties("rest-config")
public class RestConfig {
    private Map<Type, ConfigForType> type = new HashMap<>();

    public static class ConfigType {
        private int tyres;
        private int seats;
        private string color;
        private string url;
    }
}

这样,您就可以得到以下配置文件:

rest-config:
  type:
    bus:
      tyres: 8
      seats: 40
      color: red
      url: www.businfo.com
    car:
      tyres: 4
      seats: 6
      color: blue
      url: www.carinfo.com

最后是你的助手:

@Service
public class RestClientService {

    @Autowired
    private RestConfig config;

    public RestTemplate giveMeRestTemplate(Type type) {
        RestConfig.ConfigType cfg = config.getType().get(type);
        // do what's necessary with cfg
        return restTemplate;
    }
}
 类似资料:
  • 我在mongoDB中使用Spring Boot。我扩展了PagingAndSortinRepository存储库并添加了以下功能 我希望能够向它传递一个正则表达式数组,例如/dog/、/cat/、/horse/,以排除标题中可能包含其中一个正则表达式的任何项目。 上述函数不起作用,因为排除已转换为字符串。如何传递正则表达式数组来执行上述操作?

  • 我有一个通过uwsgi运行的小型python应用程序,其中的请求由nginx提供。 我正在打印环境变量。。。看起来在两个ok请求之后,nginx正在为不相关的请求发送相同的HTTP_COOKIE参数: 例如: {'UWSGI_CHDIR':'/ebs/py','HTTP_COOKIE':'ge_t_c=4fcee8450c3bee709800920c','UWSGI_SCRIPT':'服务器','

  • 我寻找一种最佳实践方法,如何根据Symfony的ACL发送不同的用户和不同的响应。 我使用FoS RestBundle。他们提供了我使用的JMSSeriazerBundle。到目前为止,我已经创建了模型和序列化程序yml文件,非常好。一切看起来都很棒,很管用。 现在我有不同的用户访问这个RESTAPI。他们中的一些人拥有扩展权限,因此可以查看更多信息。处理这些问题的最佳做法是什么? 每个人的URL

  • 我无法将派生类传递给接受基类作为参数的函数。基类由“障碍物”组成,这些障碍物将被放置在“板”上。无效的board::setvalue(int-length、int-width、board 但是,这会导致编译器给出“未知参数转换…”错误。在浏览站点时,我发现我应该将派生对象作为常量进行传递,但这会导致问题,因为无法将常量分配给线路板(因为它包含指向非常量障碍物的指针)。 反过来,将线路板更改为包含常

  • 本文向大家介绍vue给组件传递不同的值方法,包括了vue给组件传递不同的值方法的使用技巧和注意事项,需要的朋友参考一下 这里讲解一下Vue 官网的一个实例,Vue将数据遍历传递给多个组件,这个是我们实际开发中常做的事情。一般大型应用都是使用组件搭建起来的,我们需要给组件传递不同的值,来实现不同的展现,实现代码的复用。 代码分析: 这里我直接使用了一个Vue的CDN,然后实例化Vue对象就可以使用。

  • 我想从另一个作业中获取参数,就像我们从另一个作业中复制工件一样。 考虑2个詹金斯作业A和B。拉链制品。 我的要求:我希望作业B将所有参数传递给作业A中的构建#30。(我使用复制工件插件从作业A的#30复制.zip)如何从不同的jenkins作业获取参数?

  • 我在集群中有以下代码: csv_file=“/usr/usr1/test.csv” 但是程序不是在挑FI。有人能帮忙吗?

  • 我为什么要这样做?因为lambda表达式生成的ClosureType不是默认可构造的。通过这个“技巧”,我可以默认构造这样的closureType。 此外,模板参数的要求是,它必须为空=>