Java Camel Mybatis开放会话异常

Java Camel Mybatis开放会话异常,java,apache-camel,mybatis,spring-mybatis,camel-blueprint,Java,Apache Camel,Mybatis,Spring Mybatis,Camel Blueprint,我使用的是Camel Mybatis版本2.12.0.redhat-610379,当我们试图通过karaf容器启动包时,会抛出以下异常。请给我一些建议 org.apache.ibatis.exceptions.PersistenceException: 打开会话时出错。原因:java.lang.NullPointerException 原因:java.lang.NullPointerException 原因:java.lang.NullPointerException 位于org.apache

我使用的是Camel Mybatis版本2.12.0.redhat-610379,当我们试图通过karaf容器启动包时,会抛出以下异常。请给我一些建议

org.apache.ibatis.exceptions.PersistenceException:
打开会话时出错。原因:java.lang.NullPointerException 原因:java.lang.NullPointerException 原因:java.lang.NullPointerException 位于org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSessionFromDataSource(DefaultSqlSessionFactory.java:83)[280:org.mybatis.mybatis:3.2.5] ... 32多

Bean.xml

<bean id="ds" class="com.mchange.v2.c3p0.ComboPooledDataSource">
     <property name="driverClass"  value="oracle.jdbc.driver.OracleDriver"/> 
     <property name="jdbcUrl" value=""/> 
     <property name="user" value=""/> 
     <property name="password" value="" /> 
</bean> 

<bean id="dataSource" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
   <argument ref="ds" />
</bean>

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

<bean id="mybatisConfig" class="org.springframework.core.io.ClassPathResource"> 
    <argument value="SqlMapConfig.xml" /> 
</bean>

<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="configLocation" ref="mybatisConfig"/>  
    <property name="mapperLocations">
        <array value-type="org.springframework.core.io.Resource">
             <bean class="org.springframework.core.io.ClassPathResource">  
                <argument value="mappings/QueryMessaging.xml" />  
             </bean> 

        </array>
    </property> 
</bean> 

<bean id="sqlSessionFactory" class="org.apache.ibatis.session.SqlSessionFactory" factory-ref="sqlSessionFactoryBean" 
    factory-method="getObject" />

<bean id="myBatis" class="org.apache.camel.component.mybatis.MyBatisComponent">
    <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean> 



<bean id="PROPAGATION_REQUIRED" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
    <property name="transactionManager" ref="txManager"/>
    <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>
</bean> 


正确创建了连接和配置,我犯的错误是在bean.xml中,我使用了
myBatis
bean id,我输入的camel route为
myBatis
,由于区分大小写,没有创建环境,很抱歉。

看起来myBatis没有
环境设置。可能数据源的设置不正确。您是否设置了正确的jdbcUrl?当我们从这个bean.xml创建连接时,我们没有在SqlMapConfig.xml中定义任何连接,如果我通过SqlMapConfig.xml创建连接,它就会工作。我注意到您在
SqlSessionFactoryBean
上显式调用
getObject
。这看起来不正确。由于
SqlSessionFactoryBean
实现了
FactoryBean
Spring接口,因此bean的类型已经是
SqlSessionFactory
。例如,请参阅文档SqlSessionFactoryBean创建会话,但在我的例子中,我必须为驼峰路由中使用的
MyBatisComponent
创建bean。我在camel mybatis中查看过,大多数建议的想法和代码都与上面的类似
<bean id="ds" class="com.mchange.v2.c3p0.ComboPooledDataSource">
     <property name="driverClass"  value="oracle.jdbc.driver.OracleDriver"/> 
     <property name="jdbcUrl" value=""/> 
     <property name="user" value=""/> 
     <property name="password" value="" /> 
</bean> 

<bean id="dataSource" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
   <argument ref="ds" />
</bean>

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

<bean id="mybatisConfig" class="org.springframework.core.io.ClassPathResource"> 
    <argument value="SqlMapConfig.xml" /> 
</bean>

<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="configLocation" ref="mybatisConfig"/>  
    <property name="mapperLocations">
        <array value-type="org.springframework.core.io.Resource">
             <bean class="org.springframework.core.io.ClassPathResource">  
                <argument value="mappings/QueryMessaging.xml" />  
             </bean> 

        </array>
    </property> 
</bean> 

<bean id="sqlSessionFactory" class="org.apache.ibatis.session.SqlSessionFactory" factory-ref="sqlSessionFactoryBean" 
    factory-method="getObject" />

<bean id="myBatis" class="org.apache.camel.component.mybatis.MyBatisComponent">
    <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean> 



<bean id="PROPAGATION_REQUIRED" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
    <property name="transactionManager" ref="txManager"/>
    <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>
</bean>