Spring部署级配置

时间:2010-05-05 17:04:52

标签: spring jboss

当我编写Java EE应用程序时,我使用JBoss Datasources来控制部署使用的数据库。例如。 dev版本将使用一次性的hibernate数据库,ref和ops将使用稳定的MySQL部署。我还使用MBeans来配置各种其他服务和规则。

现在我正在使用Spring,我想要相同的功能 - 部署相同的代码,但配置不同。至关重要的是,我还希望单元测试仍然可以使用存根服务运行。我的问题是 - 在JBoss中,有一种方法可以使用生活在WAR / EAR之外的文件注入配置,并在测试资源中包含这些文件。

1 个答案:

答案 0 :(得分:2)

通过将名为xxx-service.xml的文件放入jboss的deploy目录,可以将对象添加到JNDI上下文中。然后,应用程序可以通过JNDI查找值。在下面的示例中,在java:/ modes / deployment中添加了字符串“development”。要在单元测试中使用JNDI,请使用org.springframework.mock.jndi包。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE server PUBLIC "-//JBoss//DTD MBean Service 4.0//EN"
          "http://www.jboss.org/j2ee/dtd/jboss-service_4_0.dtd">
<server>
   <mbean code="org.jboss.naming.JNDIBindingServiceMgr"
         name="c3po.naming:service=jndi-bindings">
      <attribute name="BindingsConfig" serialDataType="jbxb">
         <jndi:bindings
            xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:jndi="urn:jboss:jndi-binding-service:1.0"
            xs:schemaLocation="urn:jboss:jndi-binding-service:1.0 resource:jndi-binding-service_1_0.xsd"
            >

            <jndi:binding name="java:/modes/deployment">
               <jndi:value type="java.lang.String">development</jndi:value>
            </jndi:binding>

            <jndi:binding name="java:/sites/abc">
               <jndi:value type="java.lang.String">dev.site.example.com</jndi:value>
            </jndi:binding>

<!-- Examples:

            <jndi:binding name="urls/jboss-home">
               <jndi:value type="java.net.URL">http://www.jboss.org</jndi:value>
            </jndi:binding>

            <jndi:binding name="hosts/localhost">
               <jndi:value editor="org.jboss.util.propertyeditor.InetAddressEditor">
                  127.0.0.1
               </jndi:value>
            </jndi:binding>

            <jndi:binding name="maps/testProps">
               <java:properties xmlns:java="urn:jboss:java-properties"
                  xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
                  xs:schemaLocation="urn:jboss:java-properties resource:java-properties_1_0.xsd">
                  <java:property>
                     <java:key>key1</java:key>
                     <java:value>value1</java:value>
                  </java:property>
                  <java:property>
                     <java:key>key2</java:key>
                     <java:value>value2</java:value>
                  </java:property>
               </java:properties>               
            </jndi:binding>
-->

         </jndi:bindings>
      </attribute>
      <depends>jboss:service=Naming</depends>
   </mbean>

</server>