Grails 4.0.3 Множественные источники данных - Второй источник данных недоступен в службе - PullRequest
0 голосов
/ 08 июля 2020

Я выполнил инструкции / пример в Grails Do c (https://docs.grails.org/4.0.3/guide/conf.html#multipleDatasources), и он по-прежнему использует источник данных по умолчанию.

Мой application.yml содержит:

dataSource:
    pooled: true
    jmxExport: true
    dbCreate: validate
    url: jdbc:oracle:thin:@XXX.XX.X.XXX:XXXX:TEST
    username: username1
    password: password1
    driverClassName: oracle.jdbc.OracleDriver
    dialect: org.hibernate.dialect.Oracle10gDialect
    properties:
        jmxEnabled: true
        initialSize: 5
        maxActive: 50
        minIdle: 5
        maxIdle: 25
        maxWait: 10000
        maxAge: 600000
        timeBetweenEvictionRunsMillis: 5000
        minEvictableIdleTimeMillis: 60000
        validationQuery: SELECT 1 FROM DUAL
        validationQueryTimeout: 3
        validationInterval: 15000
        testOnBorrow: true
        testWhileIdle: true
        testOnReturn: false
        jdbcInterceptors: ConnectionState
        defaultTransactionIsolation: 2 # TRANSACTION_READ_COMMITTED
dataSources:
    identityDb:
        url: jdbc:oracle:thin:@YYY.YY.YY.YYY:YYYYY:IDENT
        username: username2
        password: password2

И моя служба определяется следующим образом:

class PictureService {
    def grailsApplication
    def assetResourceLocator
    static dataSource = "identityDb"

    def getPictures( identifications ) {
        // Loop through all ids
        for( i in identifications ) {
            //try {
                Sql sql = Sql.newInstance( dataSource )
    ...

Он выбрасывает этот дамп стека:

ORA-00942: table or view does not exist
. Stacktrace follows:

java.lang.reflect.InvocationTargetException: null
        at org.grails.core.DefaultGrailsControllerClass$ReflectionInvoker.invoke(DefaultGrailsControllerClass.java:211)
        at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188)
        at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
        at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
        at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.sql.SQLException: ORA-00942: table or view does not exist

Когда я выгружаю информацию о строке подключения для dataSource , Я вижу, что это первый в списке источник данных, а не источник данных identityDb. Я не использую классы домена или GORM, а просто пишу SQL напрямую. Любая помощь с этим будет оценена!

1 Ответ

0 голосов
/ 15 июля 2020

Редактировать / Обновить

Я изменил свою службу на следующую, и теперь она работает правильно. Я думал, что пробовал это раньше, но у меня, должно быть, не было правильной комбинации вещей.

Обратите внимание, что application.yml не изменился.

class PictureService {def grailsApplication def assetResourceLocator def dataSource_identityDb

def getPictures( identifications ) {
    // Loop through all ids
    for( i in identifications ) {
        try {
            Sql sql = Sql.newInstance( dataSource_identityDb )

... Кроме того, это отличается от того, что указано в официальных документах для использования второго источника данных в Grails 4.0.3.

...