如何在 Maven 的 OSGi 应用程序中使用 MySQL?

How to use MySQL in OSGi application with Maven?

如何在带有 Maven 和 Apache Felix 的 OSGi 应用程序中使用 MySQL?

我将其添加到我的 pom.xml 文件中:

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.13</version>
    </dependency>
</dependencies>

这对激活器(用于测试目的):

DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname", "user", "");

但是当我通过 Apache Felix 运行 应用程序时,我在加载包时遇到此错误:

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/dbname

问题是什么,我该如何解决?


编辑:

虽然我在某处读到,由于某些版本的 Java 驱动程序不必显式注册(我使用 Java 11),但我尝试在 [= 之前​​添加此代码17=] 电话:

Class.forName("com.mysql.jdbc.Driver");

然而,这只会产生不同的错误:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver not found

在使用 getConnection(...) 方法之前,您需要先将驱动程序加载到内存中。使用以下加载 class:

Class.forName("com.mysql.jdbc.Driver")

这会自动向 DriverManager 注册 mysql 驱动程序。 然后你可以使用:

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname", "user", "");

获取连接实例。

你需要

  1. 首先下载MySQL connector OSGI jar,这个pom依赖 不会 work.MySQL Osgi jar 将在清单文件中导出包。
  2. 然后将其作为一个包安装在 Apache Felix 系统控制台中。

  3. 然后在data下system/console/configMgr配置连接 来源

然后使用下面的代码读取配置的数据源。

String filter = "(&(objectclass=javax.sql.DataSource)(datasource.name="+configurationId+"))";
                    ServiceReference[] refs = bundleContext.getAllServiceReferences(null, filter);
                    if(refs != null && refs.length == 1) {
                        dataSource = (javax.sql.DataSource) bundleContext.getService(refs[0]);
                    }

其中 bundleContext 将是您的 osgi 上下文 (org.osgi.framework.BundleContext)

添加此行而不是通过 Class.forName() 加载驱动程序:

new com.mysql.cj.jdbc.Driver();