spring - 创建名为 'sqlSessionFactory' 的 bean 时出错...调用 init 方法失败;嵌套异常是 java.lang.NullPointerException

标签 spring mybatis spring-mybatis

我正在尝试将 spring-mybatis 集成到我的应用程序中。我使用的是 spring 4.1.4mybatis 3.2.8 java 7,服务器是 WebSphere Application Server Liberty。我正在使用 spring java 配置类。仅当我部署 war 文件时才会显示此错误,如果我使用 Eclipse 部署项目,则一切正常。在 Tomcat 8 中部署也可以正常工作。

@Configuration
@MapperScan("x.y.z.mappers")
@PropertySource("classpath:/x/y/z/data_source.properties")
@EnableTransactionManagement
public class DataAccessConfiguration {
    @Autowired
    private Environment env;
    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(env.getProperty("driver"));
        dataSource.setUrl(env.getProperty("url"));
        dataSource.setUsername(env.getProperty("user"));
        dataSource.setPassword(env.getProperty("password"));
        return dataSource;
    }
    @Bean
    public DataSourceTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource());
    }
    @Bean
    public SqlSessionFactoryBean sqlSessionFactory() throws Exception {     
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setTypeAliasesPackage("x.y.z.portal.model");
       return sessionFactory;
       }
    }

我得到了这个堆栈跟踪

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in a.b.c.DataAccessConfiguration: Invocation of init method failed; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1566)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1127)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1051)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:949)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1280)
... 60 more

Caused by: java.lang.NullPointerException
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:154)
at java.io.BufferedReader.readLine(BufferedReader.java:317)
at java.io.BufferedReader.readLine(BufferedReader.java:382)
at org.apache.ibatis.io.DefaultVFS.list(DefaultVFS.java:93)
at org.apache.ibatis.io.VFS.list(VFS.java:193)
at org.apache.ibatis.io.ResolverUtil.find(ResolverUtil.java:216)
at org.apache.ibatis.type.TypeAliasRegistry.registerAliases(TypeAliasRegistry.java:127)
at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:399)
at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:355)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1625)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1562)

最佳答案

尝试将您的应用程序与 mybatis 集成。将以下代码添加到 spring-dispatcher-servlet.xml。

 <context:property-placeholder location="x/y/z/data_source.properties"/>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName"><value>${database.driver}</value></property>
            <property name="url"><value>${database.url}</value></property>
            <property name="username"><value>${database.username}</value></property>
            <property name="password"><value>${database.password}</value></property>
            <property name="maxActive"><value>${database.maxactiveconnections}</value></property>
            <property name="maxIdle"><value>${database.idleconnections}</value></property>
            <property name="initialSize"><value>${database.initialSize}</value></property>

    </bean>   

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="/WEB-INF/mybatis-config.xml"/>
     </bean>

     <bean id="Dao" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>    
        <property name="mapperInterface" value="com.dao.Dao" />
    </bean> 

关于spring - 创建名为 'sqlSessionFactory' 的 bean 时出错...调用 init 方法失败;嵌套异常是 java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36804881/

相关文章:

spring-boot - 使用Mybatis+Springboot开发的应用程序通过junit测试无法调用Mapper.xml文件

Spring mvc 4.0.5 长轮询示例

java - Spring Data Rest 存储库中的自定义方法会生成什么 url?

java - spring 3.2.4 应该使用哪个版本的 mybatis 和 mybatis-spring jar?

orm - 类/对象 View 中的本地化表

spring - 使用 MyBatis 和 Spring 在项目中记录 SQL 查询

MyBatis - 获取多个集合

java - 如何使用 Spring Cloud Stream 在 RabbitMQ 的队列中添加功能 "x-delayed-type: direct"?

java - 没有定义名为 'persistenceUnit' 的 bean

mysql - 数据库执行结果和mybatis执行结果不一致