【问题标题】:Mule - make Global Elements more globalMule - 让全局元素更加全球化
【发布时间】:2013-09-20 11:00:50
【问题描述】:

在 mule 中,我有许多应用程序在同一个容器上运行,它们使用相同的连接字符串/用户/密码集访问 jdbc 连接器。

当然,任何应用都在其 xml 配置文件中配置了相同的全局连接器,因此存在代码重复。

有没有办法为每个容器定义一次连接并从任何应用程序访问它?

【问题讨论】:

    标签: mule mule-studio


    【解决方案1】:

    我会试试这个:让一个应用程序创建数据源并将其存储在 JNDI 中,并让其他应用程序从 JNDI 中获取它。

    由于没有强有力的应用启动顺序保证,因此需要 JNDI 数据源的应用可能会启动得太早。您需要配置 Spring 以便能够在发生故障时再次执行 JNDI 查找,并在 Mule JDBC 连接器上配置线程重试策略。

    您还需要在 lib/user 中安装数据源和数据库 JAR,以便所有应用都可以使用它们。

    【讨论】:

    • 啊是的,这肯定是更优化的!
    • 谢谢大卫。你能给我一些代码来在 jndi 中存储数据源吗?
    【解决方案2】:

    只需在系统中某个位置的 xml 中为您的 JDBC 连接器创建一个 spring bean,然后让您的所有应用程序将其加载到您的应用程序中:

       <spring:import resource="JDBC-beans.xml" />
    

    和xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd ">
    
       <!-- Initialization for data source -->
       <bean id="dataSource" 
          class="org.springframework.jdbc.datasource.DriverManagerDataSource">
          <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
          <property name="url" value="jdbc:mysql://localhost:3306/TEST"/>
          <property name="username" value="root"/>
          <property name="password" value="password"/>
       </bean>
    
    </beans>
    

    【讨论】:

    • 但这不会为每个容器加载一次数据源,而是每个应用程序一次,我认为这是 OP 想要避免的。
    【解决方案3】:

    我已经使用域项目解决了此类问题,我在其中插入了所有已被其他项目使用的数据库配置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      • 2010-11-18
      • 2013-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多