当我正在寻找具有给定分支状态的徽章时,我正在使用branchURL中的参数.我想对指向分支的最新构建或构建历史的链接执行相同的操作.
如果目前无法做到这一点,我会非常乐意提供这样的功能.
我有一张桌子:
trait Schema {
val db: Database
class CoffeeTable(tag: Tag) extends Table[Coffee](tag, "coffees") {
def from = column[String]("from")
def kind = column[String]("kind")
def sold = column[Boolean]("sold")
}
protected val coffees = TableQuery[Coffee]
}
Run Code Online (Sandbox Code Playgroud)
我想更新已售出的条目.这是我最终得到的方法:
def markAsSold(soldCoffees: Seq[Coffee]): Future[Int] = {
val cmd = coffees
.filter { coffee =>
soldCoffees
.map(sc => coffee.from === sc.from && coffee.kind === sc.kind)
.reduceLeftOption(_ || _)
.getOrElse(LiteralColumn(false))
}
.map(coffee => coffee.sold)
.update(true)
db.db.stream(cmd)
}
Run Code Online (Sandbox Code Playgroud)
虽然它适用于一个小型soldCoffee集合,但它输入了数百个元素时严重失败:
java.lang.StackOverflowError
at slick.ast.TypeUtil$$colon$at$.unapply(Type.scala:325)
at slick.jdbc.JdbcStatementBuilderComponent$QueryBuilder.expr(JdbcStatementBuilderComponent.scala:311)
at slick.jdbc.H2Profile$QueryBuilder.expr(H2Profile.scala:99)
at …Run Code Online (Sandbox Code Playgroud) 我在Spock中实现的规范的性能存在一些问题-特别是执行时间。在深入研究问题之后,我注意到它与设置规范有某种联系-我并不是setup()特别指方法。
在发现之后,我将@Shared注释添加到规范中声明的所有字段中,并且注释的运行速度比以前快2倍。于是,我想,那性能问题可能与ConcurrentHashMap或random*方法(从公地lang3),但事实并非如此。
最后,我无奈地用以下方式修饰了规范中的所有字段:
class EntryFacadeSpec extends Specification {
static {
println(System.currentTimeMillis())
}
@Shared
def o = new Object()
static {
println(System.currentTimeMillis())
}
@Shared
private salesEntries = new InMemorySalesEntryRepository()
static {
println(System.currentTimeMillis())
}
@Shared
private purchaseEntries = new InMemoryPurchaseEntryRepository()
static {
println(System.currentTimeMillis())
}
...
Run Code Online (Sandbox Code Playgroud)
有趣的是,无论哪个字段被声明为第一个字段,初始化该字段都需要花费数百毫秒的时间:
1542801494583
1542801495045
1542801495045
1542801495045
1542801495045
1542801495045
1542801495045
1542801495045
1542801495045
1542801495045
1542801495046
1542801495046
1542801495046
1542801495046
1542801495047
1542801495047
Run Code Online (Sandbox Code Playgroud)
有什么问题?如何节省这几百毫秒?