我在我的Spring批處理代碼中遇到一個錯誤: 在類路徑資源中定義名爲'itemReader'的bean時出錯,無法將類型爲'$ Proxy0'的屬性值轉換爲屬性'preparedStatementSetter'所需的類型。
這是我的ItemReader代碼:
<beans:bean id="itemReader"
class="org.springframework.batch.item.database.JdbcCursorItemReader">
<beans:property name="dataSource" ref="dataSource"/>
<beans:property name="sql" value="select * from Trans_Tst WHERE id =?"/>
<beans:property name="rowMapper" ref="romMapper"/>
<beans:property name="preparedStatementSetter" ref="ReaderSqlParameterSetter"/>
</beans:bean>
<beans:bean id="ReaderSqlParameterSetter"
class="sa.com.anb.itg.dev.settlement.batch.ReaderSqlParameterSetter" scope="step">
<beans:property name="id" value="#{jobParameters[id]}"/>
</beans:bean>
,這是我ReaderSqlParameterSetter類:
package sa.com.anb.itg.dev.settlement.batch;
import java.sql.PreparedStatement;
import org.springframework.batch.item.database.ItemPreparedStatementSetter;
import java.sql.SQLException;
public class ReaderSqlParameterSetter implements
ItemPreparedStatementSetter<transactionas>{
public void setValues(transactionas transactionas,PreparedStatement ps)
throws SQLException {
ps.setInt(1, transactionas.GetID());
}
}
<beans:bean id="jdbcWriter"
class="org.springframework.batch.item.database.JdbcBatchItemWriter">
<beans:property name="dataSource" ref="dataSource"/>
<beans:property name="sql" value="update Trans_Tst set()amount) values (?)
where id= ?"/>
<beans:property name="preparedStatementSetter"
ref="WriterSqlParameterSetter"/>
</beans:bean>
<beans:bean id="WriterSqlParameterSetter"
class="sa.com.anb.itg.dev.settlement.batch.WriterSqlParameterSetter" scope="step">
<beans:property name="amount" value="#{jobParameters[amount]}"/>
<beans:property name="id" value="#{jobParameters[id]}"/>
</beans:bean>
public class WriterSqlParameterSetter implements PreparedStatementSetter {
transactionas transactionas = new transactionas();
public void setValues(PreparedStatement ps) throws SQLException {
ps.setDouble(1, transactionas.GetAmount());
ps.setInt(2, transactionas.GetID());
}
}
有人能幫助我嗎?
這意味着你正在嘗試將一個代理對象注入到一個名爲'preparedStatementSetter'的屬性中,但這些類型不匹配。沒有看到setter的代碼,或者它是如何被注入的,我最好的猜測是你正在通過它的具體類來引用'preparedStatementSetter',而不是它的接口。可能的話,您應該始終使用界面作爲您的參考持有者。 – CodeChimp
感謝您的回覆。我添加了缺少的代碼,請提供更遠的提示? – user1744446
你的AOP東西是如何設置的?我認爲如果你使用CGLib,它會創建與標準JDK方式不同的代理。 – CodeChimp