3

私は次のように3.0にxmlを持っています:

        <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="driverClassName" value="${jdbc.driverClassName}" />
            <property name="url" value="${jdbc.internal.url}" />
            <property name="username" value="${jdbc.internal.username}" />        
            <property name="password" value="${jdbc.internal.password}"/>
        </bean>

を利用しながらこれを3.1に変換したいのですが、これbeans:profileに変更しようとすると:

        <beans profile="dev">
          <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
              <property name="driverClassName" value="${jdbc.driverClassName}" />
              <property name="url" value="${jdbc.internal.url}" />
              <property name="username" value="${jdbc.internal.username}" />        
              <property name="password" value="${jdbc.internal.password}"/>
        </bean>
        </beans>

次のようなエラーが表示されます。

Invalid content was found starting with element 'bean'. One of '{"http://www.springframework.org/schema/beans":beans}'

質問

beans:profileこの特定の Bean 定義がアクティブなプロファイルがアクティブな場合にのみ呼び出されるようにするにはどうすればよいですか?dev

更新 私の豆の定義は次のとおりです。

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.1.xsd
       http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd">
4

3 に答える 3

8

ネストされたすべて<beans>の宣言は、構成ファイルの最後に配置する必要があります。これが XML スキーマの定義方法であり、これに従わなければなりません。

こちらもご覧ください

  • Spring Framework 3.1 M1 がリリースされました:

    spring-beans-3.1.xsdは、このネストを許可するように更新されましたが、ファイル内の最後の要素としてのみそのような要素を許可するように制限されています。

于 2012-11-09T15:39:33.750 に答える
2

これは仕様によるものです。

SpringSource ブログから:

spring-beans-3.1.xsd が更新され、このネストが可能になりましたが、そのような要素はファイル内の最後の要素としてのみ許可されるように制限されています。これにより、XML ファイルが煩雑になることなく柔軟性が提供されます。この拡張機能は Bean 定義プロファイルのサービスとして開発されましたが、ネストされた要素は一般的に役立ちます。特定のファイルに、lazy-init="true" とマークする必要がある Bean のサブセットがあるとします。各 Bean をマークする代わりに、ネストされた要素を宣言すると、その中のすべての Bean がそのデフォルトを継承します。ファイルの他の場所で定義された Bean は、通常のデフォルトの lazy-init="false" を維持します。これは、要素のすべての default-* 属性 (default-lazy-init、default-init-method、default-destroy-method など) に適用されます。

于 2012-11-09T15:40:27.497 に答える
0

私は同じ問題を抱えていました:たとえが正しかったとしても、私は<beans>他の中にネストすることに成功したことはありません。<beans>spring-beans.xsd

私の(部分的な)解決策は、でapplicationContext.xml始まる他のものを作成することでした

<beans profile="dev, qualif" 
    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.xsd">

</beans>
于 2012-11-09T15:34:36.100 に答える