学习ServiceMix笔记(六) 学习Camel的JDBC简单入门

原创
2014/04/22 10:09
阅读数 2.1K

    先检查一下是不是安装了JDBC

karaf@root> features:list | grep jdbc
[installed  ] [2.3.4           ] jdbc                                    karaf-enterprise-2.3.4    JDBC service and commands
[uninstalled] [3.0.7.RELEASE   ] spring-jdbc                             karaf-2.3.4               Spring 3.0.x JDBC support
[uninstalled] [3.1.4.RELEASE   ] spring-jdbc                             karaf-2.3.4               Spring 3.1.x JDBC support
[uninstalled] [3.2.4.RELEASE   ] spring-jdbc                             karaf-2.3.4               Spring 3.2.x JDBC support
[installed  ] [2.12.3          ] camel-jdbc                              camel-2.12.3
karaf@root>

    没有找到camel-jdbc就安装一下

karaf@root> features:install camel-jdbc
karaf@root>

    我们先给系统设置一个DataSource 文件名,datasource.xml放到系统发布目录下。

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
    xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0">
    
  <bean id="dbcp" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost/test?relaxAutoCommit=true"/>
    <property name="username" value="root"/>
    <property name="password" value=""/>
  </bean>  

  <service interface="javax.sql.DataSource" ref="dbcp">
    <service-properties>
      <entry key="osgi.jndi.service.name" value="jdbc/mysqld"/>
      <entry key="datasource.name" value="MySQL"/>
    </service-properties>
  </service>
</blueprint>

    在这里要注意一下,我使用的是mysql,那么把mysql的jar包放到lib\ext目录下才可以找到,在lib目录下是无法找到的.例子表的结构如下:

-- 导出  表 test.t_user 结构
CREATE TABLE IF NOT EXISTS `t_user` (
  `uid` int(11) NOT NULL AUTO_INCREMENT,
  `uname` varchar(50) NOT NULL,
  `upwd` varchar(32) NOT NULL,
  `udepid` int(11) NOT NULL DEFAULT '0',
  `ustatus` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户登录信息';

    检查一下是否加载成功。

karaf@root> list | grep datas
[ 210] [Active     ] [Created     ] [       ] [   80] datasource.xml (0.0.0)
karaf@root>

    建立一个数据查询的blueprint文件

<?xml version="1.0" encoding="UTF-8"?>
<blueprint
    xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
      http://www.osgi.org/xmlns/blueprint/v1.0.0
      http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
    
    <camelContext xmlns="http://camel.apache.org/schema/blueprint">
      <route>
        <from uri="timer://foo?period=10000"/>
        <setBody>
          <constant>select * from t_user limit 0,1</constant>
        </setBody>
        <to uri="jdbc:dbcp"/>
        <to uri="log:out"/>
      </route>
    </camelContext>

    <reference id="dbcp" interface="javax.sql.DataSource"/>
</blueprint>

     我们先来分析一下这个XML文件的内容

    <reference id="dbcp" interface="javax.sql.DataSource"/>

     引用系统里已经存在的DataSource,“dbcp”是刚才datasource.xml里已经配置好的数据源名称,如果未指名的DataSource等错误就是因为没有引用系统中已经存在的DataSource引起的。

    例子是定时查询一个数据库表,然后把查询结果输出到日志文件。必须要先设置查询的语句,通过setBody做为查询参数,还可以使用setHead传入参数

<setBody>
   <constant>select * from t_user limit 0,1</constant>
</setBody>
<to uri="jdbc:dbcp"/>

最后把查询的结果输出log.

 <to uri="log:out"/>


下面我们来操作ServiceMix查看一下日志情况。先清除日志,使用命令"log:clear",然后执行“log:display”显示日志,第一次不显示,是因为我们设置的定时查询是10秒一次,等几秒,第二次查询就可以看到结果,

karaf@root> log:clear
karaf@root> log:display

karaf@root> log:display
2014-04-22 10:11:24,593 | INFO  | 49 - timer://foo | out  | ?  ? | 110 - org.apache.camel.camel-cor
e - 2.12.3 | Exchange[ExchangePattern: InOnly, BodyType: java.util.ArrayList, Bo
dy: [{uid=1, uname=a, upwd=c, udepid=0, ustatus=0}]]

karaf@root>

到这里,最基本的数据查询已经完成了

以上内容适用于SMX5.X版,到了最新的7.X版已经发生了一些变化

features修改为feature,且dbcp升级为2.X版,安装顺序发生了变化

feature:install jdbc
feature:install pax-jdbc
feature:install pax-jdbc-dbcp2
feature:install pax-jdbc-MySql

blueprint文件发生改变,

org.apache.commons.dbcp.BasicDataSource
变化为

org.apache.commons.dbcp2.BasicDataSource
完整文件代码如下:

<blueprint
        xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
        xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
 <bean id="dbcp" destroy-method="close" class="org.apache.commons.dbcp2.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost/test?relaxAutoCommit=true"/>
    <property name="username" value="root"/>
    <property name="password" value=""/>
  </bean>  
 
  <service interface="javax.sql.DataSource" ref="dbcp">
    <service-properties>
      <entry key="osgi.jndi.service.name" value="jdbc/mysqld"/>
      <entry key="datasource.name" value="MySQL"/>
    </service-properties>
  </service>

</blueprint>

最后再用log:display查看日志,查询正常,每10秒钟出现一次查询结果




展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部