我有一個使用Spring 3.1.1的Web應用程式.
我們有一個使用JdbcTemplate的genericDao.資料源正在GenericDaoImpl中注入.
public class GenericDaoImpl implements GenericDao {
protected Class entityClass;
protected JdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
....
@Override
public List findAll(String sql, ParameterizedRowMapper mapper, Object... args) {
return jdbcTemplate.query(sql, mapper, args);
}
}
這是一個簡單的DAO.
@Repository
public class ElementDaoImpl extends GenericDaoImpl implements ElementDao {
private static ParameterizedRowMapper mapper = new ParameterizedRowMapper() {...};
public List findChildren(int id) {
sql = "SELECT....";
return findAll(sql, mapper, new Object[] {id});
}
}
暫時,借助獨特的資料源,它可以完美運作.
applicationContext配置有注釋.
現在,我必須仍然使用genericDao來內建一個新的DAO,但是要在另一個資料庫上工作(是以是另一個資料源).
我在服務中使用@Transactionnal.我閱讀了Spring文檔,我們可以為交易指定條件,以便選擇優秀的交易管理器.
是以,我建立了一個新的資料源,一個新的事務管理器…
在我的新服務上,我已将該值添加到@Transactionnal批注中:
@Transactionnal("txSecond")
要恢複,我有4個類來管理新資料庫:服務接口,@Transactionnal(“ txSecond”)服務實作,DAO接口,基于genericDao的DAO實作,在注入的資料源上建立了JdbcTemplate對象.
我建立了一個Junit測試,但是暫時,我阻止了一個異常:NoSuchBeanDefinitionException:沒有定義類型javax.sql.DataSource的唯一bean.預期單個比對的Bean,但找到了2個(firstD,SecondD).
我認為pb是genericDao,但不确定.
如何處理?
謝謝.
解決方法:
在配置檔案中的每個bean上手動設定dataSource
标簽:jdbc,transactions,spring,java
來源: https://codeday.me/bug/20191127/2073583.html