Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “我该怎么做?”;注入;Spring的结构化配置信息?_Java_Spring_Dependency Injection_Config - Fatal编程技术网

Java “我该怎么做?”;注入;Spring的结构化配置信息?

Java “我该怎么做?”;注入;Spring的结构化配置信息?,java,spring,dependency-injection,config,Java,Spring,Dependency Injection,Config,我有以下情况: 将有一个Java语言测试平台系统,由许多“服务”组成,这些服务通过相互传递消息进行协作。服务实现是通用的,即其中不包含特定的“业务逻辑”。出于测试床的目的,能够创建外部配置的各种服务集合(如果可能)非常重要 服务本身不知道存在任何其他服务。每个服务只需订阅它希望接收信息的主题,并发布它向任何等待的订阅者发送信息的主题。通过仔细配置,可以模拟数据流图 计划是通过提供配置信息来配置给定的服务实例,配置信息描述了设置订阅者(读卡器)和发布者(写卡器)所需的信息。配置信息可以包括与发布/

我有以下情况:

将有一个Java语言测试平台系统,由许多“服务”组成,这些服务通过相互传递消息进行协作。服务实现是通用的,即其中不包含特定的“业务逻辑”。出于测试床的目的,能够创建外部配置的各种服务集合(如果可能)非常重要

服务本身不知道存在任何其他服务。每个服务只需订阅它希望接收信息的主题,并发布它向任何等待的订阅者发送信息的主题。通过仔细配置,可以模拟数据流图

计划是通过提供配置信息来配置给定的服务实例,配置信息描述了设置订阅者(读卡器)和发布者(写卡器)所需的信息。配置信息可以包括与发布/订阅无关的其他属性

下面是一个可能的例子:

注意:选择XML作为示例仅仅是因为它很容易阅读,并且允许结构化数据

<service>
    <name>Service A</name>
    <service-id>service ID</service-id>

    <publish>
        <per-second>5</per-second>
        <topic>
            <name>Topic 1</name>
            <class>org.xyz.Topic1</class>
            <!-- override 5/sec rate -->
            <per-second>10</per-second>
        </topic>
        <topic>
            <name>Topic 2</name>
            <class>org.xyz.Topic2</class>
        </topic>
    </publish>

    <subscribe>
        <topic>
            <name>Topic 3</name>
            <class>org.xyz.Topic3</class>
        </topic>
    </subscribe>
</service>

<service>
    <name>Service B</name>
    <service-id>service ID</service-id>

    <publish>
        <per-second>30</per-second>
        <topic>
            <name>Topic 3</name>
            <class>org.xyz.Topic3</class>
        </topic>
    </publish>

    <subscribe>
        <topic>
            <name>Topic 2</name>
            <class>org.xyz.Topic2</class>
        </topic>
    </subscribe>
</service>

...

服务A
服务ID
5.
专题1
org.xyz.Topic1
10
专题2
org.xyz.Topic2
专题3
org.xyz.Topic3
服务B
服务ID
30
专题3
org.xyz.Topic3
专题2
org.xyz.Topic2
...
我想使用Spring框架来帮助配置这些服务注意:我对Spring非常陌生,目前正在阅读Spring in Action(和其他资料)来教育自己

我想知道的是:如何将配置信息“注入”到某种控制器或工厂中,然后使用它创建服务集合,并向它们提供必要的信息,以创建它们用于接收和发送消息的读卡器和写卡器

从我到目前为止所读到的内容来看,Spring对于依赖注入和“bean连接”似乎非常强大,但我对什么可以(和不能)做,以及如何做都不太了解

我不喜欢Spring是由Java还是XML配置的。我之所以使用XML,是因为它易于组合,允许数据结构化,而且似乎在任何地方都可以使用。如果以不同的方式指定配置更有意义,请告诉我


给定服务将如何处理事件(即接收特定消息)以可能发送消息“响应”或采取其他操作,这超出了本问题的范围。我正在研究如何做到这一点——主要是在基于规则的处理方面。如果有人有建议,我很乐意看一看。

制作如下配置文件:

some.paremeter=cool
some.other.parameter=awesome
命名为
myconfig.properties
。确保文件位于类路径中,然后在vm参数中包含
-Dspring.config.name=myconfig
;然后在xml中,您可以使用
${some.parameter}
等。特别是,将配置文件放入
/config/
将起作用

例如,下面是我的一个项目中使用spring配置的一个简单MongoClient:

<!--Mongo-->
<bean id="mongoClient" class="com.mongodb.MongoClient">
    <constructor-arg>
        <bean class="com.mongodb.MongoClientURI">
            <constructor-arg type="java.lang.String"
                             value="mongodb://${mongo.db.user}:${mongo.db.password}@${mongo.db.host}:${mongo.db.port}/${mongo.db.database}"/>
        </bean>
    </constructor-arg>
</bean>


这将使用属性文件作为变量信息。是否可以在属性文件中包含结构化信息?我认为您不能,这就是我使用XML的原因。取决于属性文件。您也可以使用yaml或json——请参阅文档。我是说,您可以使用纯文本属性文件来保存静态信息,比如表示参数的字符串。spring加载这些参数后,您可以按照自己的意愿将这些参数注入XML。只是好奇:XML甚至是一个选项吗?我个人在我的大多数项目中使用spring XML配置,而不是基于注释的配置(尽管注释是新学校)。是的,配置参数的主要方法之一是通过XML。对不起,我一定是把问题的措辞弄错了。您提到了“标准”Java属性文件形式的属性文件,或者JSON或YAML,以获取更多结构化配置信息。我想知道在这种情况下XML是否是一种选择?因此,Spring配置可以是XML或带注释的Java类,但是这个配置数据可以位于Spring配置引用的单独文件(JSON、YAML、XML?)中吗?