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。 解决方案之间的区别在于两个数据源是否连接到同一数据库。
- 为单个maven项目创建两个工件(war)
- 如何在Spring应用程序上下文中扩展已定义的列表和映射?
- 使用@Qualifier的@Bean声明不起作用
- 如何在gradle依赖项的依赖项中指定分类器?
- @Context返回代理而不是HttpServletRequest(代理范围内没有线程本地值)
- 使用Spring框架的抽象工厂
- 使用guice作为注入类的框架,正确的初始化方法?
- Jersey2,Hk2dependency injection(自动)给出AbstractMethodError:org.jvnet.hk2.internal.DynamicConfigurationImpl.addIdempotentFilter
- 如何将Spring @Autowired必需属性转为false进行测试?