从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,我怎么知道在这种情况下我是否达到了结果的结尾.
当我调用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
问题代码似乎在 …
我不明白为什么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)
输出: …
我得到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 来形成查询。
在我的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 ×3
apache-poi ×1
aws-java-sdk ×1
distinct ×1
excel ×1
final ×1
group-by ×1
methods ×1
pagination ×1
pdfbox ×1
postgresql ×1
powermock ×1
static ×1
xssf ×1