我的个人网站:
http://riun.xyz
本文内容:使用java在SpringBoot框架下连接impala,并执行sql语句。
版本:
Java8
spring-boot-starter-parent 1.5.2.RELEASE (不要问我为什么用1.5版本,我也不想用。。)
依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--数据库连接池-->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- 有可能下载不到该Jar, 可以到该地址下载相应版本(不要用老版本!):https://www.cloudera.com/downloads/connectors/impala/jdbc/2-6-3.html -->
<dependency>
<groupId>com.cloudera</groupId>
<artifactId>ImpalaJDBC41</artifactId>
<version>2.6.3</version>
<scope>system</scope> <!--必须!!!-->
<systemPath>${project.basedir}/src/main/resources/jar/ImpalaJDBC41.jar</systemPath>
</dependency>
在resources目录下新建jar文件夹,将ImpalaJDBC41.jar复制进去。添加<scope>system</scope>
后变成可以点开的才行。
bulid信息:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
<goal>build-info</goal>
</goals>
</execution>
</executions>
<configuration>
<includeSystemScope>true</includeSystemScope> <!--包含项目中手动引入的jar,必要-->
<executable>true</executable>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<skipTests>true</skipTests> <!-- 跳过测试类,避免无法运行的过期测试类影响打包 -->
</configuration>
</plugin>
</plugins>
</build>
配置:
impala:
driver-class-name: com.cloudera.impala.jdbc41.Driver
jdbc-url: jdbc:impala://ip:port/databaseName;UseSasl=0;AuthMech=3;UID=userName;PWD=
AuthMech:0 不使用认证,1 使用安全认证,2 使用用户但是不使用密码,3 使用用户名和密码
UID:用户名(注意用户是否有操作权限)
PWD:密码(密码有就写,没有就不写)
注入数据源:
package xyz.riun.config;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
/**
* impala数据源
*/
@Configuration
public class DataSourceConfig {
@Value("${impala.driver-class-name}")
private String driverClassName;
@Value("${impala.jdbc-url}")
private String jdbcUrl;
@Bean(name = "impalaDataSource")
@Qualifier(value = "impalaDataSource")
public DataSource primaryDataSource() {
HikariConfig config = new HikariConfig();
config.setDriverClassName(driverClassName);
config.setJdbcUrl(jdbcUrl);
HikariDataSource dataSource = new HikariDataSource(config);
return dataSource;
}
@Bean(name = "jdbcTemplateImpala")
public JdbcTemplate jdbcTemplateImpala(@Qualifier("impalaDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
使用:
@Slf4j
@RequestMapping("xxx")
@RestController
public class ImpalaController {
//注入
@Autowired
private JdbcTemplate jdbcTemplateImpala;
@PostMapping("test")
public void test() {
//执行查询语句
jdbcTemplateImpala.queryForList(sql);
//执行其他没有返回值的语句
jdbcTemplateImpala.execute(sql)
}
}
如果需要上传sql脚本处理,那么可以将获取到的sql按照英文; 截断,根据是否是select语句依次执行每段sql。