我已经设置了一个包含两个不同数据源的Spring Data项目,并尝试从单个@Controller
调用特定于数据库的函数。我为每个数据源都有两个独立的实体管理器,连接属性和事务管理器。
以下是我当前的@Controller
@RequestMapping(value = "/searchDB1", produces="application/json", method = RequestMethod.GET)
public List<Map<String, Object>> getList1() {
List<Map<String, Object>> list = this.jdbcTemplate.queryForList(
"select name, id from db1.Database1"
);
return list;
}
@RequestMapping(value = "/searchDB2", produces="application/json", method = RequestMethod.GET)
public void getList2() {
List<Map<String, Object>> list = this.jdbcTemplate.queryForList(
"select name, id from db2.Database2"
);
}
这显然会失败,因为我的jdbcTemplate一次只连接到一个数据库 - 这可能是我的控制器根据调用的方法(抽象到服务Impl等)在数据库之间进行选择的最佳方式。 / p>
答案 0 :(得分:3)
根据两个JdbcTemplate
,没有什么可以阻止你。您尚未显示其余代码,但您可以依赖两个数据源并在需要时初始化JdbcTemplate
,因为它是一个实用程序类而不是可靠资源。
传递两个数据源的最简单方法是使其显式化。
<bean id="myBean" class="my.Controller">
<property name="dataSource1" ref="ds1"/>
<property name="dataSource2" ref="ds2"/>
</bean>
尽管如此,您还可以使用the documentation中显示的@Qualifier
。
@Controller
public class Controller {
...
@Autowired
@Qualifier("ds1")
private DataSource dataSource1;
@Autowired
@Qualifier("ds2")
private DataSource dataSource2;
...
}