小编Syl*_*gat的帖子

使用DynamoDBMapper Java AWS SDK进行分页

从API文档中,dynamo db确实支持扫描和查询操作的分页.这里的问题是将ExclusiveStartIndex当前请求设置LastEvaluatedIndex为先前请求的值,以获得结果的下一组(逻辑页).

我正在尝试实现相同但我正在使用DynamoDBMapper,这似乎有更多的优点,如与数据模型紧密耦合.所以,如果我想做上述事情,我假设我会做以下事情:

// Mapping of hashkey of the last item in previous query operation
Map<String, AttributeValue> lastHashKey = .. 
DynamoDBQueryExpression expression = new DynamoDBQueryExpression();

...
expression.setExclusiveStartKey();
List<Table> nextPageResults = mapper.query(Table.class, expression);
Run Code Online (Sandbox Code Playgroud)

我希望我的上述理解在使用DynamoDBMapper进行分页时是正确的.其次,我怎么知道我已经到了结果的末尾.如果我使用以下api,请从文档中获取:

QueryResult result = dynamoDBClient.query((QueryRequest) request);
boolean isEndOfResults = StringUtils.isEmpty(result.getLastEvaluatedKey());
Run Code Online (Sandbox Code Playgroud)

回到使用DynamoDBMapper,我怎么知道在这种情况下我是否达到了结果的结尾.

pagination amazon-web-services amazon-dynamodb aws-java-sdk

14
推荐指数
1
解决办法
2万
查看次数

PDFBox:禁用字体缓存或更改其位置

当我调用PDField.setValue为表单字段设置值时,我得到以下堆栈跟踪:

FileSystemFontProvider.saveDiskCache(349) | Could not write to font cache
java.io.FileNotFoundException: /.pdfbox.cache (Permission denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:194)
at java.io.FileOutputStream.<init>(FileOutputStream.java:145)
at java.io.FileWriter.<init>(FileWriter.java:73)
at org.apache.pdfbox.pdmodel.font.FileSystemFontProvider.saveDiskCache(FileSystemFontProvider.java:290)
at org.apache.pdfbox.pdmodel.font.FileSystemFontProvider.<init>(FileSystemFontProvider.java:226)
at org.apache.pdfbox.pdmodel.font.FontMapperImpl$DefaultFontProvider.<clinit>(FontMapperImpl.java:130)
at org.apache.pdfbox.pdmodel.font.FontMapperImpl.getProvider(FontMapperImpl.java:149)
at org.apache.pdfbox.pdmodel.font.FontMapperImpl.findFont(FontMapperImpl.java:413)
at org.apache.pdfbox.pdmodel.font.FontMapperImpl.findFontBoxFont(FontMapperImpl.java:376)
at org.apache.pdfbox.pdmodel.font.FontMapperImpl.getFontBoxFont(FontMapperImpl.java:350)
at org.apache.pdfbox.pdmodel.font.PDType1Font.<init>(PDType1Font.java:145)
at org.apache.pdfbox.pdmodel.font.PDType1Font.<clinit>(PDType1Font.java:79)
at org.apache.pdfbox.pdmodel.font.PDFontFactory.createFont(PDFontFactory.java:62)
at org.apache.pdfbox.pdmodel.PDResources.getFont(PDResources.java:143)
at org.apache.pdfbox.pdmodel.interactive.form.PDDefaultAppearanceString.processSetFont(PDDefaultAppearanceString.java:164)
at org.apache.pdfbox.pdmodel.interactive.form.PDDefaultAppearanceString.processOperator(PDDefaultAppearanceString.java:131)
at org.apache.pdfbox.pdmodel.interactive.form.PDDefaultAppearanceString.processAppearanceStringOperators(PDDefaultAppearanceString.java:107)
at org.apache.pdfbox.pdmodel.interactive.form.PDDefaultAppearanceString.<init>(PDDefaultAppearanceString.java:85)
at org.apache.pdfbox.pdmodel.interactive.form.PDVariableText.getDefaultAppearanceString(PDVariableText.java:93)
at org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.<init>(AppearanceGeneratorHelper.java:94)
at org.apache.pdfbox.pdmodel.interactive.form.PDTextField.constructAppearances(PDTextField.java:262)
at org.apache.pdfbox.pdmodel.interactive.form.PDTerminalField.applyChange(PDTerminalField.java:228)
at org.apache.pdfbox.pdmodel.interactive.form.PDTextField.setValue(PDTextField.java:218)
Run Code Online (Sandbox Code Playgroud)

我正在运行最新版本的PDFBox 2.0.4.我的网络服务器很可能无权访问.pdfbox.cache默认位置(这似乎是JVM属性user.home).有没有办法禁用磁盘缓存或更改缓存文件的位置?

我注意到我可以设置一个名为JVM的系统属性pdfbox.fontcache,但是我的webapp与其他应用程序共享一个jvm,因此这不是最佳解决方案.我也尝试使用该解决方案并设置pdfbox.fontcache/tmp,但它实际上并没有创建一个文件(虽然它现在每次启动时只抛出一次堆栈跟踪).

我查看了代码,FileSystemFontProvider问题代码似乎在 …

java pdfbox

6
推荐指数
1
解决办法
4163
查看次数

具有最终类System和静态方法currentTimeMillis的PowerMock

我不明白为什么PowerMock这样做.

测试类

public class Testimpl {
    public long test() {
        long a = System.currentTimeMillis();
        System.out.println("2: " + a);
        return a;
    }
}
Run Code Online (Sandbox Code Playgroud)

JUnit的级

import static org.mockito.MockitoAnnotations.initMocks;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest(System.class)
public class TestimplTest {

    @InjectMocks
    Testimpl testimpl;

    @Before
    public void setUp() throws Exception {
        initMocks(testimpl);
        PowerMockito.mockStatic(System.class);
    }

    @Test
    public void test() {
        PowerMockito.when(System.currentTimeMillis()).thenReturn(12345l);
        System.out.println("1: " + System.currentTimeMillis());
        long a = testimpl.test();
        System.out.println("3: " + a);
    }

}
Run Code Online (Sandbox Code Playgroud)

输出: …

java methods static final powermock

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

postgresql 组计数使用快速方式不同

我得到T了 2 列的表格,如下例所示:

C1      C2
----------
A       x
A       x
A       y
B       x
B       x
Run Code Online (Sandbox Code Playgroud)

我要计算不同数C1为每个价值C2。这个结果应该是这样的:

C1      distinct count
----------------------
A       2               // count distinct x,x,y = 2
B       1               // count distinct x,x = 1
Run Code Online (Sandbox Code Playgroud)

很容易得出这样的 SQL 查询

select C1, count(distinct C2) from T group by C1
Run Code Online (Sandbox Code Playgroud)

然而,正如在postgresql COUNT(DISTINCT ...) very slow 中所讨论的,这个查询的性能很差。我想使用该count (*) (select distinct ...)文章中建议的改进查询 ( ),但我不知道如何使用 group by 来形成查询。

postgresql group-by distinct

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

POI-XSSF:从公式单元格缓存的值中读取格式化的值

在我的excel工作表中,许多单元格包含公式,当我用Apache POI阅读excel时,我不想重新计算这些公式。

我这样做的方式:

if(cell.getCellType() == XSSFCell.CELL_TYPE_FORMULA) {

    //System.out.println("Formula is " + cell.getCellFormula());
    switch(cell.getCachedFormulaResultType()) {
        case XSSFCell.CELL_TYPE_NUMERIC:

            System.out.print(cell.getNumericCellValue() +" ");

            break;
        case XSSFCell.CELL_TYPE_STRING:
            System.out.print(cell.getRichStringCellValue()+" ");
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

这有助于我获得单元格中的原始值。例如,如果单元格的值为19.5%,这将为我提供0.195456。我想获取格式化的值。

一种获取格式化值的方法是:

DataFormatter formatter = new DataFormatter();

System.out.print(formatter.formatCellValue(cell));
Run Code Online (Sandbox Code Playgroud)

这对于常规单元格效果很好,但是对于具有公式的单元格,它实际上会获取公式字符串并显示它,即,它不会获取缓存的值并对其进行格式化,而只是返回公式字符串。

从CELL_TYPE_FORMULA检索值后,是否可以格式化该值

java excel apache-poi xssf

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