天天看點

java 擷取spring 資料源_java-Spring:如何使用GenericDao擷取多個資料源?

我有一個使用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