一、新建工具类:

DataSourceRepository.java

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ParameterizedPreparedStatementSetter;
import org.springframework.jdbc.core.SingleColumnRowMapper;

import java.util.Collection;
import java.util.List;
import java.util.Map;

public class DataSourceRepository {
    private static final Logger logger = LoggerFactory.getLogger(DataSourceRepository.class);
    private JdbcTemplate jdbcTemplate;

    public DataSourceRepository(JdbcTemplate primaryJdbcTemplate) {
        jdbcTemplate = primaryJdbcTemplate;
    }

    public <T> List<T> queryForList(String sql, Class<T> tClass){
        logger.info("sql: " + sql);
        List<T> resultList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(tClass));
        logger.info("resultList: " + resultList);
        return resultList;
    }

    public <T> List<T> queryForList(String sql, Class<T> tClass, Object... args){
        logger.info("sql: " + sql);
        List<T> resultList = jdbcTemplate.query(sql, args, new BeanPropertyRowMapper<>(tClass));
        logger.info("resultList: " + resultList);
        return resultList;
    }

    public <T> List<T> queryForListSingleColumn(String sql, Class<T> tClass){
        logger.info("sql: " + sql);
        List<T> resultList = jdbcTemplate.query(sql, new SingleColumnRowMapper<>(tClass));
        logger.info("resultList: " + resultList);
        return resultList;
    }

    public <T> List<T> queryForListSingleColumn(String sql, Class<T> tClass, Object... args){
        logger.info("sql: " + sql);
        List<T> resultList = jdbcTemplate.query(sql, args, new SingleColumnRowMapper<>(tClass));
        logger.info("resultList: " + resultList);
        return resultList;
    }

    public List<Map<String, Object>> queryForListMap(String sql){
        logger.info("sql: " + sql);
        List<Map<String, Object>> resultListMap = jdbcTemplate.queryForList(sql);
        logger.info("resultListMap: " + resultListMap);
        return resultListMap;
    }

    public List<Map<String, Object>> queryForListMap(String sql, Object... args){
        logger.info("sql: " + sql);
        List<Map<String, Object>> resultListMap = jdbcTemplate.queryForList(sql, args);
        logger.info("resultListMap: " + resultListMap);
        return resultListMap;
    }

    public Map<String, Object> queryForMap(String sql){
        logger.info("sql: " + sql);
        Map<String, Object> resultMap = jdbcTemplate.queryForMap(sql);
        logger.info("resultMap: " + resultMap);
        return resultMap;
    }

    public Map<String, Object> queryForMap(String sql, Object... args){
        logger.info("sql: " + sql);
        Map<String, Object> resultMap = jdbcTemplate.queryForMap(sql, args);
        logger.info("resultMap: " + resultMap);
        return resultMap;
    }


    public int update(String sql){
        logger.info("sql: " + sql);
        return jdbcTemplate.update(sql);
    }

    public int update(String sql, Object... args){
        logger.info("sql: " + sql);
        return jdbcTemplate.update(sql, args);
    }

    public int[] batchUpdate(String... sql){
        logger.info("sql: " + sql);
        return jdbcTemplate.batchUpdate(sql);
    }

    public int[] batchUpdate(String sql, List<Object[]> batchArgs){
        logger.info("sql: " + sql);
        return jdbcTemplate.batchUpdate(sql, batchArgs);
    }

    public int[] batchUpdate(String sql, BatchPreparedStatementSetter pss) {
        logger.info("sql: " + sql);
        return jdbcTemplate.batchUpdate(sql, pss);
    }

    public <T> int[][] batchUpdate(String sql, Collection<T> batchArgs, int batchSize, ParameterizedPreparedStatementSetter<T> pss) {
        logger.info("sql: " + sql);
        return jdbcTemplate.batchUpdate(sql, batchArgs, batchSize, pss);
    }

}


二、Bean配置:

DataSourceRepositoryConfig.java

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

@Configuration
public class DataSourceRepositoryConfig {
    private static final Logger logger = LoggerFactory.getLogger(DataSourceRepositoryConfig.class);
    @Autowired
    @Qualifier(value="primaryDataSource")
    private DataSource primaryDataSource;

    @Autowired
    @Qualifier(value="secondDataSource")
    private DataSource secondDataSource;


    @Autowired
    @Qualifier(value="primaryJdbcTemplate")
    private JdbcTemplate primaryJdbcTemplate;

    @Autowired
    @Qualifier(value="secondJdbcTemplate")
    private JdbcTemplate secondJdbcTemplate;


    @Bean("primaryDataSourceRepository")
    public DataSourceRepository primaryDataSourceRepository() {
        return new DataSourceRepository(primaryJdbcTemplate);
    }

    @Bean("secondDataSourceRepository")
    public DataSourceRepository secondDataSourceRepository() {
        return new DataSourceRepository(secondJdbcTemplate);
    }




}


三、使用案例:

Test001Runner.java

import com.cqsym.twmshelp.config.DataSourceRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

@Component
public class Test001Runner implements CommandLineRunner {
    private static final Logger log = LoggerFactory.getLogger(Test001Runner.class);
    @Autowired
    @Qualifier(value = "primaryDataSourceRepository")
    private DataSourceRepository primaryDataSourceRepository;
    @Autowired
    @Qualifier(value = "secondDataSourceRepository")
    private DataSourceRepository secondDataSourceRepository;


    @Override
    public void run(String... args) throws Exception {
        log.info("Test001Runner ... ");
        log.info("primaryDataSourceRepository ... ");
        List<String> s1 = primaryDataSourceRepository.queryForListSingleColumn("select current_user() ", String.class);
        log.info("s1 ... " + s1);
        log.info("secondDataSourceRepository ... ");
        List<String> s2 = secondDataSourceRepository.queryForListSingleColumn("select current_user() ", String.class);
        log.info("s2 ... " + s2);
        List<Map<String, Object>> s3 = secondDataSourceRepository.queryForListMap("select * from t_order limit 10 ");
        log.info("s3 ... " + s3);

    }

}