有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

具有多个数据源的java Spring数据控制器

我已经用两个不同的数据源设置了一个Spring数据项目,并试图从单个@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等)在数据库之间进行选择的最佳方式是什么


共 (1) 个答案

  1. # 1 楼答案

    没有什么能阻止你依赖两个JdbcTemplate。您还没有展示代码的其余部分,但是您可以依赖于两个数据源,并在需要时初始化JdbcTemplate,因为它是一个实用类,而不是一个可靠的资源

    传递这两个数据源最简单的方法是使其显式

    <bean id="myBean" class="my.Controller">
      <property name="dataSource1" ref="ds1"/>
      <property name="dataSource2" ref="ds2"/>
    </bean>
    

    不过,您也可以使用@Qualifier,如the documentation所示

    @Controller
    public class Controller {
        ...
        @Autowired
        @Qualifier("ds1")
        private DataSource dataSource1;
    
        @Autowired
        @Qualifier("ds2")
        private DataSource dataSource2;
        ...
    }