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);
}
}
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);
}
}
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);
}
}