小编cch*_*tep的帖子

带字符串插值的Anorm LIKE子句

是否可以在Anorm中使用LIKE子句和字符串插值?

// e.g. this doesn't work
SQL"SELECT * FROM users WHERE last_name LIKE $lastName%".as(userParser.*)
Run Code Online (Sandbox Code Playgroud)

更新:我需要SQL语句,选择姓氏以给定字母开头的所有用户,例如:

SELECT * FROM users WHERE last_name LIKE 'Smi%';
Run Code Online (Sandbox Code Playgroud)

scala anorm

5
推荐指数
1
解决办法
721
查看次数

Play Framework范本中的有界通用参数

如何在Play Framework 2.3 Java项目的Scala模板中使用有界的通用参数?

我目前有类似的东西:

@(entities: List[_ <: Entity], currentEntity: Entity)

<ul>
    @for(entity <- entities) {
        @if(currentEntity.equals(entity)) {
            <li><strong>@entity</strong></li>
        } else {
            <li>@entity</li>
        }
    }
</ul>
Run Code Online (Sandbox Code Playgroud)

但是,我可以在entities和中使用不同类型的实体来称呼它,currentEntity这不是很好。我想做类似的事情:

@[T <: Entity](entities: List[T], currentEntity: T)
...
Run Code Online (Sandbox Code Playgroud)

但这给了我Invalid '@' symbol一个编译错误。

scala playframework-2.3

5
推荐指数
1
解决办法
492
查看次数

如果我们使用特定的数据源,如何在Play Framework(Scala,Scaldi)中注入数据库?

我想在我的play框架项目中使用Anorm作为DB库,将Scaldi作为DI.但是现在我无法注入数据库,因为在最新的游戏框架中,我们不能再使用DB.getConnection("datasource")了.

你们中的任何人都可以解释如何将NamedDatabase告知scaldi环境?

顺便说一句,这是我的代码snipet如何在Play scala中使用NamedDatabase.

class MembershipSqlStorage @Inject() (@NamedDatabase("membership") db: Database)
Run Code Online (Sandbox Code Playgroud)

它的工作原理.

谢谢

database dependency-injection playframework scaldi

5
推荐指数
1
解决办法
438
查看次数

com.datastax.driver.core.exceptions.BusyPoolException

每当我在Cassandra中的表中插入数据,超过1000并通过id获取数据时,它会抛出以下异常:

com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: localhost/127.0.0.1:9042 (com.datastax.driver.core.exceptions.BusyPoolException: [localhost/127.0.0.1] Pool is busy (no available connection and the queue has reached its max size 256)))
    at com.datastax.driver.core.RequestHandler.reportNoMoreHosts(RequestHandler.java:213)
    at com.datastax.driver.core.RequestHandler.access$1000(RequestHandler.java:49)
    at com.datastax.driver.core.RequestHandler$SpeculativeExecution.findNextHostAndQuery(RequestHandler.java:277)
    at com.datastax.driver.core.RequestHandler$SpeculativeExecution$1.onFailure(RequestHandler.java:340)
    at com.google.common.util.concurrent.Futures$6.run(Futures.java:1764)
    at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:456)
    at com.google.common.util.concurrent.Futures$ImmediateFuture.addListener(Futures.java:153)
    at com.google.common.util.concurrent.Futures.addCallback(Futures.java:1776)
    at com.google.common.util.concurrent.Futures.addCallback(Futures.java:1713)
    at com.datastax.driver.core.RequestHandler$SpeculativeExecution.query(RequestHandler.java:299)
    at com.datastax.driver.core.RequestHandler$SpeculativeExecution.findNextHostAndQuery(RequestHandler.java:274)
    at com.datastax.driver.core.RequestHandler.startNewExecution(RequestHandler.java:117)
    at com.datastax.driver.core.RequestHandler.sendRequest(RequestHandler.java:97)
    at com.datastax.driver.core.SessionManager.executeAsync(SessionManager.java:132)
    at com.outworkers.phantom.builder.query.CassandraOperations$class.scalaQueryStringToPromise(CassandraOperations.scala:67)
    at com.outworkers.phantom.builder.query.InsertQuery.scalaQueryStringToPromise(InsertQuery.scala:31)
    at com.outworkers.phantom.builder.query.CassandraOperations$class.scalaQueryStringExecuteToFuture(CassandraOperations.scala:31)
    at com.outworkers.phantom.builder.query.InsertQuery.scalaQueryStringExecuteToFuture(InsertQuery.scala:31)
    at com.outworkers.phantom.builder.query.ExecutableStatement$class.future(ExecutableQuery.scala:80)
    at com.outworkers.phantom.builder.query.InsertQuery.future(InsertQuery.scala:31)
    at nd.cluster.data.store.Points.upsert(Models.scala:114)
Run Code Online (Sandbox Code Playgroud)

我使用PoolingOptions解决了上述问题.

val poolingOptions = new PoolingOptions()
    .setConnectionsPerHost(HostDistance.LOCAL, 1, 200)
    .setMaxRequestsPerConnection(HostDistance.LOCAL, 256) …
Run Code Online (Sandbox Code Playgroud)

cassandra datastax

5
推荐指数
1
解决办法
4089
查看次数

我需要做什么才能移植 ReactiveMongo scala 以使用猫效果?

如果我想在诸如 http4s 之类的东西中使用 ReactiveMongo,我必须将 ReactiveMongo 返回的所有 Future 调用包装在 Cats IO 效果中,这样说是否正确?

概括地说,将 ReactiveMongo 合并到 http4s 中需要哪些步骤?

scala reactivemongo cats-effect

5
推荐指数
1
解决办法
107
查看次数

基本过滤器Play Framework 2中的访问请求主体

我是Scala的新手.正如https://www.playframework.com/documentation/2.3.x/ScalaHttpFilters中的play框架官方文档中所述:

Play提供了一个名为EssentialFilter的低级过滤器API,可让您完全访问请求正文.

但是没有任何方法可以访问requestHeader对象中的请求体.

import play.api.Logger
import play.api.mvc._
import play.api.libs.concurrent.Execution.Implicits.defaultContext

object LoggingFilter extends EssentialFilter {
  def apply(nextFilter: EssentialAction) = new EssentialAction {
    def apply(requestHeader: RequestHeader) = {
      val startTime = System.currentTimeMillis
      nextFilter(requestHeader).map { result =>
        val endTime = System.currentTimeMillis
        val requestTime = endTime - startTime
        Logger.info(s"${requestHeader.method} ${requestHeader.uri}" +
          s" took ${requestTime}ms and returned ${result.header.status}")
        result.withHeaders("Request-Time" -> requestTime.toString)
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

scala playframework-2.3

4
推荐指数
1
解决办法
2523
查看次数

如何以 ISO 格式而不是 Long [Play、Scala 和 ReactiveMongo] 在 MongoDB 中存储日期?

我正在尝试使用以下方式在 MongoDB 中插入日期:

collection.insert(Json.obj("user"->"abc", "joined_date" -> DateTime.now))
Run Code Online (Sandbox Code Playgroud)

在数据库中:

   {                                                       
            "_id" : ObjectId("5865d99718969bca6a09450f"),   
            "user" : "abc",                                 
            "joined_date" : NumberLong("1483069847066")     
    }  
Run Code Online (Sandbox Code Playgroud)

这里的问题是日期以长毫秒格式存储在数据库中,但我想要的是它以 ISO 日期格式存储。

我在 MongoShell 中尝试保存相同的数据db.example.insert({user:"abc", joined_date:new Date()}),结果如下:

{
        "_id" : ObjectId("5865d838a4f98c5bb83b1eb8"),
        "user" : "abc",
        "joined_date" : ISODate("2016-12-30T03:44:56.824Z")
}
Run Code Online (Sandbox Code Playgroud)

那么,如何使用 ReactiveMongo 在数据库中以 ISODate 格式存储日期?

scala mongodb playframework reactivemongo play-reactivemongo

4
推荐指数
1
解决办法
1776
查看次数

如何在Anorm中处理null

我有一个可以为空列的表,当查询空列时,它会抛出错误

 val row: List[(String,String)] = SQL("select top 10 Spare_Part part,Pricing_Category cat from Price_Point_Base")
                .as((str("part"))~ str("cat") map(flatten) *)
Run Code Online (Sandbox Code Playgroud)

我查看了链接 https://www.playframework.com/documentation/2.0/ScalaAnorm.

它只使用类似的东西来处理可空列

SQL("Select name,indepYear from Country")().map { row =>
  row[String]("name") -> row[Option[Int]]("indepYear")
}
Run Code Online (Sandbox Code Playgroud)

但由于str("part")比较紧凑row[String]("name"),所以我想尝试使用str("part"),但如何str("part")使用可空列?

scala anorm

3
推荐指数
1
解决办法
1365
查看次数

Scala中的工厂设计模式与案例类

我正在尝试使用随播对象上提供的apply方法在Scala中实现工厂设计模式.我有以下方法.

sealed trait MyType {
  def param: String
}

case class TypeA(param: String) extends MyType
case class TypeB(param: String, anotherParam: String) extends MyType 

object MyType {
  def apply(param: String): TypeA = ???
  def apply(param, anotherParam: String): TypeB = ???
}
Run Code Online (Sandbox Code Playgroud)

现在,我如何在创建TypeA或的实例时强制上述特征的调用者通过伴随对象进行操作TypeB

scala companion-object

3
推荐指数
1
解决办法
3364
查看次数

Play使用泛型类型参数写入

我有一个Processor看起来像这样的特征:

trait Processor[A] {
  def process(in: Seq[Byte]): Result[A]
}

trait Result[A]{
  val ok: Boolean
  val errorMessage: Option[String]
  val data: Option[A]
}
Run Code Online (Sandbox Code Playgroud)

具体实施:

class StringProc extends Processor[String] {
  def process(in: Seq[Byte]): StrResult
}

case class StrResult(...) extends Result[String]
object StrResult {
  implicit val writes = Json.writes[StrResult]
}
Run Code Online (Sandbox Code Playgroud)

当使用StringProc实例作为类型时Processor[String],process不出所料的返回类型Result[String]不是StrResult.不幸的是,Writes[StrResult]在这种情况下似乎没用:

找不到类型为Result [String]的Json序列化程序

我怎么能处理这种情况?

json scala playframework

3
推荐指数
1
解决办法
1291
查看次数