42.3 Spring Boot多数据源

(6)编写测试类java

       咱们编写一个简单的类进行测试下,到底咱们的多数据源是否注入成功了。web

com.kfit.controller.TestController:spring

package com.kfit.controller;sql

 

import java.sql.ResultSet;数据库

import java.sql.SQLException;app

 

import javax.sql.DataSource;ide

 

importorg.springframework.beans.factory.annotation.Autowired;测试

importorg.springframework.beans.factory.annotation.Qualifier;this

importorg.springframework.jdbc.core.JdbcTemplate;代理

importorg.springframework.jdbc.core.RowMapper;

importorg.springframework.web.bind.annotation.RequestMapping;

importorg.springframework.web.bind.annotation.RestController;

 

/**

 * 测试;

 * @author Angel(QQ:412887952)

 * @version v.0.1

 */

@RestController

publicclass TestController {

      

       //没有指定为主数据源.

       @Autowired

       private DataSource dataSource;

      

       @Autowired

       @Qualifier("ds1")

       private DataSource dataSource1;

      

       @Autowired

       @Qualifier("ds2")

       private DataSource dataSource2;

      

       private JdbcTemplate jdbcTemplate;

      

      

       @Autowired

       publicvoidsetJdbcTemplate(JdbcTemplate jdbcTemplate) {

              System.out.println("TestController.setJdbcTemplate()");

              jdbcTemplate.setDataSource(dataSource1);//设置dataSource

              this.jdbcTemplate = jdbcTemplate;

       }

 

       @RequestMapping("/get")

       public String get(){

              //观察控制台的打印信息.

              System.out.println(dataSource);

              return"ok";

       }

      

       @RequestMapping("/get1")

       public String get1(){

              //观察控制台的打印信息.

              System.out.println(dataSource1);

              return"ok.1";

       }

      

       @RequestMapping("/get2")

       public String get2(){

              //观察控制台的打印信息.

              System.out.println(dataSource2);

              return"ok.2";

       }

      

       @RequestMapping("/get3")

       public String get3(){

              //观察控制台的打印信息.

              JdbcTemplatejdbcTemplate = new JdbcTemplate(dataSource1);

              System.out.println(jdbcTemplate.getDataSource());

              System.out.println(jdbcTemplate);

               

              /*

           * Demo1只在test1中存在,test并无此数据库;

           * 须要本身本身进行复制,否则会报错:Table 'test1.demo1'doesn't exist

           */

              Stringsql = "select*from Demo1";

        jdbcTemplate.query(sql, newRowMapper<String>(){

 

            @Override

            public String mapRow(ResultSet rs, introwNum) throws SQLException {

                   System.out.println(rs.getLong("id")+"---"+rs.getString("name"));

               return"";

            }

 

        });

             

              return"ok.3";

       }

      

      

       @RequestMapping("/get4")

       public String get4(){

              //观察控制台的打印信息.

              System.out.println(jdbcTemplate.getDataSource());

              System.out.println(jdbcTemplate);

               

              /*

           * Demo1只在test1中存在,test并无此数据库;

           * 须要本身本身进行复制,否则会报错:Table 'test1.demo1'doesn't exist

           */

              Stringsql = "select*from Demo1";

       jdbcTemplate.query(sql, newRowMapper<String>(){

 

            @Override

            public String mapRow(ResultSet rs, introwNum) throws SQLException {

                   System.out.println(rs.getLong("id")+"---"+rs.getString("name"));

                return"";

            }

 

        });

             

              return"ok.4";

       }

}

       以上代码在实际开发中,是绝对不能这么编写的,这里只是为了方便进行测试。

 

(7)测试

Run As 运行app.java进行测试:

访问:

http://127.0.0.1:8080/get

http://127.0.0.1:8080/get1

http://127.0.0.1:8080/get2

http://127.0.0.1:8080/get3

http://127.0.0.1:8080/get4

查看控制台的打印信息。

 

       然而咱们在项目中不必定须要直接使用dataSource的,你们都习惯使用JDBC的jdbcTemplate、Mybatis的sqlSessionTemplate,再或者就是以Mybatis为例直接动态代理到Mapper接口上。

       那么如何作到彻底动态数据源呢,以致于实现咱们能够为同一个Java类的不一样方法,分别指定使用不一样的数据源?下篇文章将为你们进行讲解,下期见!

相关文章
相关标签/搜索