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