Springboot --- 配置多数据源,使用JdbcTemplate以及NamedParameterJdbcTemplate

整理不易,不喜勿喷。谢谢

SpringBoot — 整合Ldap.
SpringBoot — 整合Spring Data JPA.
SpringBoot — 整合Elasticsearch.
SpringBoot — 整合spring-data-jpa和spring-data-elasticsearch.
SpringBoot — 整合thymeleaf.
SpringBoot — 注入第三方jar包.
SpringBoot — 整合Redis.
Springboot — 整合slf4j打印日志.
Springboot — 整合定时任务,自动执行方法.
Springboot — 配置多数据源,使用JdbcTemplate以及NamedParameterJdbcTemplate.
Sprignboot — 详解pom.xml中build和profile.
SpringBoot — 监控.
SpringBoot — 缓存Cache/Redis.
SpringBoot与Zookeeper.
Git的使用.

部分内容抄这个大神的 => Spring Boot多数据源配置之JdbcTemplate.

1.dependencys

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--influx-->
        <dependency>
            <groupId>org.influxdb</groupId>
            <artifactId>influxdb-java</artifactId>
            <version>2.15</version>
        </dependency>
    </dependencies>

2.application.properties

spring.datasource.one.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.one.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.one.jdbc-url=jdbc:sqlserver://10.xxx.xxx.xxx:1433;DatabaseName=xxxx
spring.datasource.one.username=xxxx
spring.datasource.one.password=xxxx

spring.datasource.two.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.two.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.two.jdbc-url=jdbc:sqlserver://10.xxx.xxx.xxx:1433;DatabaseName=xxxx
spring.datasource.two.username=xxxx
spring.datasource.two.password=xxx

3.Config类

@Configuration
public class DataSourceConfig {

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.one")
    public DataSource dsOne(){
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.two")
    public DataSource dsTwo(){
        return DataSourceBuilder.create().build();
    }

}
@Configuration
public class JdbcTemplateConfig {

     @Bean
     @Primary
     public JdbcTemplate jdbcTemplateOne(@Qualifier("dsOne")DataSource dsOne){
          return new JdbcTemplate(dsOne);
     }

     @Bean
     public JdbcTemplate jdbcTemplateTwo(@Qualifier("dsTwo")DataSource dsTwo){
          return new JdbcTemplate(dsTwo);
     }
}

4.service

@Service
public class DataMapperService {

    @Autowired
    @Qualifier("jdbcTemplateOne")
    private JdbcTemplate jdbcTemplateOne;

    @Autowired
    @Resource(name = "jdbcTemplateTwo")
    private JdbcTemplate jdbcTemplateTwo;

    public List<BusinessTermEntity> getAllTerms(String sql) {
        return jdbcTemplateOne.query(sql, new BusinessTermMapper());
    }

    private class BusinessTermMapper implements RowMapper<BusinessTermEntity> {
        @Override
        public BusinessTermEntity mapRow(ResultSet resultSet, int i) throws SQLException {
        	
            BusinessTermEntity bt = new BusinessTermEntity();
            bt.setBusinessTermId(checkResultOfQueryBigInte(resultSet.getObject("business_term_id")));
            bt.setIsCurrentVersion(resultSet.getNString("is_current_version"));
            bt.setBatchStatus(resultSet.getNString("batch_status"));
            bt.setHasExtendedText(resultSet.getNString("has_extended_text"));
            bt.setEndDt(resultSet.getTimestamp("end_dt"));
            return bt;
        }
    }
@Service
public class DataPipelineService {

    @Autowired
    private DataPipelineDao dataPipelineDao;
    @Autowired
    private DataMapperService dataMapperService;
    @Value("${name}")
    private String environment;

    public Long getTermByName(String name) {
    		
				
        String getName = dataPipelineDao.getTermName("xxxx");
        List<BusinessTermEntity> allTerms = dataMapperService.getAllTerms(getName);
        long businessTermId = allTerms.get(0).getBusinessTermId().longValue();
        return businessTermId;
    }

5.NamedParameterJdbcTemplate

NamedParameterJdbcTemplate类是基于JdbcTemplate类,并对它进行了封装从而支持命名参数特性。

NamedParameterJdbcTemplate主要提供以下三类方法:execute方法、query及queryForXXX方法、update及batchUpdate方法

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
    @Autowired
    NamedParameterJdbcTemplate namedParameterJdbcTemplate;

    @Test
    void contextLoads() {
        String sql = "select count(employId) from user where deparement_id =:deptId order by age desc";
        MapSqlParameterSource mapSqlParameterSource = new MapSqlParameterSource();
        mapSqlParameterSource.addValue("deptId", 3);
        Integer count = namedParameterJdbcTemplate.queryForObject(sql, mapSqlParameterSource, Integer.class);
    }

    //insert
    @Test
    void test() {
        User user = new User();
        user.setId(UUID.randomUUID().toString());
        user.setName("旺财");
        user.setHomeAddress("唐伯虎家");

        namedParameterJdbcTemplate.update("insert into student(id,name,home_address) values (:id,:name,:homeAddress)",
                new BeanPropertySqlParameterSource(user));
    }

    //update
    @Test
    void test1() {
        User user = new User();
        user.setId(1);
        user.setName("旺财");
        user.setHomeAddress("唐伯虎家");

        String sql = "update user set name =:name and homeAddress =:homeAddress where id = :id";
        SqlParameterSource source = new BeanPropertySqlParameterSource(user);
        namedParameterJdbcTemplate.update(sql, source);
    }


    //query entity
    @Test
    void test2() {
        User user = namedParameterJdbcTemplate.queryForObject(
                "select * from student limit 1", new HashMap<>(), new BeanPropertyRowMapper<User>(User.class));
    }

    @Test
    void test3() {
        List<User> userList = namedParameterJdbcTemplate.query(
                "select * from USER",
                new BeanPropertyRowMapper<>(User.class)
        );
    }    @Autowired
    NamedParameterJdbcTemplate namedParameterJdbcTemplate;

    @Test
    void contextLoads() {
        String sql = "select count(employId) from user where deparement_id =:deptId order by age desc";
        MapSqlParameterSource mapSqlParameterSource = new MapSqlParameterSource();
        mapSqlParameterSource.addValue("deptId", 3);
        Integer count = namedParameterJdbcTemplate.queryForObject(sql, mapSqlParameterSource, Integer.class);
    }

    //insert
    @Test
    void test() {
        User user = new User();
        user.setId(UUID.randomUUID().toString());
        user.setName("旺财");
        user.setHomeAddress("唐伯虎家");

        namedParameterJdbcTemplate.update("insert into student(id,name,home_address) values (:id,:name,:homeAddress)",
                new BeanPropertySqlParameterSource(user));
    }

    //update
    @Test
    void test1() {
        User user = new User();
        user.setId(1);
        user.setName("旺财");
        user.setHomeAddress("唐伯虎家");

        String sql = "update user set name =:name and homeAddress =:homeAddress where id = :id";
        SqlParameterSource source = new BeanPropertySqlParameterSource(user);
        namedParameterJdbcTemplate.update(sql, source);
    }


    //query entity
    @Test
    void test2() {
        User user = namedParameterJdbcTemplate.queryForObject(
                "select * from student limit 1", new HashMap<>(), new BeanPropertyRowMapper<User>(User.class));
    }

    @Test
    void test3() {
        List<User> userList = namedParameterJdbcTemplate.query(
                "select * from USER",
                new BeanPropertyRowMapper<>(User.class)
        );
    }
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐