我使用JAXB作为一种简单的方法来配置我的应用程序,并在启动时验证配置参数。这在大多数情况下都很有效。现在我想让我的配置更灵活一点,我想知道如何使用可互换的元素/对象:
示例(dev环境):
<email-gateway user="abc" pass="123456">
<server-list>
<server name="lorem"/>
<server name="ipsum"/>
</server-list>
</email-gateway>示例(生产):
<email-gateway user="abc" pass="123456">
<dns-lookup name="gateway.server" type="MX" />
</email-gateway>示例(产品扩展):
<email-gateway user="abc" pass="123456">
<round-robin>
<dns-lookup name="gateway.server" type="MX" />
</round-robin>
</email-gateway>Java代码(简化):
public class EmailGateway {
@XmlAttribute(name="user")
private String _user;
@XmlAttribute(name="pass")
private String _pass;
@XmlElement(name="server-list")
private ServerList _serverList;
boolean sendMail(String to, String subject, String body) {
for (Server server : _serverList.servers()) {
if( server.sendMail(_user, _pass, to, subject, body) ) {
return true;
}
}
return false;
}
}我们的想法是为开发环境设置一个简单的(固定的)设置,而生产环境需要一些灵活性。因为服务器列表可以更改,所以应该自动检索它。
更好的是第二种方法。<round-robin>将负责每次从列表中返回一个不同的服务器,以避免过度使用相同的服务器(主要是第一个)。
由于EmailGateway类不需要知道ServerList的实现,因此我希望通过仅更改配置XML来使其更加灵活。否则,当我使用不同的算法来检索服务器列表时(例如,web服务或类似JNDI lookup的东西),我将不得不使用ServerList更改所有类。
这个是可能的吗?
https://stackoverflow.com/questions/38292256
复制相似问题