前期准備
創建一個SpringBoot項目,可以先不選擇依賴,待會再pom.xml里面再導入相應的依賴。
項目結構
配置環境
導入包依賴pom.xml
spring-boot-starter-web(網頁展示)
impala-jdbc41(impala-jdbc連接)
com.alibaba.druid(阿里巴巴數據源)
mybatis-spring-boot-starter(SpringBoot整合Mybatis包)
lombok(簡化代碼)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.data</groupId>
<artifactId>impala-connect</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>impala-connect</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>impala</groupId>
<artifactId>impala-jdbc41</artifactId>
<version>2.6.4.1005</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.29</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.14</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置文件application.yml
主要配置端口號、Impala連接、Mybatis掃描
server:
port: 9001
spring:
application:
name: impala-connect
impala:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:impala://xx.xx.xx.xx:21050/default
driver-class-name: com.cloudera.impala.jdbc41.Driver
# 初始化大小,最小,最大
initialSize: 5
minIdle: 5
maxIdle: 100
maxActive: 200
# 配置獲取連接等待超時的時間
maxWait: 5000
# 每次使用連接時進行校驗,會影響系統性能。默認為false
testOnBorrow: false
#
testOnReturn: false
# 驗證使用的SQL語句
validationQuery: SELECT 1
# 指明連接是否被空閑連接回收器(如果有)進行檢驗.如果檢測失敗,則連接將被從池中去除
testWhileIdle: true
# 每30秒運行一次空閑連接回收器(默認-1)
timeBetweenEvictionRunsMillis: 30000
# 池中的連接空閑30分鍾后被回收(默認30分鍾)
minEvictableIdleTimeMillis: 1800000
# 在每次空閑連接回收器線程(如果有)運行時檢查的連接數量(設置為和maxIdle一樣)
numTestsPerEvictionRun: 100
mybatis:
type-aliases-package: com.data.model
impala-mapper-locations: classpath*:impalaMapping/*.xml
Impala連接配置
這個配置主要使用阿里巴巴數據源配置Impala的一些連接配置,如路徑、驅動以及mybatis的掃描包路徑等。
package com.data.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
@Configuration
@EnableTransactionManagement
@MapperScan(basePackages = "com.data.mapper.impala", sqlSessionFactoryRef = "impalaSessionFactory")
public class ImpalaSourceConfig {
@Value("${spring.impala.url}")
private String url;
@Value("${spring.impala.driver-class-name}")
private String driverClass;
@Value("${spring.impala.maxActive}")
private Integer maxActive;
@Value("${spring.impala.initialSize}")
private Integer initialSize;
@Value("${spring.impala.minIdle}")
private Integer minIdle;
@Value("${spring.impala.maxWait}")
private Integer maxWait;
@Value("${mybatis.type-aliases-package}")
private String PACKAGE;
@Value("${mybatis.impala-mapper-locations}")
private String LOCATION;
@Bean(name = "impalaDataSource")
public DataSource impalaDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setMaxActive(maxActive);
dataSource.setInitialSize(initialSize);
dataSource.setMinIdle(minIdle);
dataSource.setMaxWait(maxWait);
return dataSource;
}
@Bean(name = "impalaTransactionManager")
public DataSourceTransactionManager impalaTransactionManager() {
return new DataSourceTransactionManager(impalaDataSource());
}
@Bean(name = "impalaSessionFactory")
public SqlSessionFactory impalaSessionFactory() throws Exception {
final SqlSessionFactoryBean SESSIONFACTORY = new SqlSessionFactoryBean();
SESSIONFACTORY.setDataSource(impalaDataSource());
SESSIONFACTORY.setTypeAliasesPackage(PACKAGE);
System.out.println("------------------->"+PACKAGE);
System.out.println("---------------------->"+LOCATION);
SESSIONFACTORY.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(LOCATION));
SESSIONFACTORY.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);//該配置將數據庫中下划線自動轉成駝峰命名的變量,並且只針對自定義的實體類生效,對map不生效的
return SESSIONFACTORY.getObject();
}
}
搭建實例
model:存放實體類,這里使用Lombok的@Data注釋,可以自動添加getter/setter等
package com.data.model;
import lombok.Data;
@Data
public class Person {
private Integer id;
private String name;
}
mapper:持久層,添加@Repository注解,聲明其是存儲層bean
package com.data.mapper.impala;
import com.data.model.Person;
import org.springframework.stereotype.Repository;
@Repository
public interface ImpalaMapper {
void executeSql(Person person);
}
ImpalaMapper.xml:在這里寫sql語句
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.data.mapper.impala.ImpalaMapper">
<insert id="executeSql" parameterType="com.data.model.Person">
insert into test_person values(#{id},#{name});
</insert>
</mapper>
service:服務層,添加@Component,把普通pojo實例化到spring容器中
package com.data.services;
import com.data.mapper.impala.ImpalaMapper;
import com.data.model.Person;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class ImpalaService {
@Resource
private ImpalaMapper impalaMapper;
public void executeSql(Person person) {
try {
impalaMapper.executeSql(person);
} catch (Exception e) {
e.printStackTrace();
}
}
}
controller:控制層,添加@RestController,相當於@RequestBody+@Controller
package com.data.controller;
import com.data.model.Person;
import com.data.services.ImpalaService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
public class ImpalaController {
@Resource
private ImpalaService impalaService;
@GetMapping("/test")
public String insertPerson() {
Person person = new Person();
person.setId(1);
person.setName("張三");
impalaService.executeSql(person);
return "新增記錄成功!";
}
}
驗證測試
啟動ImpalaConnectApplication.class,打開http://localhost:9001/test,若能出現如此畫面
說明你已經成功了,接下來我們去Impala數據庫去驗證一下,執行命令select * from test_person,出現下面的畫面,恭喜你已經完成這一整個項目啦!!!
總結
最后,我們來總結一下,首先導入相應的依賴包以及配置好application.yml,接着使用阿里巴巴數據源搭建好impala連接,然后根據自己的需求編寫中間的實現邏輯,最后就可以去驗證自己的功能啦。
————————————————
版權聲明:本文為CSDN博主「BlankDC」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_42265981/article/details/103095841