我是DynamoDB的新手,并尝试使用Transaction支持的示例场景.我正在使用dynamodb-transaction库中提供的相同实体.唯一的区别是我用散列键添加了一个范围键.这是表定义:
ItemId - >哈希键,字符串ItemName - >范围键,字符串@DynamoDBTable(tableName = "Item")
public static class ExampleItem {
private String itemId;
private String value;
private String itemName;
private Long version;
@DynamoDBHashKey(attributeName = "ItemId")
public String getItemId() {
return itemId;
}
public void setItemId(String itemId) {
this.itemId = itemId;
}
@DynamoDBRangeKey(attributeName="ItemName")
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value; …Run Code Online (Sandbox Code Playgroud) 我知道将JSON字符串转换为Map<String, String>通过的实现:
public <T1, T2> HashMap<T1, T2> getMapFromJson(String json, Class<T1> keyClazz, Class<T2> valueClazz) throws TMMIDConversionException {
if (StringUtils.isEmpty(json)) {
return null;
}
try {
ObjectMapper mapper = getObjectMapper();
HashMap<T1, T2> map = mapper.readValue(json, TypeFactory.defaultInstance().constructMapType(HashMap.class, keyClazz, valueClazz));
return map;
} catch (Exception e) {
Logger.error(e.getMessage(), e.getCause());
}
}
Run Code Online (Sandbox Code Playgroud)
但我无法扩展它以将我的JSON转换为Map<String, Set<String>>.显然,上面的方法失败了,因为它打破了Set项并放入列表中.需要一些帮助!! 谢谢
示例JSON字符串如下所示.这个JSOn必须转换为Map<String, Set<CustomClass>>.
{
"0": [
{
"cid": 100,
"itemId": 0,
"position": 0
}
],
"1": [
{
"cid": 100,
"itemId": 1,
"position": 0
} …Run Code Online (Sandbox Code Playgroud) 我可能会过度思考这个问题,但我只是写了代码:
try (InputStream in = ModelCodeGenerator.class.getClassLoader().getResourceAsStream("/model.java.txt"))
{
modelTemplate = new SimpleTemplate(CharStreams.toString(new InputStreamReader(in, "ascii")));
}
Run Code Online (Sandbox Code Playgroud)
这意味着InputStreamReader永远不会关闭(但在这种情况下,我们知道它的close方法只是关闭底层的InputStream.)
人们可以把它写成:
try (InputStreamReader reader = new InputStreamReader(...))
Run Code Online (Sandbox Code Playgroud)
但这似乎更糟糕.如果由于某种原因抛出InputStreamReader,则InputStream将永远不会被关闭,对吧?这是C++中的常见问题,其中构造函数调用其他构造函数.异常可能导致内存/资源泄漏.
这里有最好的做法吗?
Google Guava教程称可以使用Ticker测试缓存过期
根据我的理解,我可以用它来强制快速过期.我是对的吗?
但我试过以下代码,它没有用,有什么建议吗?
@Test
public void expireAfterWriteTestWithTicker() throws InterruptedException {
Ticker t = new Ticker() {
@Override
public long read() {
return TimeUnit.MILLISECONDS.toNanos(5);
}
};
//Use ticker to force expire in 5 millseconds
LoadingCache<String, String> cache = CacheBuilder.newBuilder()
.expireAfterWrite(20, TimeUnit.MINUTES).ticker(t).build(loader);
cache.getUnchecked("hello");
assertEquals(1, cache.size());
assertNotNull(cache.getIfPresent("hello"));
//sleep
Thread.sleep(10);
assertNull(cache.getIfPresent("hello")); //failed
}
Run Code Online (Sandbox Code Playgroud) 我一直试图弄清楚如何更新dynamoDB中的项目,但没有取得任何成功.
我知道如何添加和设置和删除项目但不更新.
这是我的代码:
dynamoDB.updateItem({
"TableName": "mytable",
"Key": {
"thing_ID": {"S": "0000"}
},
"UpdateExpression": "SET",
"ExpressionAttributeNames": {
"SessionID": ""
},
"ExpressionAttributeValues": {
"SessionID": {
"S": "maybe this works",
}
}
})
Run Code Online (Sandbox Code Playgroud) 我正在使用OkHttp 实现Server-Sent Events库.服务器发送事件的工作原理是保持与服务器的开放HTTP连接,"事件"可以在该服务器上流回客户端.连接仅在错误时关闭,或者客户端明确断开连接.
使用OkHttp实现此流式传输行为的最佳方法是什么?我试图做类似的事情:
response.body().source().readAll(new Sink() {
@Override
public void write(Buffer source, long byteCount) throws IOException {
Log.d(TAG, "write(): byteCount = "+byteCount);
}
@Override
public void flush() throws IOException {
Log.d(TAG, "flush()");
}
@Override
public Timeout timeout() {
return Timeout.NONE;
}
@Override
public void close() throws IOException {
Log.d(TAG, "close()");
}
});
Run Code Online (Sandbox Code Playgroud)
通过这种方法,我最终会看到日志消息write(),但有时可能需要很长时间(分钟).这让我觉得可能会有一些缓冲正在进行,我不会得到我的数据,直到刷新缓冲区.
我曾经用来curl验证服务器是否正常运行.该数据是被准时送到,我只是没有得到我的回调,当它到达.
我有经验OkHttp和Okio非常有限的,所以这是非常有可能的,我乱七八糟的东西了,或者忘记设置一些选项.任何帮助是极大的赞赏!:)
我使用 jenkins 流水线项目来构建我的基于 OpenEmbedded 的项目。我的声明性管道的节点包含
customWorkspace "/data/jenkins/oe/"
Run Code Online (Sandbox Code Playgroud)
Jenkins 实际上构建了一个更深的目录,在
/data/jenkins/oe/project-name/
Run Code Online (Sandbox Code Playgroud)
这不是问题。但是在我在开发过程中杀死了一项工作之后,jenkins 现在在路径中添加了 at 符号,例如
/data/jenkins/oe/project-name@2/
Run Code Online (Sandbox Code Playgroud)
这会杀死 OE。
该...@2如果我删除一切从目录甚至恢复/data/jenkins/oe/。我也尝试基于此错误启用并发构建,但这些都不起作用。
是什么导致了这种行为以及如何避免它?要么禁用 at 符号使用,要么禁用子目录使用?
我没有什么有用的东西,正在玩这样的拼图游戏:
alt text http://manual.gimp.org/nl/images/filters/examples/render-taj-jigsaw.jpg
我想知道是否有可能制作一个帮助我把它组合在一起的程序.
想象一下,我有一个小拼图,比如4x3件,但是小标签和空白是不均匀的 - 不同的部件有不同高度,不同形状,不同尺寸的这些标签.我要做的是拍摄所有这些片段,让程序分析它们并将它们的属性存储在某个地方.然后,当我拿起一块时,我可以让程序告诉我哪些碎片应该是它的"邻居" - 或者如果我必须填写一个空白,它会告诉我想要的拼图是怎么回事看.
不幸的是,我从来没有与图像处理和模式识别任何东西,所以我想请你为一些指针- 我该如何识别一块拼图(基本上是正方形,标签和孔)中的图片?
然后我可能需要旋转它,使其处于正确位置,按比例缩放,然后测量每侧的标签/空白,以及每侧的斜率(如果存在).
我知道扫描/拍摄1000块拼图并使用它会花费太多时间,这只是一个宠物项目,我会学到新东西.
这里有一个Gradle构建,这里建议使用play web framework.
plugins {
id 'play'
id 'idea'
}
repositories {
jcenter()
maven {
name "typesafe-maven-release"
url "https://repo.typesafe.com/typesafe/maven-releases"
}
ivy {
name "typesafe-ivy-release"
url "https://repo.typesafe.com/typesafe/ivy-releases"
layout "ivy"
}
}
Run Code Online (Sandbox Code Playgroud)
它在构建,启动等时从命令行工作正常但是一旦项目在intellij中导入(想法的项目文件生成gradle idea),依赖项(来自播放插件)不会显示在项目视图/外部库中(甚至在gradle面板中点击"刷新所有gradle项目"之后).
谢谢 :)
PS:intellij 15.0.2/gradle 2.6/播放插件
我们有一些复杂的 bash 脚本,现在位于 Jenkins 的托管文件部分。我们尝试将作业迁移到管道,但我们不知道将 bash 脚本转换为 groovy,因此我们希望将其保留在 bash 中。我们在 Git 中有一个 jenkins-shared-library,我们在其中存储我们的管道模板。在作业中,我们添加了正确的环境变量。
我们希望将 bash 脚本保存在 git 中而不是托管文件中。在管道中加载此脚本并执行它的正确方法是什么?我们用 尝试了一些东西libraryResource,但我们没有设法让它工作。我们必须将test.sh脚本放在 git 中的什么位置以及如何调用它?(或者在这里运行shell脚本是完全错误的)
def call(body) {
// evaluate the body block, and collect configuration into the object
def pipelineParams= [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = pipelineParams
body()
pipeline {
agent any
options {
buildDiscarder(logRotator(numToKeepStr: '3'))
}
stages {
stage ('ExecuteTestScript') {
steps {
def script = libraryResource 'loadtestscript?'
script {
sh './test.sh'
}
}
}
}
post { …Run Code Online (Sandbox Code Playgroud)