Java Camel Mybatis开放会话异常
我使用的是Camel Mybatis版本2.12.0.redhat-610379,当我们试图通过karaf容器启动包时,会抛出以下异常。请给我一些建议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
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>