以只读模式打开 JdbcTemplate 连接?

Posted

技术标签:

【中文标题】以只读模式打开 JdbcTemplate 连接?【英文标题】:Open JdbcTemplate connection in read only mode? 【发布时间】:2010-05-18 11:44:54 【问题描述】:

是否可以以只读模式打开 JdbcTemplate 连接,这样我就无法对底层数据源进行任何更改?

【问题讨论】:

你说的是 Spring 框架吗? 是的,我确实在谈论 Spring 框架。 【参考方案1】:

使用 Spring Transactions 并将事务声明为只读。见http://static.springsource.org/spring/docs/2.5.6/reference/transaction.html#transaction-declarative-annotations

【讨论】:

【参考方案2】:

我使用这样的辅助方法

private void setConnectionReadOnly(boolean readOnly) 
    try 
        jdbcTemplate.getDataSource().getConnection().setReadOnly(readOnly);
     catch (SQLException e) 
        e.printStackTrace();
    

【讨论】:

应该在什么时候调用它?就在执行查询之前?另外,它如何与连接池和并发线程一起工作? 我在调用 jdbcTemplate.query 之前调用它来设置,然后就取消设置 是的,但是否可以保证在发出 .query 时,它会使用设置为只读的同一连接? 也许我错了,但您通常只有 1 个连接。该连接可能是一个池。并且没有办法处理每个“池连接器”的配置(不确定这些的正确术语)所以我相信是这样。 没有。它取决于底层数据源。如果它不支持连接池,它将返回唯一的连接。否则,它可能会返回与设置为只读的连接不同的连接。更多信息Supported Connection Pools【参考方案3】:

我不相信 JDBC 连接 API 允许这样做。

你有两个选择:

    在 数据库级别只允许 SELECT 操作; 使用 Spring AOP 和 Security 拦截对 DAO 写入操作的调用,并禁止某些角色执行这些操作。

第二种选择显然更灵活,符合Spring的自然习语精神。

【讨论】:

以上是关于以只读模式打开 JdbcTemplate 连接?的主要内容,如果未能解决你的问题,请参考以下文章

java + sqlite:如何以只读方式打开数据库?

在 C# 中以只读方式打开 SQLITE

使用 Pandas HDFStore 以只读模式打开文件

Python`搁置`只读模式不起作用

8:文件读写

Word 只读模式修改