SpringBoot版本: 2.2.5.RELEASE
JDBC版本: org.apache.hive:hive-jdbc:1.1.0
按照神策官方文档,推荐使用org.apache.hive:hive-jdbc:1.1.0这个版本的JDBC来连接。https://manual.sensorsdata.cn/sa/latest/tech_export_jdbc-1573831.html
但会有问题,这个版本的sf4j会跟SpringBoot的sf4j有冲突。如果按照这个这个gradle设置
plugins { id 'org.springframework.boot' version '2.2.5.RELEASE' id 'io.spring.dependency-management' version '1.0.9.RELEASE' id 'java' } group = 'com.ppwang' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' repositories { maven { url "http://maven.aliyun.com/nexus/content/groups/public/" } maven { url "https://oss.sonatype.org/content/groups/public/" } maven { url "https://repo.spring.io/libs-milestone/" } jcenter() mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } compile group: 'org.apache.hive', name: 'hive-jdbc', version: '1.1.0' // https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jdbc compile group: 'org.apache.tomcat', name: 'tomcat-jdbc' // https://mvnrepository.com/artifact/org.springframework/spring-jdbc compile group: 'org.springframework', name: 'spring-jdbc' } test { useJUnitPlatform() }
它会报个错出来
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/Users/birdylee/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-log4j12/1.7.30/c21f55139d8141d2231214fb1feaf50a1edca95e/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/Users/birdylee/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-classic/1.2.3/7c4f3c474fb2c041d8028740440937705ebb473a/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] Exception in thread "main" java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.impl.Log4jLoggerFactory loaded from file:/Users/birdylee/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-log4j12/1.7.30/c21f55139d8141d2231214fb1feaf50a1edca95e/slf4j-log4j12-1.7.30.jar). If you are using WebLogic you will need to add 'org.slf4j' to prefer-application-packages in WEB-INF/weblogic.xml: org.slf4j.impl.Log4jLoggerFactory at org.springframework.util.Assert.instanceCheckFailed(Assert.java:696) at org.springframework.util.Assert.isInstanceOf(Assert.java:596) at org.springframework.boot.logging.logback.LogbackLoggingSystem.getLoggerContext(LogbackLoggingSystem.java:281) at org.springframework.boot.logging.logback.LogbackLoggingSystem.beforeInitialize(LogbackLoggingSystem.java:104) at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationStartingEvent(LoggingApplicationListener.java:239) at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:220) at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127) at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:70) at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:47) at org.springframework.boot.SpringApplication.run(SpringApplication.java:305) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) at com.ppwang.bigscreen.BigscreenApplication.main(BigscreenApplication.java:10) Process finished with exit code 1
google查了一下,主要是log的那些包重复引入了。后通过调整依赖解决。build.gradle最终如下
plugins { id 'org.springframework.boot' version '2.2.5.RELEASE' id 'io.spring.dependency-management' version '1.0.9.RELEASE' id 'java' } group = 'com.ppwang' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' repositories { maven { url "http://maven.aliyun.com/nexus/content/groups/public/" } maven { url "https://oss.sonatype.org/content/groups/public/" } maven { url "https://repo.spring.io/libs-milestone/" } jcenter() mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } implementation('org.apache.hive:hive-jdbc:1.1.0') { exclude group: 'org.slf4j', module: 'slf4j-log4j12' exclude group: 'log4j', module: 'log4j' } // https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jdbc compile group: 'org.apache.tomcat', name: 'tomcat-jdbc' // https://mvnrepository.com/artifact/org.springframework/spring-jdbc compile group: 'org.springframework', name: 'spring-jdbc' } test { useJUnitPlatform() }
Have fun with Jave!