grails - Grails插件无法访问多数据源

标签 grails gorm datasource

我有一个带有选项域实体的插件(我们称之为插件A),还有一个带有强制实体的插件(插件B)。插件B也有2个数据源的定义(默认dataSourcedataSource_redshift)。最初,在我的应用程序中,我依赖于B插件,可以使用两个数据源而不会出现任何问题。但是,现在我已将插件A作为依赖项添加到我的应用程序中,并且使用默认数据源的实体似乎运行良好,但是如果我要创建这样的实体,则:

class RedshiftEntity {

    static mapping = {
        datasource "redshift"
        table name: "table", schema: "public"
        id generator: 'assigned', column:'id'
        version false
    }

    ...
    fields
    ...
}

在应用程序加载时,我得到这样的错误:
Caused by: org.grails.datastore.mapping.core.exceptions.ConfigurationException: DataSource not found for name [dataSource_redshift] in configuration. Please check your multiple data sources configuration and try again.
    at org.grails.orm.hibernate.HibernateDatastore.getDatastoreForConnection(HibernateDatastore.java:337)
    at org.grails.orm.hibernate.HibernateGormEnhancer.getStaticApi(HibernateGormEnhancer.groovy:47)
    at org.grails.datastore.gorm.GormEnhancer.registerEntity(GormEnhancer.groovy:139)
    at org.grails.datastore.gorm.GormEnhancer.<init>(GormEnhancer.groovy:122)
    at org.grails.orm.hibernate.HibernateGormEnhancer.<init>(HibernateGormEnhancer.groovy:41)
    at org.grails.orm.hibernate.HibernateDatastore.initialize(HibernateDatastore.java:414)
    at org.grails.orm.hibernate.HibernateDatastore.<init>(HibernateDatastore.java:177)
    at org.grails.orm.hibernate.HibernateDatastore.<init>(HibernateDatastore.java:188)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.springsource.loaded.ri.ReflectiveInterceptor.jlrConstructorNewInstance(ReflectiveInterceptor.java:1075)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
    ... 84 common frames omitted

如果我将这个实体移动到插件B,那么它可以与dataSource_redshift一起使用。请给我一个想法,我想念什么?

最佳答案

我发现了此类问题的根本原因。 Plugin B具有特殊的构造,可以使用名称来启用或禁用应用程序的第二个数据源:

switch(app_name) {
    ...
    case 'main_app':
        redshiftEnabled = true 
    ...
}

我的主应用程序已启用Redshift数据源,但似乎数据源对插件并不像我期望的那样透明。当将带有数据源的plugin B作为从属关系添加到主应用程序时,不允许其他与该应用程序连接的插件访问第二个数据源。我需要使用数据源在插件中使用个人名称显式枚举插件:
switch(app_name) {
    ...
    case 'main_app':
        redshiftEnabled = true
    case 'plugin_A':
        redshiftEnabled = true 
    ...
}

我希望在将插件连接到主应用程序之后,它们会使用主应用程序的名称访问数据源,但似乎并非如此。

关于grails - Grails插件无法访问多数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46998485/

相关文章:

java - 如何从 JBoss 中打开的连接池正确保持数据库连接

java - 使用单例类、Tomcat、C3P0 在 Java Web 应用程序中管理池数据源

Grails:从服务初始化方法获取域对象

grails - 新的Grails Controller 似乎没有响应

grails - 从grails 2.x升级到grails 3.x时出现的问题

grails - Multi-Tenancy 时如何使用DomainUnitTest进行测试

grails - 一对多关系的Grails准则动态AND条件

grails - Grails 1.2.0在默认存储库中找不到插件

grails - NumberFormatException对于尝试在grails中进行日期搜索时的输入字符串

authentication - 在数据源中使用认证别名有什么好处?