java连接impala 2020-09-28 17:54 **本文内容:使用java在SpringBoot框架下连接impala,并执行sql语句。** 版本: > Java8 > > spring-boot-starter-parent 1.5.2.RELEASE (不要问我为什么用1.5版本,我也不想用。。) 依赖: ```xml <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> <!--如果你也是下载的jar引入项目,那么必须!!!--> <systemPath>${project.basedir}/src/main/resources/jar/ImpalaJDBC41.jar</systemPath> </dependency> ``` 在resources目录下新建jar文件夹,将ImpalaJDBC41.jar复制进去。添加`<scope>system</scope>`后变成可以点开的才行。  bulid信息: ```xml <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> ``` 配置: ```yml 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:密码(密码有就写,没有就不写) 注入数据源: ```java 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); } } ``` 使用: ```java @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。 --END--
发表评论