Перенести значения конфигурации из файла spy.properties в файл Config. groovy - PullRequest
0 голосов
/ 26 мая 2020

Мы используем p6spy 3.9.0 для регистрации всех SQL операторов, выполняемых в нашем приложении Grails 2.4.4. Во время разработки мы используем отдельный файл spy.properties внутри каталога grails-app/conf/, как показано ниже:

# <app dir>\grails-app\conf\spy.properties
append = true
appender = com.p6spy.engine.spy.appender.FileLogger
autoflush = true
customLogMessageFormat = %(sqlSingleLine)
databaseDialectDateFormat = yyyy-MM-dd
driverlist = oracle.jdbc.driver.OracleDriver
logfile = logs\\sql.log
logMessageFormat = com.p6spy.engine.spy.appender.CustomLineFormat

Мы развертываем его на сервере Tomcat. На сервере другой файловый каталог по сравнению с нашим приложением для разработки. Чтобы учесть разницу, мы удалили файл spy.properties и вместо этого поместили его в файл Config.groovy, фрагмент, как показано ниже:

// <app dir>\grails-app\conf\Config.groovy
p6spy {
    config {
        append = true
        appender = com.p6spy.engine.spy.appender.FileLogger
        autoflush = true
        customLogMessageFormat = "%(sqlSingleLine)"
        databaseDialectDateFormat = "yyyy-MM-dd"
        driverlist = oracle.jdbc.driver.OracleDriver
        logfile = ".." + File.separator + "logs" + File.separator + "sql.log"
        logMessageFormat = com.p6spy.engine.spy.appender.CustomLineFormat
    }
}

environments {
    development {
        logfile = "logs" + File.separator + "sql.log"
    }
    production {
        logfile = ".." + File.separator + "logs" + File.separator + "sql.log"
    }
}

Однако это не работает.

Когда мы запускаем разрабатываемое приложение, оно создает файл журнала в каталоге приложения - вместо создания файла <app dir>\logs\sql.log, как указано в файле Config.groovy, он создает его в <app dir>\sql.log и запускает приложение.

Когда мы генерируем файл war и помещаем его в производство, Tomcat Server даже не запускается и вместо этого выдает следующую ошибку:

org.springframework.beans.factory.BeanCreationException: Ошибка при создании bean-компонента с именем «transactionManagerPostProcessor»: инициализация bean-компонента не удалась; вложенное исключение - org.springframework.beans.factory.BeanCreationException: Ошибка при создании bean-компонента с именем «transactionManager»: невозможно разрешить ссылку на bean-компонент «sessionFactory» при установке свойства bean-компонента «sessionFactory»; вложенное исключение - org.springframework.beans.factory.BeanCreationException: Ошибка создания bean-компонента с именем 'sessionFactory': не удается разрешить ссылку на bean-компонент 'hibernateProperties' при установке свойства bean-компонента 'hibernateProperties'; вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем 'hibernateProperties': не удается разрешить ссылку на bean-компонент 'dialectDetector' при установке свойства bean-компонента с помощью ключа [hibernate.dialect]; вложенное исключение - org.springframework.beans.factory.BeanCreationException: Ошибка создания bean-компонента с именем 'dialectDetector': не удалось вызвать метод инициализации; вложенное исключение: org.springframework.jdb c .support.MetaDataAccessException: Ошибка при извлечении DatabaseMetaData; вложенное исключение - org. apache .tomcat.dbcp.dbcp.SQLNestedException: невозможно создать PoolableConnectionFactory (невозможно найти драйвер, который принимает jdbc:oracle:thin:@localhost: 1521: ORCL)

Эта ошибка отображается, когда нет Конфигурация p6spy определяется при запуске приложения. Эта ошибка может проявляться как при разработке, так и при производстве, если JVM не обнаруживает конфигурацию p6spy. Как ни странно, означает ли это, что JVM может читать конфигурацию p6spy в файле Config.groovy при запуске в процессе разработки, а не при развертывании на сервере Tomcat? Но если он действительно может прочитать конфигурацию p6spy при запуске в разработке, почему он не создает файл внутри каталога, указанного свойством logfile?

В качестве временного исправления мы восстановили <app dir>\grails-app\conf\spy.properties file и меняем значение свойства logfile каждый раз, когда мы создаем war, и возвращаем его к предыдущему значению каждый раз, когда мы запускаем его в разработке. Есть ли способ удалить spy.properties и просто вставить его в Config.groovy? Или есть способ настроить приложение так, чтобы оно имело две версии файла spy.properties и загружало разные версии в зависимости от среды?

...