Выполнить SQL инициализации сеанса базы данных в Spring JDBC - PullRequest
0 голосов
/ 25 апреля 2011

Я использую Spring JdbcTemplate / SimpleJdbcTemplate в сочетании с источником данных Oracle (oracle.jdbc.pool.OracleDataSource) через поиск JNDI. Это приложение работает на сервере приложений Oracle (OAS) 10.1.3, подключающемся к базе данных Oracle 11g.

Соединение с базой данных, которое я устанавливаю, относится к учетной записи, имеющей несколько ролей базы данных не по умолчанию. Мне нужно включить эти роли (возможно, с помощью команды Oracle «установить роль»), когда физическое соединение с базой данных установлено. Я не вижу способа настроить источник данных 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>

Определение фасоли:

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

1 Ответ

2 голосов
/ 25 апреля 2011

Вы всегда можете создать прокси для DateSource и переопределить его getConnection().

Возможно, даже , используя AOP :

@Aspect
public class DataSourceAspect {
    @AfterReturning(value = "execution(* javax.sql.DataSource.getConnection(..))", 
        returning = "c")
    public void afterGetConnection(Connection c) {
        ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...