Akka Config Lib的简单使用

Akka Config Lib的简单使用


akka框架中使用该库配置akka,该项目地址为https://github.com/typesafehub/config


首先在classpath下定义文件为:

complex1.conf

complex-app {
  something = "hello world"

  # here we want a simple-lib-context unique to our app
  # which can be custom-configured. In code, we have to
  # pull out this subtree and pass it to simple-lib.
  simple-lib-context = {
    simple-lib {
      foo = "hello world complex1 foo"
      whatever = "hello world complex1 whatever"
    }
  }
}

使用如下方式解析这个文件,

package com.usoft6;

import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
import com.usoft3.SystemSettingDemo;


/**
 * Created by liyanxin on 2015/1/13.
 */
public class TypesafeConfigDemo {

    public static void main(String args[]) {
        // "config1" is just an example of using a file other than
        // application.conf
        // config1是在classpath路径下的配置文件名,该文件类型是conf文件类型
        Config config1 = ConfigFactory.load("complex1");

        // use the config ourselves
        System.out.println(config1.getString("complex-app.something"));
        System.out.println(config1.getString("complex-app.simple-lib-context.simple-lib.foo"));
        System.out.println(config1.getString("complex-app.simple-lib-context.simple-lib.whatever"));


        // ConfigFactory.parseString使用parseString直接解析
        Config config2 = ConfigFactory.parseString("akka.loggers = \"akka.testkit.TestEventListener\"");
        System.out.println(config2.getString("akka.loggers"));


        // 使用parseString 直接解析json字符串
        Config config3 = ConfigFactory.parseString("{\"a\":\"b\", \"c\":\"d\"}");
        System.out.println(config3.getString("a"));
        System.out.println(config3.getString("c"));
    }
}


如上,还可以在定义json字符串,直接用typesafe config lib 解析为config对象。


withFallback合并两个配置树

如下,在classpath下定义两个配置文件,

complex1.conf

complex-app {
  something = "hello world"

  # here we want a simple-lib-context unique to our app
  # which can be custom-configured. In code, we have to
  # pull out this subtree and pass it to simple-lib.
  simple-lib-context = {
    simple-lib {
      foo = "hello world complex1 foo"
      whatever = "hello world complex1 whatever"
    }
  }
}

complex2.conf

complex-app {
  something = "hello world typesafe conf"
}

simple-lib.foo = "hello world foo"
simple-lib.whatever = "hello world whatever"

如何合并这两个配置文件,如下,

package com.usoft6;

import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;

/**
 * Created by liyanxin on 2015/1/13.
 */
public class WithFallBackDemo {

    public static void main(String args[]) {

        Config firstConfig = ConfigFactory.load("complex1.conf");
        Config secondConfig = ConfigFactory.load("complex2.conf");
        //a.withFallback(b)  a和b合并,如果有相同的key,以a为准
        Config finalConfig = firstConfig.withFallback(secondConfig);
        System.out.println(finalConfig.getString("complex-app.something")); //hello world
        System.out.println("simple-lib.foo"); //这个配置项是在complex2.conf中的
    }
}

运行结果,

hello world

simple-lib.foo


withOnlyPath取指定Path下的配置项

同上定义的两个conf配置文件,如下代码示例,

package com.usoft6;

import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;

/**
 * Created by liyanxin on 2015/1/13.
 */
public class WithOnlyPathDemo {

    public static void main(String args[]) {

        Config firstConfig = ConfigFactory.load("complex1.conf");
        Config secondConfig = ConfigFactory.load("complex2.conf");
        //a.withFallback(b)  a和b合并,如果有相同的key,以a为准
        Config finalConfig = firstConfig.withOnlyPath("complex-app.simple-lib-context").withFallback(secondConfig);
        System.out.println(finalConfig.getString("complex-app.something")); //hello world
        System.out.println("simple-lib.foo"); //这个配置项是在complex2.conf中的
    }
}

运行结果,

hello world typesafe conf

simple-lib.foo

其他api请参照文档

==============END==============

你可能感兴趣的:(Akka Config Lib的简单使用)