具有多个数据源的Spring Data Controller

时间:2015-06-09 18:19:41

标签: java spring spring-mvc

我已经设置了一个包含两个不同数据源的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>

1 个答案:

答案 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;
    ...
}