0

context.xml ファイルからデータソースを挿入しようとしています。私はこの構成ファイルを持っていますが、問題はいつでも複数のデータソースがあることです。それらのいずれかを注入しようとすると、一致する Bean がないというエラーが表示されます。これが私のコードです。

    @Inject
    @Named("dataSourceAccounts")
    //@Autowired
    @Override
    public void setDataSource(DataSource dataSource) {
        // TODO Auto-generated method stub
        this.jdbcTemplate = new JdbcTemplate(dataSource);
        System.out.println("jdbcTemplate is null? " + (jdbcTemplate == null));

    }

//for the context.xml
<context:component-scan base-package="business" />
   <context:component-scan base-package="middleware" />
   <context:component-scan base-package="presentation" /> 
   <context:annotation-config/>

   <tx:annotation-driven transaction-manager="txManager" proxy-target-class="true" />
    <bean id="txManagerProducts" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSourceProducts"/>
    </bean >
    <bean id="txManagerAccounts" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSourceAccounts"/>
    </bean >

     <bean id="dataSourceProducts" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/productsdb" />
        <property name="username" value="root" />
        <property name="password" value="root" />
    </bean> 
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/accountsdb" />
        <property name="username" value="root" />
        <property name="password" value="root" />
    </bean>

事前にご協力いただきありがとうございます。

4

2 に答える 2

2

注入する依存関係の修飾名を指定する場合は、@Named を param 定義の前に置く必要があります。

@Inject
@Override
public void setDataSource(@Named("dataSourceAccounts") DataSource dataSource) {
    // TODO Auto-generated method stub
    this.jdbcTemplate = new JdbcTemplate(dataSource);
    System.out.println("jdbcTemplate is null? " + (jdbcTemplate == null));

}

または春の注釈を使用して:

@Autowired
@Override
public void setDataSource(@Qualifier("dataSourceAccounts") DataSource dataSource)
于 2013-02-16T03:37:11.817 に答える
0

これはうまくいくはずです

@javax.annotation.Resource(name="dataSourceProducts")
public void setDataSource(DataSource dataSource) {
                 ...
}

javax.annotation.Resource は Java SE にあります

于 2013-02-16T03:42:01.047 に答える