【问题标题】:Execute database session initialization SQL in Spring JDBC在 Spring JDBC 中执行数据库会话初始化 SQL
【发布时间】:2011-04-25 19:01:10
【问题描述】:

我通过 JNDI 查找将 Spring JdbcTemplate/SimpleJdbcTemplate 与 Oracle 数据源 (oracle.jdbc.pool.OracleDataSource) 结合使用。此应用程序在连接到 Oracle 11g 数据库的 Oracle 应用服务器 (OAS) 10.1.3 上运行。

我正在建立的数据库连接是一个具有几个非默认数据库角色的帐户。当建立到数据库的物理连接时,我需要启用这些角色(可能通过 Oracle “set role”命令)。我看不到任何方法可以配置 Oracle 数据源以发出 SQL 命令来执行此操作。因为我的 Java 代码使用 Spring JDBC 类,所以它不处理打开和关闭连接。 Spring 是否提供了某种方式来在获得连接时运行一些初始化 SQL?

数据源定义:

<?xml version = '1.0' encoding = 'windows-1252'?>
<data-sources xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/data-sources-10_1.xsd">
 <native-data-source data-source-class="oracle.jdbc.pool.OracleDataSource"
                      jndi-name="jdbc/xxx" name="xxx"
                      url="jdbc:oracle:thin:@hostxxx:1541:xxx"
                      password="zzzzz" user="username"/>
</data-sources>

Spring bean 定义:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/xxx" />

【问题讨论】:

    标签: java oracle spring jdbc


    【解决方案1】:

    您始终可以为DateSource 创建代理并覆盖其getConnection()

    甚至可能是using AOP:

    @Aspect
    public class DataSourceAspect {
        @AfterReturning(value = "execution(* javax.sql.DataSource.getConnection(..))", 
            returning = "c")
        public void afterGetConnection(Connection c) {
            ...
        }
    }
    

    【讨论】:

    • 我会接受这个答案,因为我认为这是解决问题的潜在方法。
    • 它确实有效。在 Spring Boot 中,您必须使用 @Component 注解来注解要检测的类。
    猜你喜欢
    • 2012-06-10
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 2018-06-09
    • 2018-04-18
    • 2021-12-04
    • 2021-02-16
    • 2013-11-12
    相关资源
    最近更新 更多