我正在使用Play 2.4.我想用我自己的类替换默认路由器,使用新的动态依赖注入播放功能.这样做的步骤是什么?
在Play 2.4中,覆盖ApplicationLoader中的builder方法或在Abstract模块中实现EagerBinding将替换现有的play 2.3 GlobalSettings onStart.
但是在onStart方法2.3中,您的应用程序已经开始加载所有插件/依赖项.你可以在游戏2.4中做同样的事情,即在应用程序启动后运行一段代码.
在我的情况下,Slick要求应用程序在它可以访问数据库之前已经启动.
谢谢
尝试在Play Framework 2.4.2 Scala中安排这样的任务,但没有运气:
import akka.actor.Actor
import play.api.libs.concurrent.Akka
import scala.concurrent.duration._
import play.api.Play.current
import scala.concurrent.ExecutionContext.Implicits.global
class Scheduler extends Actor {
override def preStart() {
val dbupdate = Akka.system.scheduler.schedule(
0.microseconds, 5.minutes, self, "update")
val pictureClean = Akka.system.scheduler.schedule(
0.microseconds, 30.minutes, self, "clean")
}
def receive = {
case "update" => updateDB()
case "clean" => clean()
}
def updateDB(): Unit ={
Logger.debug("updates running")
}
def clean(): Unit ={
Logger.debug("cleanup running")
}
}
Run Code Online (Sandbox Code Playgroud)
控制台中没有打印任何内容.我做错了什么?
我有一个java play框架2.4.x Web应用程序,提供JSON/HTTP API.当我运行我的前端HTML/JS file:///Users/nize/tmp/index.html
在http://localhost:9000
chrome show上调用API时
XMLHttpRequest cannot load http://localhost:9000.
No 'Access-Control-Allow-Origin' header is present
on the requested resource. Origin 'null' is therefore
not allowed access. The response had HTTP status code 403.
Run Code Online (Sandbox Code Playgroud)
我已根据Play Framework 2.4.x CORS文档中的说明配置了Web应用程序:
build.sbt
Filters.java
到项目的根目录(也尝试过/app
)添加以下节到 application.conf
play.filters.cors {allowedOrigins = ["*"," http:// localhost "] #allowedHttpMethods = ["GET","POST"] #allowedHttpHeaders = ["Accept"] #preflightMaxAge = 3 days}
我错过了什么?
编辑: 症状看起来与其他非常相似的stackoverflow帖子相同或类似.通过重新配置计算机上安装的Cisco AnyConnect VPN解决了该问题.但是,我没有安装该软件.
我的播放应用程序是2.4.2.在开发人员模式中,我曾经使用Source.fromFile("./ public/files/abc.json")从后端控制器的公用文件夹中读取文件
当我将应用程序转换为生产模式时,我收到了File Not Found Exceptions.我发现公用文件夹在生产模式下打包在资产jar中.我能做什么才能在开发和生产模式下工作?
我正在尝试Play 2.4.2 for Scala,我不清楚控制器是应该定义为类还是单例.文档说明:
Controller只不过是一个生成Action值的单例对象.
但是代码示例显示:
class Application extends Controller { ... }
Run Code Online (Sandbox Code Playgroud)
为了进一步复杂化,如果我定义一个类,intellij会给我一个警告:
但是,如果我使用单例,我会收到编译错误(但没有警告):
package controllers
import play.api._
import play.api.mvc._
object Application extends Controller { ... }
Run Code Online (Sandbox Code Playgroud)
错误:(6,-1)播放2编译器:/ Users/Toby/IdeaProjects/play-scala/conf/routes:6:type应用程序不是包控制器的成员
哪种方法是正确的?
我将Play项目从版本2.3.4迁移到2.4.2.这些项目使用JPA(Hibernate)和Evolutions.我有一个最初的Evolutions SQL脚本,它用一些示例数据填充数据库.此脚本现在不再起作用,因为Evolutions脚本现在在Hibernate生成表之前执行,这显然会导致错误.这是一个理想的行为吗?有没有办法改变执行顺序?
hibernate jpa playframework playframework-evolutions playframework-2.4
在我的build.sbt中我有
routesImport += "play.api.mvc.PathBindable.bindableUUID"
Run Code Online (Sandbox Code Playgroud)
在我的路线我有:
GET /groups/:id controllers.GroupController.get(id)
Run Code Online (Sandbox Code Playgroud)
在我的控制器中我有
class GroupController { ....
def get (id: UUID)
Run Code Online (Sandbox Code Playgroud)
我对上述路线收到以下错误
type mismatch;
found : String
required: java.util.UUID
Run Code Online (Sandbox Code Playgroud)
如何在Play中的路径文件中的路径中使用uuid.我正在使用游戏2.4.2 - scala 2.11.7
我按照戏剧描述如何使用演员:https://www.playframework.com/documentation/2.4.x/ScalaAkka他们建议如下:
@Singleton
class Application @Inject() (system: ActorSystem) extends Controller {
val helloActor = system.actorOf(HelloActor.props, "hello-actor")
//...
}
Run Code Online (Sandbox Code Playgroud)
但这会导致:
play.sbt.PlayExceptions$CompilationException: Compilation error[trait Singleton is abstract; cannot be instantiated]
at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na]
at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na]
at scala.Option.map(Option.scala:145) ~[scala-library-2.11.6.jar:na]
at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:49) ~[na:na]
at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:44) ~[na:na]
at scala.Option.map(Option.scala:145) ~[scala-library-2.11.6.jar:na]
at play.sbt.run.PlayReload$.taskFailureHandler(PlayReload.scala:44) ~[na:na]
at play.sbt.run.PlayReload$.compileFailure(PlayReload.scala:40) ~[na:na]
at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17) ~[na:na]
at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17) ~[na:na]
Run Code Online (Sandbox Code Playgroud)
Tos看到我做了什么或跟着做了什么:https://github.com/dataplayground/playground
将@Singleton
导线移至:
could not find implicit value for parameter timeout: akka.util.Timeout
Run Code Online (Sandbox Code Playgroud)
这是代码:
implicit …
Run Code Online (Sandbox Code Playgroud) 玩2.4应用程序,使用服务类的依赖注入.
我发现当被测试的服务类具有多个注入依赖项时,Specs2会发生阻塞.它失败了" 找不到类的构造函数...... "
$ test-only services.ReportServiceSpec
[error] Can't find a constructor for class services.ReportService
[error] Error: Total 1, Failed 0, Errors 1, Passed 0
[error] Error during tests:
[error] services.ReportServiceSpec
[error] (test:testOnly) sbt.TestsFailedException: Tests unsuccessful
[error] Total time: 2 s, completed Dec 8, 2015 5:24:34 PM
Run Code Online (Sandbox Code Playgroud)
生产代码,剥离到最低限度以重现此问题:
package services
import javax.inject.Inject
class ReportService @Inject()(userService: UserService, supportService: SupportService) {
// ...
}
class UserService {
// ...
}
class SupportService {
// ...
}
Run Code Online (Sandbox Code Playgroud)
测试代码:
package …
Run Code Online (Sandbox Code Playgroud) dependency-injection scala playframework specs2 playframework-2.4