我想监视给定目录中的所有文件以进行更改,即更新的时间戳.这个用例对于使用文件组件的Camel来说似乎很自然,但我似乎找不到配置此行为的方法.
一个uri喜欢:
file:/some/directory
Run Code Online (Sandbox Code Playgroud)
将使用提供的目录中的文件,但将删除它们.
一个uri喜欢:
file:/some/directory?noop=true
Run Code Online (Sandbox Code Playgroud)
在添加每个文件或路由启动时消耗每个文件一次.
令人惊讶的是,没有一个选项
consumeOnChange=true
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法来监控文件更改而不是在使用后删除文件?
在2.9.0之前的Scala版本中,traits中的具体函数实现被编译为常规方法.从2.9.x开始,它们被编译为桥接方法.我试图找到这种变化背后的原因,因为它对许多流行的Java框架(如Spring和Jersey)的用户产生了负面影响.
请考虑以下Scala代码:
trait Speaks {
def speak() = {
println("woof")
}
}
class Dog extends Speaks {
def wag() = {
println("wag wag")
}
}
Run Code Online (Sandbox Code Playgroud)
当使用scalac版本2.8.1编译Dog类并使用javap进行反编译时,"speak"和"wag"函数的结果如下所示:
public void speak();
flags: ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: invokestatic #11 // Method Speaks$class.speak:(LSpeaks;)V
4: return
LineNumberTable:
line 7: 0
public void wag();
flags: ACC_PUBLIC
Code:
stack=2, locals=1, args_size=1
0: getstatic #18 // Field scala/Predef$.MODULE$:Lscala/Predef$;
3: ldc #20 // String wag wag
5: invokevirtual #24 // Method scala/Predef$.println:(Ljava/lang/Object;)V
8: return
LineNumberTable: …Run Code Online (Sandbox Code Playgroud) lift-json的文档表明我应该能够调用'values'来将我当前的JObject结构作为一个vanilla Scala Map.这种方法对我不起作用,因为'values'的返回类型是json.Values而不是Map,如示例所示.我究竟做错了什么?是否需要隐式导入才能完成此转换?
scala> val json = parse("""{"k1":"v1","k2":"v2"}""")
json: net.liftweb.json.package.JValue = JObject(List(JField(k1,JString(v1)), JField(k2,JString(v2))))
scala> json.values
res4: json.Values = Map((k1,v1), (k2,v2))
scala> res4.get("k1")
<console>:18: error: value get is not a member of json.Values
res4.get("k1")
Run Code Online (Sandbox Code Playgroud)