【问题标题】:liquibase maven hangs when trying to connect to sql server 2012liquibase maven 在尝试连接到 sql server 2012 时挂起
【发布时间】:2014-06-18 05:27:39
【问题描述】:

我正在尝试使用 maven 为 sql server 2012 设置 liquibase。我正在使用 sqljdbc4.jar 并尝试使用 Windows 身份验证连接到 sql server。使用 Windows 身份验证,我还包含以下行作为 VM 参数来读取文件 sqljdbc_auth.dll

-Djava.library.path="D:\Microsoft JDBC Driver 4.0 for SQL Server\sqljdbc_4.0\enu\auth\x86"

我不知道为什么当我在 maven (liquibase:update -PlocalDB -e -X) 中运行 liquibase 时它会挂起并出现此错误:

[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.1.1:update (default-cli) on project Database: Error setting up or running Liquibase: liquibase.exception.DatabaseException: com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset ClientConnectionId:47817196-07c1-4fc8-92e2-7e03ca044fcb -> [Help 1]

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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test.liquibase</groupId>
<artifactId>Database</artifactId>
<version>1.0</version>
<properties>
    <skipTests>true</skipTests>
    <jdk-version>1.6</jdk-version>
    <sqlserver-version>4.0</sqlserver-version>
    <liquibase-version>3.1.1</liquibase-version>
</properties>
<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>${jdk-version}</source>
                    <target>${jdk-version}</target>
                    <skipTests>${skipTests}</skipTests>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-maven-plugin</artifactId>
                <version>${liquibase-version}</version>
                <configuration>
                    <changeLogFile>src/main/resources/changelogs/changelog-master.xml</changeLogFile>
                    <driver>${database.driver}</driver>
                    <url>${database.url}</url>
                </configuration>
                <executions>
                    <execution>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>update</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>
<profiles>
    <profile>
        <id>localDB</id>
        <properties>
            <database.driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</database.driver>
            <database.url>jdbc:sqlserver://computername:1433;databaseName=Test_Liquibase;integratedSecurity=true</database.url>
        </properties>
    </profile>
</profiles>
<dependencies>
    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>sqljdbc4</artifactId>
        <version>${sqlserver-version}</version>
    </dependency>
    <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-core</artifactId>
        <version>${liquibase-version}</version>
    </dependency>
</dependencies>

编辑来自 maven 的完整堆栈跟踪

[错误] 无法在项目数据库上执行目标 org.liquibase:liquibase-maven-plugin:3.1.1:update (default-cli):设置或运行 Liquibase 时出错:liquibase.exception.DatabaseException:com.microsoft .sqlserver.jdbc.SQLServerException:连接重置 ClientConnectionId:38797943-7fe8-49e7-8565-5f72dfd6ed1e -> [帮助 1] org.apache.maven.lifecycle.LifecycleExecutionException:无法在项目数据库上执行目标 org.liquibase:liquibase-maven-plugin:3.1.1:update (default-cli):设置或运行 Liquibase 时出错:liquibase.exception.DatabaseException : com.microsoft.sqlserver.jdbc.SQLServerException: 连接重置 ClientConnectionId:38797943-7fe8-49e7-8565-5f72dfd6ed1e 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 在 org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 在 org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 在 org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 在 org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 在 org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 在 org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 在 org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 在 org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 在 org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 原因:org.apache.maven.plugin.MojoExecutionException:设置或运行 Liquibase 时出错:liquibase.exception.DatabaseException:com.microsoft.sqlserver.jdbc.SQLServerException:连接重置 ClientConnectionId:38797943-7fe8-49e7-8565-5f72dfd6ed1e 在 org.liquibase.maven.plugins.AbstractLiquibaseMojo.execute(AbstractLiquibaseMojo.java:381) 在 org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) ... 19 更多 引起:liquibase.exception.DatabaseException:liquibase.exception.DatabaseException:com.microsoft.sqlserver.jdbc.SQLServerException:连接重置ClientConnectionId:38797943-7fe8-49e7-8565-5f72dfd6ed1e 在 liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:61) 在 org.liquibase.maven.plugins.AbstractLiquibaseMojo.execute(AbstractLiquibaseMojo.java:330) ... 21 更多 引起:liquibase.exception.DatabaseException:com.microsoft.sqlserver.jdbc.SQLServerException:连接重置ClientConnectionId:38797943-7fe8-49e7-8565-5f72dfd6ed1e 在 liquibase.database.DatabaseFactory.openConnection(DatabaseFactory.java:231) 在 liquibase.database.DatabaseFactory.openDatabase(DatabaseFactory.java:141) 在 liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:52) ... 22 更多 引起:com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset ClientConnectionId:38797943-7fe8-49e7-8565-5f72dfd6ed1e 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1667) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1654) 在 com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:1789) 在 com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:4838) 在 com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:6154) 在 com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:6106) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2907) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:2234) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:2220) 在 com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1326) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827) 在 com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012) 在 liquibase.database.DatabaseFactory.openConnection(DatabaseFactory.java:223) ... 24 更多

【问题讨论】:

  • maven 挂起时是否可以获取堆栈跟踪? ctrl+break 通常会在 windows 上执行此操作,并在 unix 上为 java 应用程序 kill -QUIT PID 但我不确定 maven 是否会妨碍它。
  • @NathanVoxland 我已经使用 Maven 的完整堆栈跟踪编辑了我的问题,希望这会有所帮助...

标签: sql-server maven liquibase


【解决方案1】:

Liquibase 似乎正在尝试打开连接,但由于 JDBC 驱动程序出现“连接重置 ClientConnectionId”错误而失败。

连接调用只是driverObject.Connect(url, properties) 其中properties 是用户名和密码(如果在maven 中指定)。由于您没有指定它们,因此它们应该为空。

您是否能够使用您提供的 URL 正常连接到数据库?这可能是防火墙/网络问题。否则我会怀疑导致问题的 Windows 身份验证尝试。

【讨论】:

  • 我可以通过 SSMS 正常连接到数据库,使用 Windows 身份验证或 Sql Server 身份验证。如果我尝试使用 liquibase-maven-plugin 使用 Sql Server 身份验证连接到数据库,它会说我的登录失败。我知道当我通过 weblogic 连接到数据库时我的登录确实有效,所以我的连接字符串应该是正确的......
  • 我没有尝试使用 windows auth 和 maven 连接到 sqlserver。 stackoverflow.com/questions/13495203/… 列出了一些可能有帮助的步骤。
【解决方案2】:

将 maven 更改为使用 java 7,而不是 java 6,Windows 身份验证和 SQL Server 身份验证工作,我能够连接。 :)

【讨论】:

  • jdk 1.6.29 和连接数据库存在已知问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 1970-01-01
  • 2014-03-16
  • 1970-01-01
相关资源
最近更新 更多