美文网首页
分享我工作中制定配置文件的习惯

分享我工作中制定配置文件的习惯

作者: 丁庆华 | 来源:发表于2017-11-01 18:58 被阅读0次

工作中少不了要制定各种各样的配置文件,这里和大家分享一下工作中我是如何制定配置文件的,这是个人习惯,在我在的项目组中目前要定义配置文件都安装这个步骤,效果还不错。

如我们现在有一个这样的配置需求,顶层是Server,有port和shutdown2个属性,包含一个service集合,service对象有name一个属性,并包含一个connector集合,connector对象有port和protocol2个属性。

我一上来不会去考虑是用xml还是json还是数据库配置,我会第一步写好对应的配置bean。如上面的需求,就写3个bean。bean和bean之间的包含关系要体现出来。(使用了lombok)

@Data
@XStreamAlias("Server")
public class Server {

    @XStreamAsAttribute
    private int port = 8005;

    @XStreamAsAttribute
    private String shutDown = "SHUTDOWN";

    private List<Service> services;

}

@Data
@XStreamAlias("Service")
public class Service {

    @XStreamAsAttribute
    private String name;

    private List<Connector> connectors;
}

@Data
@XStreamAlias("Connector")
public class Connector {
    @XStreamAsAttribute
    private int port = 8080;
    
    @XStreamAsAttribute
    private String protocol = "HTTP/1.1";
}

写好后,我会编写其他的业务代码,整个流程跑完整了,配置的类型,字段不需要修改了,最后使用XStream生成xml文件,这就是最后交互的配置文件。

public class XMLConfig {
    public static String toXML(Object obj) {
        XStream xstream = new XStream();

        xstream.autodetectAnnotations(true);
        // xstream.processAnnotations(Server.class);

        return xstream.toXML(obj);
    }

    public static <T> T toBean(String xml, Class<T> cls) {
        XStream xstream = new XStream();

        xstream.processAnnotations(cls);
        T obj = (T) xstream.fromXML(xml);

        return obj;
    }

    public static <T> T toBean(File file, Class<T> cls) {
        XStream xstream = new XStream();

        xstream.processAnnotations(cls);
        T obj = (T) xstream.fromXML(file);

        return obj;
    }
}

最后定稿的配置文件(就是这个 String xml = XMLConfig.toXML(server)):

<Server port="8005" shutDown="SHUTDOWN">
  <services>
    <Service name="Kitty">
      <connectors>
        <Connector port="8088" protocol="HTTP/1.1"/>
        <Connector port="8089" protocol="AJP"/>
      </connectors>
    </Service>
  </services>
</Server>

附上自己的junit

public class XMLConfigTest {
    @Test
    public void test() {
        Server server = createTestBean();

        String xml = XMLConfig.toXML(server);
   
        System.out.println(xml);
    }
    
    @Test
    public void testRead() {
        String str = 
        "<Server port=\"8005\" shutDown=\"SHUTDOWN\">" + 
        "  <services>" + 
        "    <Service  name=\"Kitty\">" + 
        "      <connectors>" + 
        "        <Connector port=\"8088\" protocol=\"HTTP/1.1\"/>" + 
        "        <Connector port=\"8089\" protocol=\"AJP\"/>" + 
        "      </connectors>" + 
        "    </Service>" + 
        "  </services>" + 
        "</Server>";
        
        Server server = createTestBean();
        Server server2 = XMLConfig.toBean(str, Server.class);
        
        assertEquals(server, server2);
    }
    
    private Server createTestBean() {
        Server server = new Server();
        List<Service> services = new ArrayList<Service>();
        server.setServices(services);

        Service service = new Service();
        services.add(service);

        service.setName("Kitty");
        
        List<Connector> connectors = new ArrayList<Connector>();
        service.setConnectors(connectors);

        Connector connectorhttp11 = new Connector();

        connectorhttp11.setPort(8088);
        connectorhttp11.setProtocol("HTTP/1.1");

        connectors.add(connectorhttp11);

        Connector connectorAJP = new Connector();

        connectorAJP.setPort(8089);
        connectorAJP.setProtocol("AJP");

        connectors.add(connectorAJP);
        
        return server;
    }
}

就是说,我配置文件是功能完成后期才完成的,如果项目一开始就指定了配置文件的格式,中途少不了各种修改。我的xml是配置相关的bean完全测试通过之后,用xstream生成xml,读取的时候也是用xstream直接读成对象,完全不需要关注xml的读写。

还有最主要的是,我有中间的这一层配置的bean,这是我觉得最重要的。有了这层bean之后,就相当于有了一个中介。你不需要知道配置是哪里来的,是xml还是json还是数据库,修改很灵活,同时代码不需要有读取xml的任何代码,可读性相当的好。写过代码的同学都应该知道,业务逻辑代码里面混杂着从xml里面读取配置项的代码,其实挺难看的。

这里是有的技术有xstream,还使用了lombok,但这些都不是关键,关键是有配置的bean这一层中介,整个过程不需要和xml打任何交道,后面要改成json还是分分钟的时候。我觉得代码好坏就在于此。千万业务代码里面不要和读取配置的代码耦合在一起。切记!

这就是我今天给大家分享的。我个人非常喜欢的编码方式,使用简单,效果也很好。其实没有什么技术,技术一说都懂,但我觉得技术外的习惯才是最重要的!欢迎讨论。

进阶篇:配置规范
本文原著作者:晓风轻
原文链接:
版权归作者所有,转载请注明出处

相关文章

  • 配置规范

    工作中少不了要制定各种各样的配置文件,这里和大家分享一下工作中我是如何制定配置文件的,这是个人习惯,结合强大的sp...

  • 分享我工作中制定配置文件的习惯

    工作中少不了要制定各种各样的配置文件,这里和大家分享一下工作中我是如何制定配置文件的,这是个人习惯,在我在的项目组...

  • 制定我的微习惯

    有念想就有期待,当念想落空,我们就会失落,怨愤,烦躁。而不追求高目标,不抱期待,就不会情绪反复,不会起抗拒心。让想...

  • 今日记录

    今日分享:工作中需要一个共识:善于制定策略的,未必善于落地,但必须重视落地。工作中需要彼此配合,与“接力赛”何其相...

  • node自动重启项目工具nodemon

    为什么要用nodemon 实际工作中,当我们改修项目的配置文件时,需要重新启动服务。由于用习惯了webpack的h...

  • 习惯启程

    一、分享给予我的三点触动 对于习惯的本质有一个系统的了解。以往自己制定的习惯计划因为各种原因搁浅,也尝试分...

  • 制定微习惯

    小的时候高兴了、不高兴了都爱写写,小时候看到鲁迅、冰心等大作家都有笔名,也曾幻想有朝一日成为了作家,得提前...

  • 微习惯制定

  • 分享一些工作中的习惯~

    对于复杂的代码逻辑,添加清楚的注释 写代码的时候,是没有必要写太多的注释的,好的方法变量命名就是最好的注释。 但是...

  • 我的Tasker配置文件分享

    导入和使用方法 去除“应用在上层”通知 (导入后重启手机。所需插件:AutoNotification)

网友评论

      本文标题:分享我工作中制定配置文件的习惯

      本文链接:https://www.haomeiwen.com/subject/aknbpxtx.html