Grails run-app: выполнить произвольный SQL при новом подключении - PullRequest
2 голосов
/ 13 января 2011

В производстве мы используем JBoss с JNDI для подключения к базе данных. В конфигурации JNDI у нас есть что-то вроде:

<new-connection-sql>ALTER SESSION SET CURRENT_SCHEMA=XXX</new-connection-sql>

Для разработки я использую run-app с контейнером Tomcat по умолчанию (Grails 1.3.2) с использованием жестко закодированных аргументов DataSources. До сих пор было достаточно приблизительно аппроксимировать вышеприведенный оператор alter session, используя параметр default_schema в моей конфигурации разработки. Но этого уже недостаточно из-за использования некоторых собственных операторов Sql. Я не хочу изменять SQL, чтобы он соответствовал моим настройкам разработки (например, путем извлечения значения default_schema во время выполнения). Я вижу два варианта:

  1. Возможно, есть эквивалентный new-connection-sql аргумент, который я могу использовать в своей конфигурации разработки.
  2. Если нет, возможно, я смогу перейти на использование JNDI в моей среде разработки. Это было бы хорошо, но, оглядываясь по сторонам, я не смог найти надежных инструкций о том, как это сделать. На самом деле у людей, похоже, проблемы с этим. Более того, я не уверен, что все конфигурации JNDI одинаково принимаются между веб-контейнерами и поддерживает ли Tomcat какой-либо аргумент new-connection-sql.

Может ли кто-нибудь помочь мне найти лучший способ сделать это? Спасибо!

Редактировать

Вот исходный код Sql, который я использую (мы нацелены на устаревшую базу данных, которая использует триггер для обновления столбца DATE_CREATE и должна извлекать его таким образом при сохранении):

def getCreationDate() {
    if (!creationDate) {
        def sql = new Sql(dataSource)
        sql.query("select DATE_CREATED from some_view where id=?", [id]) {ResultSet rs ->
            rs.next()
            creationDate = rs.getTimestamp("DATE_CREATED")
        }
    }
    return creationDate
}
...