在Spring JDBC中执行数据库会话初始化SQL

时间:2011-04-25 19:01:10

标签: java oracle spring jdbc

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

我正在建立的数据库连接是一个具有几个非默认数据库角色的帐户。在建立与数据库的物理连接时,我需要启用这些角色(可能通过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" />

1 个答案:

答案 0 :(得分:2)

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

甚至可能是using AOP

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