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