我正在尝试将sqlserver42.jar添加到我的maven webapp。
我按照这里给出的流程
Missing artifact com.microsoft.sqlserver:sqljdbc4:jar:4.0
我从微软网站下载了sqljdbc42.jar,并运行了以下命令。
mvn install:install-file -Dfile=sqljdbc42.jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc42 -Dversion=4.2.0 -Dpackaging=jar
它在我的本地存储库中添加了一个jar文件,并在项目pom.xml中包含以下内容
<dependency>
<groupId>com.microsoft.sqlserver.jdbc</groupId>
<artifactId>sqljdbc</artifactId>
<version>${sqljdbc.version}</version>
</dependency>
我已经在属性中给出了“sqljdbc.version”的值,它解析为正确的值。在我更新maven项目并运行“mvn clean install”后,我能够在我的项目maven依赖项中看到jar文件(在Eclipse中)。
现在,当我尝试运行Web应用程序时,它无法从该jar中选择驱动程序类,并且我遇到以下异常:
java.sql.SQLException:没有为jdbc找到合适的驱动程序:sqlserver://datawh.database.windows.net:1433; database = datawh; user = username @ datawh; password = password;加密= TRUE; trustServerCertificate = FALSE; hostNameInCertificate = .database.windows.net; loginTimeout = 30 在java.sql.DriverManager.getConnection(DriverManager.java:689) 在java.sql.DriverManager.getConnection(DriverManager.java:270) 在com.sprt.rest.dao.AccidentDAOImpl.listAllAccidents(AccidentDAOImpl.java:184) 在com.sprt.rest.service.AccidentServiceImpl.listAllAccidents(AccidentServiceImpl.java:34) 在com.sprt.rest.controller.AccidentController.listAllAccidents(AccidentController.java:43) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ...... *
我为我的应用程序检查了生成的war文件,我注意到在WEB-INF / lib下也可以使用sqljdbc42-4.2.0 jar
我在另一个没有maven的简单java应用程序中使用我的本地存储库中的jar文件,它能够选择驱动程序类。我在maven web应用程序中做错了什么?
我的webapps pom.xml
<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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.b2b.rest</groupId>
<artifactId>b2b-restapi</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>b2b-restapi Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<java-version>1.8</java-version>
<springframework.version>4.3.1.RELEASE</springframework.version>
<jackson.version>2.7.5</jackson.version>
<servlet.version>3.1.0</servlet.version>
<log4j.version>1.2.17</log4j.version>
<hibernate.version>4.2.0.Final</hibernate.version>
<springfox.version>2.5.0</springfox.version>
<sqljdbc.version>4.2.0</sqljdbc.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${springfox.version}</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc42</artifactId>
<version>${sqljdbc.version}</version>
</dependency>
</dependencies>
<build>
<finalName>b2b-restapi</finalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat8-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
我用来连接数据库的连接字符串
JDBC:SQLSERVER://datawh.database.windows.net:1433;数据库= datawh;用户=用户名@ datawh;密码=密码;加密= TRUE; trustServerCertificate = FALSE; hostNameInCertificate = * database.windows.net。 ; loginTimeout = 30
我还必须提一下,我不是要连接到SQL Server数据库但是我正在尝试连接到Microsoft azure SQL Warehouse
答案 0 :(得分:0)
我错误地将责任归咎于Maven。 Maven在war文件的lib文件夹中包含了相应的sqljdbc42.jar。所以它完成了它的工作。我尝试在普通(不是Maven)Web应用程序中复制相同的代码,但它仍然无法正常工作。
在尝试获取连接之前,我添加了以下语句
的Class.forName(&#34; com.microsoft.sqlserver.jdbc.SQLServerDriver&#34);
对于在核心java中完成的应用程序,如果通过&#34;配置构建路径&#34;添加外部库,奇怪的是,我没有必要明确地为Web应用程序添加该语句解决了这个问题对我而言。对于Web应用程序来说,这个类没有自动加载(仍然不明白为什么)