Spring Mule连接器配置需要动态属性

Spring Mule连接器配置需要动态属性,spring,mule,mule-component,Spring,Mule,Mule Component,我开发了一种新的连接器。此连接器需要配置两个参数,例如: 默认跳闸超时 默认跳闸阈值 挑战是,我希望使用HTTP调用从API中读取${myValue_a}和${myValue_a},而不是从文件或内联值中读取 因为这是一个连接器,所以在初始化连接器之前,我需要在某处进行这个API调用 FlowVar不是一个选项,因为它们是用流初始化的,这在Mule应用程序生命周期中以前就发生过 我的想法是创建一个Springbean,实现Initialisable,以便在连接器初始化之前调用它,在这里,使

我开发了一种新的连接器。此连接器需要配置两个参数,例如:

  • 默认跳闸超时
  • 默认跳闸阈值

挑战是,我希望使用HTTP调用从API中读取${myValue_a}和${myValue_a},而不是从文件或内联值中读取

因为这是一个连接器,所以在初始化连接器之前,我需要在某处进行这个API调用

FlowVar不是一个选项,因为它们是用流初始化的,这在Mule应用程序生命周期中以前就发生过

我的想法是创建一个Springbean,实现Initialisable,以便在连接器初始化之前调用它,在这里,使用任何基于java的LIB(SpringRestTemplate?),调用API,获取值,并将其存储在某个地方(上下文?objectStore?),以便连接器可以访问它们

有道理吗?还有其他想法吗


谢谢

mmm您可以创建一个类,该类将在启动时创建属性,并在该类中通过http请求获取API属性。示例如下:

 public class PropertyInit implements InitializingBean,FactoryBean {

    private Properties props = new Properties();

    @Override
    public Object getObject() throws Exception {
        return props;
    }

    @Override
    public Class getObjectType() {
        return Properties.class;
    }
 }
现在,您应该能够使用以下内容加载此属性类:

  <context:property-placeholder properties-ref="propertyInit"/>


希望你喜欢这个主意。我在以前的项目中使用了这种方法。

mmm您可以创建一个类,该类将在启动时创建属性,并在该类中通过http请求获取API属性。示例如下:

 public class PropertyInit implements InitializingBean,FactoryBean {

    private Properties props = new Properties();

    @Override
    public Object getObject() throws Exception {
        return props;
    }

    @Override
    public Class getObjectType() {
        return Properties.class;
    }
 }
现在,您应该能够使用以下内容加载此属性类:

  <context:property-placeholder properties-ref="propertyInit"/>


希望你喜欢这个主意。我在以前的一个项目中使用了这种方法。

我想首先给你一个强烈的警告。如果您沿着这条路走下去,那么您就有可能以非常奇怪的方式破坏您的应用程序,因为如果任何其他组件依赖于此组件,那么您在启动时将拥有动态组件,您将破坏它们,并且您应该考虑是否有其他方法来实现此行为,而不是使用属性

也就是说,实现这一点的方法是使用代理模式,这是在组件属性发生更改时重新创建的组件的代理。因此,您需要创建一个扩展
断路器
的类,该类封装了
断路器
的实例,并在其属性更改时重新创建该实例。这些属性不能在代理类之外使用,因为其他组件可能在启动时读取这些属性,然后不刷新。您必须记住,任何可能直接或间接访问这些属性的内容都不能在初始化阶段执行,否则应用程序将断开


值得一看的是SpringCloudConfig,它允许您拥有一个属性服务器,然后您的所有应用程序都可以在运行时在这些属性发生更改时热重新加载这些属性。如果SpringCloud得到支持,我不确定您是否可以在Mule中走这条路,但知道它的存在是件好事。

我想首先给您一个强烈的警告。如果您沿着这条路走下去,那么您就有可能以非常奇怪的方式破坏您的应用程序,因为如果任何其他组件依赖于此组件,那么您在启动时将拥有动态组件,您将破坏它们,并且您应该考虑是否有其他方法来实现此行为,而不是使用属性

也就是说,实现这一点的方法是使用代理模式,这是在组件属性发生更改时重新创建的组件的代理。因此,您需要创建一个扩展
断路器
的类,该类封装了
断路器
的实例,并在其属性更改时重新创建该实例。这些属性不能在代理类之外使用,因为其他组件可能在启动时读取这些属性,然后不刷新。您必须记住,任何可能直接或间接访问这些属性的内容都不能在初始化阶段执行,否则应用程序将断开


值得一看的是SpringCloudConfig,它允许您拥有一个属性服务器,然后您的所有应用程序都可以在运行时在这些属性发生更改时热重新加载这些属性。不确定如果SpringCloud得到支持,您是否可以在Mule中走这条路,但知道它的存在是件好事。

非常感谢。我会调查所有可能的方法!谢谢。我会调查所有可能的方法!