1

beans:profiles私は次のようにxmlで使用しました:

    <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}" />
        </bean>
   </beans>

spring.active.profilesweb.xmlで設定しました:

<servlet>
    <servlet-name>myapp</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/myapp-servlet.xml</param-value>
    </init-param>
    <init-param>
        <param-name>spring.profiles.active</param-name>
        <param-value>dev</param-value>
    </init-param>
</servlet>

私のコード構造は次のようなものです。

//controller
@Controller 
public class MyController {
  @Autowired
  private MyService myService;
  ....
}

//service implementation
@Service("myservice")
public class MyServiceImpl implements MyService {
  @Autowired
  DBService dbService;
} 

//db service
@Service("dbservice)
public class DBServiceImpl implements DbService {
  @Autowired
  public void setDataSource (Datasource ds) { 
    this.jdbcTemplate = new JdbcTemplate(ds);
  }
}

エラー:

'myController'という名前のBeanの作成中にエラーが発生しました:自動配線された依存関係の挿入に失敗しました。ネストされた例外はorg.springframework.beans.factory.BeanCreationExceptionです:フィールドを自動配線できませんでした:private MyService MyController.myService; ネストされた例外はorg.springframework.beans.factory.BeanCreationExceptionです:

ネストされた例外はorg.springframework.beans.factory.BeanCreationExceptionです:「dbService」という名前のBeanの作成中にエラーが発生しました:自動配線された依存関係の挿入に失敗しました。ネストされた例外はorg.springframework.beans.factory.BeanCreationExceptionです:メソッドを自動配線できませんでした:public void DBServiceImpl.setDataSource(javax.sql.DataSource); ネストされた例外はorg.springframework.beans.factory.NoSuchBeanDefinitionExceptionです:依存関係に一致するタイプ[javax.sql.DataSource]のBeanが見つかりません:この依存関係のautowire候補として適格な少なくとも1つのBeanが必要です。依存関係のアノテーション:{} at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287)atorg.springframework.beans.factory.support。

4

1 に答える 1

1

DataSourceがルートアプリケーションコンテキストにある可能性が高いのに対し、DispatcherServletコンテキストでプロファイルを使用していると思います。

SpringFrameworkのapplicationContext.xmlとspring-servlet.xmlの違いを参照してください。

更新:context-params(ここから取得)を使用してみてください:

<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</context-param>
于 2012-11-09T16:18:00.220 に答える