小编Séb*_*ois的帖子

为什么在发出终端操作后没有Java close()流?

在阅读了https://www.airpair.com/java/posts/spring-streams-memory-efficiency之后,我很想从数据库中传出结果,但正如我与同事讨论的那样(cfr.评论他补充说文章),需要记住使用try-with-resources构造来避免任何内存泄漏.

  1. 为什么Java 8库不会在每次终端操作后自行关闭流(不必在try-with-resources中包装流实例化)?
  2. 如果适用,是否有任何将此功能添加到Java的计划,或者请求它是否有意义?

java java-8 java-stream

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

用于Sequelize审计跟踪的节点库

是否有适当的节点库来启用Sequelize ORM(Postgresql引擎盖下)的审计表?

我发现NPM包sequelize-temporal,sequelize-paper-trailaudit.sequelize,但他们要么很老了,没有提供一种简单的方法来迁移现有的数据库,或者根本就似乎没有工作.

或者是否有另一种方便的方法来跟踪我应该知道的数据库更改?

audit-tables node.js sequelize.js

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

升级到 Rails 7:在哪里注册 cookie 旋转器?

从 Rails 6 升级到 Rails 7 时,该new_framework_defaults_7_0.rb文件指示注册 cookie 旋转器,以使用 SHA1 的旧摘要类读取消息(代码如下)。该代码是否应该在一次性 rake 任务中执行一次,或者在每次应用程序启动时在初始化程序中执行?(在后一种情况下,是否应该按照此处的建议将其包含在 after_initialize 块中?)如何确定应用程序中除了 cookie 之外是否还有其他地方需要进行此类迁移?

Rails.application.config.action_dispatch.cookies_rotations.tap do |cookies|
  salt = Rails.application.config.action_dispatch.authenticated_encrypted_cookie_salt
  secret_key_base = Rails.application.secrets.secret_key_base
  key_generator = ActiveSupport::KeyGenerator.new(
    secret_key_base, iterations: 1000, hash_digest_class: OpenSSL::Digest::SHA1
  )
  key_len = ActiveSupport::MessageEncryptor.key_len
  secret = key_generator.generate_key(salt, key_len)
  cookies.rotate :encrypted, secret
end
Run Code Online (Sandbox Code Playgroud)

ruby cookies hash openssl ruby-on-rails

7
推荐指数
0
解决办法
1424
查看次数

使用Spring MVC流可关闭资源

阅读完本文之后,我希望使用Spring将数据库查询结果直接流式传输到JSON响应,以确保内存使用量不变(内存中没有贪婪的加载List).

与使用Hibernate的文章中所做的类似,我组装了一个greetingRepository对象,该对象基于a返回数据库内容的流JdbcTemplate.在该实现中,我在查询时创建了一个迭代器ResultSet,并按如下方式返回流:

return StreamSupport.stream(spliterator(), false).onClose(() -> {
  log.info("Closing ResultSetIterator stream");
  JdbcUtils.closeResultSet(resultSet);
});
Run Code Online (Sandbox Code Playgroud)

即,如果在构造中声明流,则使用一种onClose()方法保证底层ResultSet将被关闭try-with-resources:

try(Stream<Greeting> stream = greetingRepository.stream()) {
  // operate on the stream
} // ResultSet underlying the stream will be guaranteed to be closed
Run Code Online (Sandbox Code Playgroud)

但正如在文章中,我希望这个流由自定义对象映射器(MappingJackson2HttpMessageConverter文章中定义的增强)使用.如果我们把try-with-resources需要放在一边,这可行如下:

@RequestMapping(method = GET)
Stream<GreetingResource> stream() {
  return greetingRepository.stream().map(GreetingResource::new);
}
Run Code Online (Sandbox Code Playgroud)

然而,正如一位同事在该文章底部评论的那样,这并没有关闭基础资源.

在Spring MVC的上下文中,我如何从数据库一直流式传输到JSON响应中并仍然保证ResultSet将被关闭?你能提供具体的示例解决方案吗?

java spring-mvc spring-jdbc java-8 java-stream

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