我從來沒有通過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