在我们公司,我们使用Spring Core(4.0.4),JDBCTemplate和Postgres 9.3。
当我尝试this example时:
我对大文件(> 200MB)有些问题。 我根据我的场景调整了示例:
public void addToDB(final long documentId, final File file) throws IOException {
String sql = "insert into filetest (id, content) values (?,?)";
final InputStream blobIs = new FileInputStream(file);
DefaultLobHandler defaultLobHandler = new DefaultLobHandler();
jdbcTemplate
.execute(sql, new AbstractLobCreatingPreparedStatementCallback(defaultLobHandler) {
@Override
protected void setValues(PreparedStatement ps, LobCreator lobCreator) throws SQLException {
ps.setLong(1, documentId);
lobCreator
.setBlobAsBinaryStream(ps, 2, blobIs, (int) file
.length());
}
});
blobIs.close();
}
Postgres上的我创建了表格:
CREATE TABLE filetest
(
id bigint,
content bytea
)
WITH (
OIDS=FALSE
);
ALTER TABLE filetest
OWNER TO postgres;
ALTER TABLE filetest ALTER COLUMN content SET STORAGE EXTERNAL;
我的测试用上面的方法调用了存储库。 对于小文件代码工作(使用pgAdmin客户端,我可以连接,我看到两个记录)。
当我尝试加载大文件(超过200 MB)时,我可以保存文件(实现没有给我错误)。但是,当我尝试从pgAdmin读入时,它会中止操作。只有当我选择id记录时,我才会看到它没有问题(只有内容记录才会中止搜索)。我认为这可能发生在记录被破坏的原因(我怎么能检查这个?)或者为什么GUI-Client无法加载记录(我从控制台试了一下,我也有奇怪的行为)
现在的问题是:
Postgres的参数是否可以限制大小? (bytea可以处理1GB)
有没有检查我可以将数据写入数据库?
因为当我尝试从记录中读取(以编程方式)时,我得到了一个Java Heap Space异常。
答案 0 :(得分:0)
因为当我尝试从记录中读取(以编程方式)时,我得到了一个Java Heap Space异常。
可能的解决方案是设置-Xmx2048m
和-Xms256m
JVM
参数以增加堆大小。像:
java -Xmx1024m -Xms256m REST_OF_ARGUMENTS
还可以以多种大小指定标志,例如KB,MB等。
-Xmx2048k
-Xmx1024m
-Xmx2g