我从来没有通过jdbc命令语法完成它,我遵循我喜欢的Ops4J Wiki On Datasource creation的指导原则,这种方法创建了一个简单的文本文件,不仅可以由Java开发人员进行管理,也可以更容易修改并排除故障。
为了不让我的答案受到链接腐烂的影响,我将在这里概述这个过程。
使用以下命名约定org.ops4j.datasource-give_your_datasource_a_name.cfg
在/ servicemixhome/etc中创建数据源配置文件(简单文本文件)。
在config文件中配置适当的设置我的一个例子是这样的:
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
现在使用列出数据源以下语法:
[email protected]()> service:list javax.sql.DataSource
这将回显类似th下面列出回来。
[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)
在这一点上,你可以参考的数据源usign在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
你不应该使用osgi.jdbc.driver.name和osgi.jdbc.driver.class。只使用其中之一。 –
谢谢, 我其实用同样的方式使用配置文件。如果我输入无效的JNDI名称,我可以列出服务,然后骆驼找到数据源,因为我收到另一条消息。你的过滤器看起来与我的略有不同,但是在尝试这种语法时我得到了同样的错误。 我假设它会工作,如果我将数据源传递给一个bean,但我想在这种情况下使用JDBC组件。 我已经成功地使用骆驼组件,同时直接在蓝图中定义数据源,但我想避免这种情况。 – user5188655
@ChristianSchneider同意了。也不建议复制和粘贴结膜炎。 – Namphibian