《Akka学习笔记:ACTORS介绍》
《Akka学习笔记:Actor消息传递(1)》
《Akka学习笔记:Actor消息传递(2)》
《Akka学习笔记:日志》
《Akka学习笔记:测试Actors》
《Akka学习笔记:Actor消息处理-请求和响应(1) 》
《Akka学习笔记:Actor消息处理-请求和响应(2) 》
《Akka学习笔记:ActorSystem(配置)》
《Akka学习笔记:ActorSystem(调度)》
正如我们在前面看到的几篇文章,我们可以用ActorSystem类中的actorOf 方法来创建Actor。其实在ActorSystem中有大量的方法我们可以用,在这里我将介绍Configuration和Scheduling方法。让我们看一下ActorSystem类中的一些方法,如下图:
还记得在前面我们用于配置日志输出级别的application.conf文件吗?这个配置文件和Java中的.properties文件很类似,我们马上将看到通过这个配置文件可以配置dispatchers和mailboxes 等等。
所以当我们创建ActorSystem,用的是ActorSystem对象的apply方法,而该并没有注明任何的配置,它将在classpath中寻找 application.conf、 application.json和application.properties,并自动的加载他们。所以这段代码
val system=ActorSystem("UniversityMessagingSystem")
和
val system=ActorSystem("UniversityMessagingSystem", ConfigFactory.load())
功能相同。为了证明这一点,你可以到 ActorSystem.scala中看下apply方法:
def apply(name: String, config: Option[Config] = None, classLoader: Option[ClassLoader] = None, defaultExecutionContext: Option[ExecutionContext] = None): ActorSystem = { val cl = classLoader.getOrElse(findClassLoader()) val appConfig = config.getOrElse(ConfigFactory.load(cl)) new ActorSystemImpl(name, appConfig, cl, defaultExecutionContext).start() }
A、重载默认的配置
如果你不喜欢用application.conf,或者想拥有你自己的配置文件。你可以通过重载来传递你自己的配置,而不是从classpat来获取。ConfigFactory.parseString就是一种方法:
val actorSystem=ActorSystem("UniversityMessageSystem", ConfigFactory.parseString("""akka.loggers = ["akka.testkit.TestEventListener"]"""))
或者在你的测试用例用法如下
class TeacherTestLogListener extends TestKit(ActorSystem("UniversityMessageSystem", ConfigFactory.parseString("""akka.loggers = ["akka.testkit.TestEventListener"]"""))) with WordSpecLike with MustMatchers with BeforeAndAfterAll {
当然,你也可以用 ConfigFactory.load来实现
val system = ActorSystem("UniversityMessageSystem", ConfigFactory.load("uat-application.conf"))
如果你想在运行的时候获取你自己的配置参数,你可以通过下面的API获取
val system=ActorSystem("UniversityMessageSystem", ConfigFactory.parseString("""akka.loggers = ["akka.testkit.TestEventListener"]""")) println (system.settings.config.getValue("akka.loggers")) // Results in > SimpleConfigList(["akka.testkit.TestEventListener"])
B、扩展默认的配置
除了重载,你也可以用Config提供的withFallback方法来来扩展默认的配置,比如说你的application.conf文件配置看起来如下
akka{ loggers = ["akka.event.slf4j.Slf4jLogger"] loglevel = DEBUG arun="hello" }
而你决定重载 akka.loggers属性,比如:
val config=ConfigFactory.parseString("""akka.loggers = ["akka.testkit.TestEventListener"]""") val system=ActorSystem("UniversityMessageSystem", config.withFallback(ConfigFactory.load()))
最后你将合并两个地方的配置:
//> ConfigString("hello") println (system.settings.config.getValue("akka.arun")) //> SimpleConfigList(["akka.testkit.TestEventListener"]) println (system.settings.config.getValue("akka.loggers"))
重要的事项
需要注意这里的falling back的顺序:一部分是默认的;一部分是扩展的。记住,你必须对默认的配置进行fall back。所以
config.withFallback(ConfigFactory.load())
可以工作,但是
ConfigFactory.load().withFallback(config)
不可以。
本博客文章除特别声明,全部都是原创!原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【Akka学习笔记:ActorSystem(配置)】(https://www.iteblog.com/archives/1164.html)