1. ホーム
  2. スプリング

一致するビーンは1つだと思ったが、2つ見つかった:onedbJdbcTemplate,twodbJdbcTemplate

2022-03-16 07:34:45

タイトル通りの例外問題、詳細は下記参照

Error creating bean with name 'monitorDao': 
Injection of autowired dependencies failed;
 nested exception is org.springframework.beans.factory: 
 Could not autowire field: 
 private org.springframework.jdbc.core. 
 com.yonyou.iuap.disconf.web.service.monitor.service.dao.MonitorDao.jt; 
 nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: 
 No qualifying bean of type [org.springframework.jdbc.core.JdbcTemplate] is defined: 
 expected single matching bean but found 2: onedbJdbcTemplate,twodbJdbcTemplate

原因

2つのjdbctemplateビーンが作成されたが、デフォルトで呼び出される他のメソッドがあり、どちらのビーンを使用するべきかspringに不明確であった。

によって修正されました。

元の設定ファイルではデータソースであるdataSourceの設定のみで、新しいjdbctemplateを使用するDao層では、以下のメソッドを追加してください。

@Service
public class AppAuthDaoImpl extends JdbcDaoSupport implements AppAuthDao{
	
	private JdbcTemplate jdbcTemplate;
	
	@Autowired(required = false)
	@Qualifier("YYCdataSource")
	public void setDataSource(DataSource dataSource) {
	    super.setDataSource(dataSource);
	    jdbcTemplate = new JdbcTemplate(dataSource);
	}
	
	@Override
	public List<String> listUserIdFromConfCenterDataAuth(String inviterId) {
		String sql = "select user_id from user where inviter_id = ? ";
		return jdbcTemplate.queryForList(sql, new Object[] {inviterId},String.class);
	}

}