当前位置: 首页 > 知识库问答 >
问题:

流数据到速度模板的飞行

张砚
2023-03-14

有人能让我知道,如果有可能以某种方式打开速度Excel模板,并流到它的部分更大的数据量在飞行中?

假设我想在一个循环中读取外部资源ArrayLists中的数据。一个列表,每个迭代有10,000个项目。在简单的迭代中,我想把列表推到Velocity Excel模板中,跳到下一个迭代时忘掉它。在数据处理结束时,我将对Velocity上下文和模板与所有数据进行最后的合并。

    null

共有1个答案

章高爽
2023-03-14

下面是我测试过的解决方案,在我的情况下效果很好。我能够生成Excel表的一个巨大的amout数据直接从数据库加载。

Connection conn = getDs().getConnection();
// such a configuration of prepared statement is mandatory for large amount of data
PreparedStatement ps = conn.prepareStatement(MY_QUERY, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.CLOSE_CURSORS_AT_COMMIT);

// load huge amount of data per 50000 items
ps.setFetchSize(50000);
ResultSet rs = ps.executeQuery();

// calculate count of returned data earlier
final CountWrapper countWrapper = new CountWrapper(countCalculatedEarlier);
CustomResultSetIterator<MyObject> rowsIter = new CustomResultSetIterator<MyObject>(rs, new org.apache.commons.dbutils.BasicRowProcessor(), MyObject.class) {

    private Long iterCount = 0L;

    @Override
    public boolean hasNext() {
        // you can't call isLast method on defined as forward only cursor of result set, hence there is a homegrown calculation whether last item is reached or not
        return iterCount < countWrapper.getCount().longValue();
    };

    @Override
    public MyObject next() {
        iterCount++;
        return super.next();
    };
};

VelocityContext context = new VelocityContext();
// place an interator here instead of collection object
context.put("rows", rowsIter);

Template t = ve.getTemplate(template);
File file = new File(parthToFile);
FileWriter fw = new FileWriter(file);
// generate on the fly in my case 1 000 000 rows in Excel, watch out such an Excel may have 1GB size
t.merge(context, fw);

// The CustomResultSetIterator is a:

public class CustomResultSetIterator<E> implements Iterator<E> {
  //...implement all interface's methods
}
 类似资料:
  • 我尝试使用文字块(并解析它们)和指令,但这两个指令都存在问题。它们很笨拙(需要对模板进行一些解析),而且远非优雅。

  • 我需要用价格值追加$symbol。从db中,我得到的值是:“125.00”、“--”、“废话废话”。 我只需要为有效的整数追加$symbol。如何才能做到这一点,我已经尝试了以下代码:

  • 我在编辑速度模板。它们用于生成PDF。问题是我不能预览它们。我看不出模板呈现时会是什么样子。有什么工具可以用来吗?我试过谷歌搜索,但什么也找不到。 另外,我知道如果我在本地加载它,它不会显示变量。我感兴趣的是知道它会是什么样子。布局等。,

  • 我正在将一个应用程序从WebSphere迁移到Tomcat,从Ant迁移到Maven。在此过程中,我们决定对Spring进行更新,并对较新的版本进行少量其他更新。该应用程序可以追溯到2005年。所以不是所有的,都是最新和最伟大的。 其中一个障碍是,迁移到Spring5.0,下降了对速度的支持。我们的应用程序广泛使用的工具。我们用的是Spring2.8之类的!:) 现在,我看到这些声明:

  • 由于我刚接触DataFlow/Beam,概念还不太清楚(或者至少我在开始编写代码时有困难),我有很多问题: 什么是最好的模板或模式,我可以用来做到这一点?我应该先执行BigQuery的PTransform(然后执行PubSub的PTransform)还是先执行PubSub的PTransform? 我怎么做加入?比如? PubSub的最佳窗口设置是什么?BigQuery的PTransform部分的窗