Microprofile 的 Open Liberty 实现中的 MySql 连接
Posted
技术标签:
【中文标题】Microprofile 的 Open Liberty 实现中的 MySql 连接【英文标题】:MySql connection in Open Liberty implementation of Microprofile 【发布时间】:2021-10-13 14:33:27 【问题描述】:我是 Microprofile 世界的新手,我正在尝试使用 Open Liberty 作为实现来创建微服务。当我尝试使用 mysql 连接到我的数据库时,这里的主要问题开始了,我找不到原因。 我的 server.xml 文件是下一个:
<library id="jdbcLib">
<fileset dir="jdbc" includes="*.jar"/>
</library>
<dataSource jndiName="jdbc/myDB">
<jdbcDriver libraryRef="jdbcLib"/>
<properties serverName="localhost" portNumber="3306"
databaseName="inventory"
user="root"
password="root"/>
</dataSource>
而我的 persistence.xml 文件是:
<persistence-unit name="jpa-unit" transaction-type="JTA">
<jta-data-source>jdbc/myDB</jta-data-source>
<properties>
<property name="eclipselink.ddl-generation" value="create-tables"/>
<property name="eclipselink.ddl-generation.output-mode" value="both" />
</properties>
</persistence-unit>
我找不到我做错了什么,但我得到了以下异常:
java.sql.SQLNonTransientException: DSRA4000E: 没有为带有库的 dataSource[default-0] 找到 [javax.sql.ConnectionPoolDataSource, javax.sql.DataSource, javax.sql.XADataSource, java.sql.Driver] 的实现jdbcLib
有人可以帮我解决这个问题吗?我将不胜感激:D
【问题讨论】:
Open Liberty 没有预打包 JDBC 驱动程序二进制文件。从您的 server.xml 来看,您的 JDBC 驱动程序配置看起来不错,但您仍需要将其复制到磁盘上的适当位置。 @marks 的答案是使用 Maven 的好方法。 是的,斯科特,非常感谢你的回复,马克的回答对我很有用 很高兴听到这个消息。在这种情况下,您可以继续接受答案。很高兴能提供帮助。 【参考方案1】:您似乎遵循了此处的示例:https://openliberty.io/docs/21.0.0.3/relational-database-connections-JDBC.html
根据异常,驱动 jar 似乎不在 jdbc 目录中(将是 wlp/usr/server/server_name/jdbc)您应该能够获取版本你需要这里:https://mvnrepository.com/artifact/mysql/mysql-connector-java
如果您使用的是 maven,则可以使用 Liberty Maven 插件为您下载驱动程序并将其复制到正确的目录。以下是使用最新 8.0.26 驱动程序的示例:
<plugin>
<groupId>io.openliberty.tools</groupId>
<artifactId>liberty-maven-plugin</artifactId>
<version>3.3</version>
<configuration>
<copyDependencies>
<location>jdbc</location>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!-- You can omit the version below if you have
declared a dependency and want to simply use
that version, or specify the version as shown
if you don't include this artifact as a dependency. -->
<version>8.0.26</version>
</dependency>
</copyDependencies>
</configuration>
</plugin>
【讨论】:
答案很好,但它遵循了早期里程碑版本中使用的模式。我更新了答案以反映其最终发布格式的支持。 @ScottKurz 感谢您的更新,我试过了,它可以工作。我看到实际上昨天打开了一个问题来解决这个特定的例子:github.com/OpenLiberty/docs/issues/4517 啊,也谢谢你的指点。看起来我们正在修复其他文档。 非常感谢你们,这在我的项目中非常有用,我非常感激!以上是关于Microprofile 的 Open Liberty 实现中的 MySql 连接的主要内容,如果未能解决你的问题,请参考以下文章
Quarkus & Microprofile:有没有更好的方法将 application.properties 中的属性用于@ClientHeaderParam?
如何将配置中的集合转换为 Microprofile/Quarkus/Smallrye 中的环境变量
Microprofile Config:容错度量标签的动态 ConfigSource 值
如何使用 java-ee8、microProfile 4.0、Openliberty 21 和 Docker 设置特定于阶段的微配置文件配置