【问题标题】:HikariCP is not found when running the jar运行jar时找不到HikariCP
【发布时间】:2017-03-18 00:21:49
【问题描述】:

在一个项目中,我们使用 Hibernate 和 HikariCP,它在 Eclipse 中一切正常。但是一旦我生成了一个 jar 文件(Maven),就再也找不到 hikaricp 了。我已经从各个可能的角度转动了它,但我不知道出了什么问题......

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
 version="2.0">
    <persistence-unit name="starmap" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>net.clanwolf.c3.transfer.pojos.User</class>
        <class>net.clanwolf.c3.transfer.pojos.RolePlayStory</class>
        <class>net.clanwolf.c3.transfer.pojos.RolePlayCharacter</class>
        <class>net.clanwolf.c3.transfer.pojos.RolePlayStoryVar2</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://**.**.**.**:3306/C3?useUnicode=yes&amp;characterEncoding=UTF-8" />
            <property name="current_session_context_class" value="thread" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />

            <!-- Hikari connection pool -->
            <property name="hibernate.hikari.dataSource.url" value="jdbc:mysql://**.**.**.**:3306/C3?useUnicode=yes&amp;characterEncoding=UTF-8" />
            <property name="hibernate.hikari.dataSource.user" value="**"/>
            <property name="hibernate.hikari.maximumPoolSize" value="100" />
            <property name="hibernate.hikari.idleTimeout" value="30000" />
            <property name="hibernate.hikari.dataSource.cachePrepStmts" value="true" />
            <property name="hibernate.hikari.dataSource.prepStmtCacheSize" value="250" />
            <property name="hibernate.hikari.dataSource.prepStmtCacheSqlLimit" value="2048" />
            <property name="hibernate.hikari.dataSource.useServerPrepStmts" value="true" />
        </properties>
    </persistence-unit>
</persistence>

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>

    ...

    <dependencies>
        <!-- Database persistence -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <!-- <version>5.1.33</version> -->
            <version>6.0.5</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.1.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.1.0.Final</version>
            <!-- <version>5.0.3.Final</version> -->
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-ehcache</artifactId>
            <version>5.1.0.Final</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <version>2.6.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-hikaricp -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-hikaricp</artifactId>
            <version>5.2.7.Final</version>
        </dependency>

        ...

        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.2.RELEASE</version>
        </dependency>
        <!--@Transactional -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.2.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>4.2.1.RELEASE</version>
        </dependency>

        ...

        <dependency>
            <groupId>org.hibernate.common</groupId>
            <artifactId>hibernate-commons-annotations</artifactId>
            <version>5.0.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.1-api</artifactId>
            <version>1.0.0.Final</version>
        </dependency>

        ...

    </dependencies>
</project>

如果我在 Eclipse 中运行它,一切都很好:

01:14:05,436 INFO HikariDataSource:70 - HikariPool-1 - 已启动。

如果我从创建的 jar 中运行它,它会说:

01:11:14,631 WARN ConnectionProviderInitiator:256 - HHH000472: Hikari 遇到了属性,但没有遇到 Hikari ConnectionProvider 在类路径中找到;这些属性将被忽略。 01:11:14,634 WARN 连接:71 - HHH10001002:使用休眠 内置连接池(不用于生产!) 01:11:14,639 INFO 连接数:127 - HHH10001005:使用驱动程序 [com.mysql.cj.jdbc.Driver] 在网址 [jdbc:mysql://212.227.253.80:3306/C3?useUnicode=yes&characterEncoding=UTF-8]

文件肯定在类路径中,我不明白为什么找不到它。 非常感谢任何帮助!

【问题讨论】:

  • 该文件肯定在类路径中:如果是,则不会出现此错误。你如何运行你的应用程序?首先是哪种应用程序?如果部署在 Web 服务器上,如何部署?
  • 这是一个java控制台应用程序。实际上是游戏的服务器。它连接到数据库并为通过 nadron 框架连接的本地 Java 客户端提供访问点。 Maven 创建一个 jar 文件,我从命令行 (java -jar blah.jar) 运行它。稍后,这将通过命令行在服务器上启动。
  • 那么,你如何运行它?发布命令。发布 jar 文件的内容。发布其清单。发布您的目录和 jar 文件的结构。如果您不提供任何详细信息,我们将无法提供帮助。
  • 这里的区别在于它在 Eclipse 中工作,而不是在命令行中工作。我认为,结构并没有真正的帮助。此外,整个东西很大,很难在这里反映完整的结构和任何东西......
  • 祝你好运。

标签: java hibernate hikaricp


【解决方案1】:

解决了。

我的项目是使用 maven-shade 构建的。显然,如果 hikariCP 作为类文件(而不是 jar)包含在生成的 jar 包中,它根本不起作用。如果我在我的 jar 旁边的文件系统中提供 CP jar 并将它们添加到清单中,它们就会被找到。

我不知道为什么它不会首先使用包中的类文件,但是...它们在那个文件中并且它们在正确的位置,但是 hikari 不会看到它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 2012-04-14
    • 2020-07-28
    • 2020-08-14
    • 1970-01-01
    • 2017-05-10
    • 2016-12-28
    相关资源
    最近更新 更多