如何在 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", "");
获取连接实例。
你需要
- 首先下载MySQL connector OSGI jar,这个pom依赖
不会 work.MySQL Osgi jar 将在清单文件中导出包。
然后将其作为一个包安装在 Apache Felix 系统控制台中。
然后在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();
如何在带有 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", "");
获取连接实例。
你需要
- 首先下载MySQL connector OSGI jar,这个pom依赖 不会 work.MySQL Osgi jar 将在清单文件中导出包。
然后将其作为一个包安装在 Apache Felix 系统控制台中。
然后在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();