我从来没有通过 jdbc 命令语法来完成它我遵循 Ops4J Wiki On Datasource creation 中的指南,我喜欢这仅仅是一个原因,这种方法创建一个简单的文本文件,不仅可以由 Java 开发人员管理,即它更容易修改和排除故障。
为了不让我的回答受到链接腐烂的影响,我将在此处概述该过程。
在 /servicemixhome/etc 中使用以下命名约定 org.ops4j.datasource-give_your_datasource_a_name.cfg 创建一个数据源配置文件(简单文本文件)。
在配置文件中配置适当的设置,我的示例如下所示:
osgi.jdbc.driver.class = com.mysql.jdbc.Driver
databaseName=dhData
user=foo
url=jdbc:mysql://192.199.199.199:3306/dhData
password=somepassword
dataSourceName=myDSName
确保您安装了 ops4j 所需的功能:
feature:install pax-jdbc-mysql pax-jdbc-config
现在使用以下语法列出数据源:
karaf@root()> service:list javax.sql.DataSource
这将回显下面的列表。
[javax.sql.DataSource]
----------------------
osgi.jdbc.driver.class = com.mysql.jdbc.Driver
databaseName=dhData
user=foo
url=jdbc:mysql://192.199.199.199:3306/dhData
password=somepassword
dataSourceName=myDSName
Provided by :
OPS4J Pax JDBC Config (216)
此时您可以在blueprint.xml中使用osgi过滤器引用数据源,语法如下:
<reference filter="(&(objectClass=javax.sql.DataSource)(dataSourceName=myDSName ))" id="myData" interface="javax.sql.DataSource"/>
然后将其作为 bean 的属性引用,例如,您可以执行以下操作:
<bean class="foo.bar" id="ImsCbrEventsBean">
<property name="dataSource" ref="myData"/>
</bean>
请记住,这会创建一个到数据库的单一连接,您应该真正创建一个连接池。
这可以通过安装 pax-jdbc-pool-dbcp2 功能或任何其他连接池来完成,但一次只使用一个,然后修改数据源配置文件以携带适当的信息,如下例所示:
osgi.jdbc.driver.name = mysql
databaseName=dhData
user=foo
url=jdbc:mysql://192.199.199.199:3306/dhData
password=somepassword
dataSourceName=myDSName
jdbc.pool.maxTotal=32
jdbc.pool.blockWhenExhausted=true
jdbc.pool.lifo=false
jdbc.pool.maxIdle=24
jdbc.pool.maxWaitMillis=5000
jdbc.pool.minEvictableIdleTimeMillis=1800000
jdbc.pool.minIdle=16
jdbc.pool.numTestsPerEvictionRun=3
jdbc.pool.softMinEvictableIdleTimeMillis=-1
jdbc.pool.testOnBorrow=true
jdbc.pool.testOnCreate=true
jdbc.pool.testOnReturn=true
jdbc.pool.testWhileIdle=true
jdbc.pool.timeBetweenEvictionRunsMillis=3600000