在阅读了https://www.airpair.com/java/posts/spring-streams-memory-efficiency之后,我很想从数据库中传出结果,但正如我与同事讨论的那样(cfr.评论他补充说文章),需要记住使用try-with-resources构造来避免任何内存泄漏.
是否有适当的节点库来启用Sequelize ORM(Postgresql引擎盖下)的审计表?
我发现NPM包sequelize-temporal,sequelize-paper-trail和audit.sequelize,但他们要么很老了,没有提供一种简单的方法来迁移现有的数据库,或者根本就似乎没有工作.
或者是否有另一种方便的方法来跟踪我应该知道的数据库更改?
从 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) 阅读完本文之后,我希望使用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 ×2
java-8 ×2
java-stream ×2
audit-tables ×1
cookies ×1
hash ×1
node.js ×1
openssl ×1
ruby ×1
sequelize.js ×1
spring-jdbc ×1
spring-mvc ×1