我有兴趣将Actors注入到bean中,而actor将由spring创建。另外,我正在寻找自定义Akka配置文件路径的方法。
我的项目使用Java 7和spring 3.2.5,akka版本是2.3.7。
我阅读了一些文档和指南,指示在spring bean配置文件中创建bean定义,如下所示:
<bean id="system-actor" class="akka.actor.ActorSystem" factory-method="create" destroy-method="shutdown" scope="singleton">
<constructor-arg value="MyApp" />
</bean>
弹簧根据默认配置成功创建的系统actor。 问题:
我想根据 /WEB-INF/application.conf 文件初始化系统actor,我添加了-Dconfig.trace = loads系统属性以调试配置加载,这是输出:
从类加载器WebappClassLoader加载配置 上下文:/ MY-APP 委托:假 库: 的 / WEB-INF /类/ ----------&GT;父类加载器: org.apache.catalina.loader.StandardClassLoader@992f73 但是没有名为application.conf的资源 异常加载application.conf:java.io.IOException:在classpath上找不到资源:application.conf 从类加载器WebappClassLoader加载配置 上下文:/ MY-APP 委托:假 库: 的 / WEB-INF /类/ ----------&GT;父类加载器: org.apache.catalina.loader.StandardClassLoader@992f73 但是没有名为application.json的资源 异常加载application.json:java.io.IOException:在类路径上找不到资源:application.json 从类加载器WebappClassLoader加载配置 上下文:/ MY-APP 委托:假 库: 的 / WEB-INF /类/ ----------&GT;父类加载器: org.apache.catalina.loader.StandardClassLoader@992f73 但是没有名为application.properties的资源 异常加载application.properties:java.io.IOException:在类路径上找不到资源:application.properties 没有找到任何扩展名的“应用程序”(.conf,.json,.properties);但是'申请'被允许丢失。应在上面记录加载尝试的例外情况。 从URL jar加载配置:文件:/var/work/MY-APP/jakarta-tomcat/webapps/MY-APP/WEB-INF/lib/akka-actor_2.10-2.3.7.jar!/reference.conf类加载器WebappClassLoader 上下文:/ MY-APP 委托:假 库: 的 / WEB-INF /类/ ----------&GT;父类加载器: org.apache.catalina.loader.StandardClassLoader@992f73
有没有办法将此路径传递给系统actor bean?
有一种方法可以在spring中创建actor bean而不是注入系统actor并使用system.actorOf(Props.create(MyActor.class), "name");
吗?详细的例子会有所帮助。
答案 0 :(得分:0)
Q1
您明确定义了conf文件的存储位置,默认情况下扫描根类路径目录WEB-INF/classes
-Dconfig.resource=/dev.conf
Q2
按照activator-akka-java-spring中提供的模式,您可以使用该存储库中的代码或使用您自己的自定义逻辑对其进行自定义。 (迟早你会理解为什么需要自定义它)
您需要记住,扩展需要使用ctx
SpringExtProvider.get(system).initialize(applicationContext);
然后你可以根据需要包装它,处理简单的actor创建:
ActorRef counter = system.actorOf(
SpringExtProvider.get(system).props("quartz"), "quartz");
甚至更复杂的单身人士案例:
ActorRef quartzCoordinator = getContext().actorOf(ClusterSingletonManager.defaultProps(SpringExtProviderget(getContext().system()).props("quartz"), "quartz",
PoisonPill.getInstance(), "core"), "coordinator");
Q3