Невозможно настроить схему для класса домена в Grail & Groovy

Мы создали два разных предметных объекта в Grails и попытались получить доступ из двух разных схем.

Способ 1:

Например:

Student.groovy

class Students {
     String id
     String name
     String address 

   Static mapping = {
     schema: 'student_details' 
   } 
 }

Customer.groovy

class Customer {
    String firstName
    String lastName 
    String address  

   Static mapping = {
      schema: 'customer_details'
    }    
 }

application.yml

 environments:
    development:
       dataSource:
          dbCreate: update
          url: jdbc:mysql://localhost:3306/

Если я предоставляю схему по умолчанию в строке подключения URL, то она всегда ссылается на эту настройку по умолчанию, независимо от схемы, определенной в классе домена, и в виде исключения, таблица не найдена. Если я удаляю схему по умолчанию из строки подключения URL, я получаю сообщение об ошибке "База данных не выбрана" в журналах.

Способ 2:

Мы попытались настроить каждую схему с несколькими источниками данных в application.yml следующим образом:

dataSource:
    pooled: true
    dbCreate: update
    url: jdbc:mysql://localhost:3306/sample_grails
    dialect: org.hibernate.dialect.MySQL5InnoDBDialect
    username: root
    password: ''
secondary:
    pooled: true
    dbCreate: update
    url: jdbc:mysql://localhost:3306/grails_mapping
    dialect: org.hibernate.dialect.MySQL5InnoDBDialect
    username: root
    password: ''

Использовал класс домена как Customer.groovy

class Customer {
    String firstName
    String lastName 
    String address  

   Static mapping = {
      datasource 'secondary'
   }     
 }

Я получаю ошибку

Caused by: org.grails.datastore.mapping.core.exceptions.ConfigurationException: DataSource not found for name [secondary] in configuration. Please check your multiple data sources configuration and try again.

Мы ссылались на следующие ссылки для доступа к нескольким схемам:

https://objectpartners.com/2016/03/09/using-secondary-datasources-in-grails-3/

Создание класса домена со схемой в Grails

Кто-нибудь может предложить решение этой проблемы?

2 ответа

Ваш метод 2 почти готов, я думаю, что вам не хватает - вам нужно определить "вторичный" в разделе "источники данных" - посмотрите это - http://docs.grails.org/latest/guide/conf.html

В вашем файле application.yml используйте источники данных: ниже источника данных по умолчанию следующим образом:

dataSource:
   pooled: true
   dialect: org.hibernate.dialect.MySQL5InnoDBDialect
   driverClassName: com.mysql.jdbc.Driver
   dbCreate: update
   url: jdbc:mysql://localhost:3306/default_schema
   username: root
   password: ''
datasources:
  source1:
    dialect: org.hibernate.dialect.MySQLInnoDBDialect
    driverClassName: com.mysql.jdbc.Driver
    username: root
    password: ''
    url: mysql://localhost:3306/source1
    dbCreate: update

Теперь ваш класс Customer должен выглядеть так:

class Customer {
String firstName
String lastName 
String address
Static mapping = {
  datasource 'source1'
}     
}

Для более подробной информации, вы можете увидеть несколько источников данных в Grails, официальный документ

Другие вопросы по тегам