Grails与另一个Spring应用程序集成 – dataSource被重载

我目前正在为现有的基于Spring的应用程序构建CRUD工具。 该应用程序作为JAR库包含在Grails应用程序中,似乎工作正常。

为了利用库自己的spring上下文,我曾经通过以下方式加载它:

def ctx = new ClassPathXmlApplicationContext( 'classpath:/applicationContextName.xml') 

在我的服务。 不幸的是,上下文构建了自己的数据源(库的默认值),这是不好的,因为我需要使用Grails中定义的dataSource。

因此,我的解决方案是通过向grails-app \ conf \ spring \ resources.xml文件添加导入,将库的spring配置包含在Grails上下文中。

这似乎有效(因为所有bean都被加载到相同的上下文中,现在我可以使用def variableName直接将bean自动装入我的服务类中。

不幸的是,库的spring配置中定义的dataSource正在重载我的Grails DataSource.groovy文件中定义的dataSource!

有没有什么方法可以告诉Grails首先加载libary的spring配置,然后它被其余的Grails配置覆盖(因此使用Grails的DataSource)?

谢谢你的帮助,

詹姆士

作为一个临时措施,我已经删除了依赖性的spring配置文件中的dataSource条目,并且它的bean已经注入了由Grails配置创建的dataSource – 这不是理想的,因为我必须做一个’特殊’构建依赖jar。

我想看看制作一个包含你的库的简单插件并在dataSources插件之前加载它(在你的插件中使用def loadBefore = ['datasources'] * Plugin.groovy文件)。

每个插件都有一个doWithSpring钩子,允许你向上下文添加bean(你可以在那里包含你现有的context.xml)。

作为额外的奖励,它将使下次重新使用库更容易:)

干杯

背风处

一个更简单的解决方案是在Grails上下文(resources.xml)中导入应用程序的上下文,然后有两个选项。 您可以将应用程序的de数据源重命名为Grails的数据源,或者只需从应用程序中删除dataSource并使用Grails部分Grails。 解决方案之间的区别在于两个数据源是否连接到同一数据库。