2017-06-16 21 views
0

に私は、次のようなアノテーションベースの設定プロジェクトを実行しています原因:BeanInstantiationExceptionのjava.lang.NullPointerException

@Configuration 
public class HibernateConfig { 

    private Map<String, String> map; 

    public HibernateConfig(){ 
     init(); 
    } 

    private void init(){ 
     Properties props; 
     InputStream input = null; 
     try { 
      props = new Properties(); 
      input = this.getClass().getClassLoader().getResourceAsStream("jdbc.properties"); 
      props.load(input); 
      Enumeration<?> e = props.propertyNames(); 
      while (e.hasMoreElements()) { 
       String key = (String) e.nextElement(); 
       String value = props.getProperty(key); 
       map.put(key, value); 
      } 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } finally{ 
      if(input!=null){ 
       try { 
        input.close(); 
       } catch (IOException e2) { 
        e2.printStackTrace(); 
       } 
      } 
     } 
    } 

    @Bean(name="dataSource", destroyMethod = "close") 
    public DataSource getDataSource(){ 
     ComboPooledDataSource dataSource = new ComboPooledDataSource(); 
     try { 
      dataSource.setDriverClass(map.get("db.driverClass")); 
      dataSource.setJdbcUrl(map.get("db.jdbcUrl")); 
      dataSource.setUser(map.get("db.user")); 
      dataSource.setPassword(map.get("db.password")); 
      dataSource.setMaxPoolSize(50); 
      dataSource.setMinPoolSize(5); 
      dataSource.setMaxConnectionAge(1800); 
      dataSource.setMaxIdleTime(1800); 
      dataSource.setAutoCommitOnClose(false); 
      dataSource.setInitialPoolSize(5); 
     } catch (PropertyVetoException e) { 
      e.printStackTrace(); 
     } 
     return dataSource; 
    } 

    @Bean(name="sessionFactory") 
    @Scope("singleton") 
    public FactoryBean<SessionFactory> getSessionFactory(@Qualifier("dataSource") javax.sql.DataSource dataSource){ 
     LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean(); 
     Properties hibernateProperties = new Properties(); 
     hibernateProperties.setProperty("hibernate.dialect", map.get("db.dialect")); 
     hibernateProperties.setProperty("hibernate.jdbc.batch_size", "0"); 
     hibernateProperties.setProperty("c3p0.acquire_increment", "1"); 
     localSessionFactoryBean.setHibernateProperties(hibernateProperties); 
     try { 
      localSessionFactoryBean.afterPropertiesSet(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return localSessionFactoryBean; 
    } 

    @Bean(name="transactionManager") 
    public HibernateTransactionManager getTransactionManager(@Qualifier("sessionFactory") SessionFactory sessionFactory){ 
     HibernateTransactionManager transactionManager = new HibernateTransactionManager(); 
     return transactionManager; 
    } 

    public Map<String, String> getMap() { 
     return map; 
    } 

    public void setMap(Map<String, String> map) { 
     this.map = map; 
    } 
} 

stackraceの出力は私に次の例外与える:私が持っている

ERROR ContextLoader - Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com..web.config.HibernateConfig#0' defined in class path resource [META-INF/spring/daoContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com..web.config.HibernateConfig$$EnhancerBySpringCGLIB$$49b2842b]: Constructor threw exception; nested exception is java.lang.NullPointerException 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1105) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1050) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:446) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:328) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com..web.config.HibernateConfig$$EnhancerBySpringCGLIB$$49b2842b]: Constructor threw exception; nested exception is java.lang.NullPointerException 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1098) 
    ... 22 more 
Caused by: java.lang.NullPointerException 
    at java.util.Properties$LineReader.readLine(Properties.java:434) 
    at java.util.Properties.load0(Properties.java:353) 
    at java.util.Properties.load(Properties.java:341) 
    at com..web.config.HibernateConfig.init(HibernateConfig.java:35) 
    at com..web.config.HibernateConfig.<init>(HibernateConfig.java:26) 
    at com..web.config.HibernateConfig$$EnhancerBySpringCGLIB$$49b2842b.<init>(<generated>) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147) 
    ... 24 more 
Jun 16, 2017 2:55:14 PM org.apache.catalina.core.StandardContext listenerStart 
SCHWERWIEGEND: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com..web.config.HibernateConfig#0' defined in class path resource [META-INF/spring/daoContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com..web.config.HibernateConfig$$EnhancerBySpringCGLIB$$49b2842b]: Constructor threw exception; nested exception is java.lang.NullPointerException 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1105) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1050) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:446) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:328) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com..web.config.HibernateConfig$$EnhancerBySpringCGLIB$$49b2842b]: Constructor threw exception; nested exception is java.lang.NullPointerException 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1098) 
    ... 22 more 
Caused by: java.lang.NullPointerException 
    at java.util.Properties$LineReader.readLine(Properties.java:434) 
    at java.util.Properties.load0(Properties.java:353) 
    at java.util.Properties.load(Properties.java:341) 
    at com..web.config.HibernateConfig.init(HibernateConfig.java:35) 
    at com..web.config.HibernateConfig.<init>(HibernateConfig.java:26) 
    at com..web.config.HibernateConfig$$EnhancerBySpringCGLIB$$49b2842b.<init>(<generated>) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147) 
    ... 24 more 

INFO SessionListener - # flyway migration... 
Jun 16, 2017 2:55:14 PM org.apache.catalina.core.StandardContext listenerStart 
SCHWERWIEGEND: Exception sending context initialized event to listener instance of class com..web.listener.FlywayListener 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com..web.config.HibernateConfig#0' defined in class path resource [META-INF/spring/daoContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com..web.config.HibernateConfig$$EnhancerBySpringCGLIB$$49b2842b]: Constructor threw exception; nested exception is java.lang.NullPointerException 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1105) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1050) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:446) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:328) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com..web.config.HibernateConfig$$EnhancerBySpringCGLIB$$49b2842b]: Constructor threw exception; nested exception is java.lang.NullPointerException 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1098) 
    ... 22 more 
Caused by: java.lang.NullPointerException 
    at java.util.Properties$LineReader.readLine(Properties.java:434) 
    at java.util.Properties.load0(Properties.java:353) 
    at java.util.Properties.load(Properties.java:341) 
    at com..web.config.HibernateConfig.init(HibernateConfig.java:35) 
    at com..web.config.HibernateConfig.<init>(HibernateConfig.java:26) 
    at com..web.config.HibernateConfig$$EnhancerBySpringCGLIB$$49b2842b.<init>(<generated>) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147) 
    ... 24 more 

をこれまで見つけられなかった同じ問題についてスレッドを探していました。いずれかのアイデアがありますか?

UPDATE:スタックトレースはあなたが春を使用している

+0

完全なスタックトレースを追加してください。 – StanislavL

+0

あなたはSpringを使用しています。次にSpringを使用してください。独自のプロパティをロードしないで、そのために '@ PropertySource'を使用してください。 –

答えて

1

を追加し、その後、春を使用しています。独自のプロパティをロードしないでください。@PropertySourceを使用してください。

initメソッドを削除し、それを@PropertySourceに置き換えて、Environmentを設定に挿入し、それを使用してプロパティを取得します。

@Configuration 
@PropertySource("classpath:jdbc.properties") 
public class HibernateConfig { 

    @Autowired 
    private Environment env; 

    @Bean 
    public DataSource dataSource(){ 
     ComboPooledDataSource dataSource = new ComboPooledDataSource(); 
     dataSource.setDriverClass(env.getProperty("db.driverClass")); 
     dataSource.setJdbcUrl(env.getProperty("db.jdbcUrl")); 
     dataSource.setUser(env.getProperty("db.user")); 
     dataSource.setPassword(env.getProperty("db.password")); 
     dataSource.setMaxPoolSize(50); 
     dataSource.setMinPoolSize(5); 
     dataSource.setMaxConnectionAge(1800); 
     dataSource.setMaxIdleTime(1800); 
     dataSource.setAutoCommitOnClose(false); 
     dataSource.setInitialPoolSize(5); 
     return dataSource; 
    } 

    @Bean 
    public LocalSessionFactoryBean sessionFactory(DataSource dataSource){ 
     LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean(); 
     Properties hibernateProperties = new Properties(); 
     hibernateProperties.setProperty("hibernate.dialect", map.get("db.dialect")); 
     hibernateProperties.setProperty("hibernate.jdbc.batch_size", "0"); 
     localSessionFactoryBean.setHibernateProperties(hibernateProperties); 
     localSessionFactoryBean.setDataSource(dataSource); 
     return localSessionFactoryBean; 
    } 

    @Bean 
    public HibernateTransactionManager transactionManager(SessionFactory sessionFactory){ 
     return new HibernateTransactionManager(sessionFactory); 
    } 
} 

いくつかの他の関連する事柄

  1. は、豆のセットアップ中Exception秒をキャッチした構成は、アプリケーションがいくつかの奇妙な状態にある他の爆破させてはいけません。
  2. DataSourceLocalSessionFactoryBeanに挿入すると、明示的なプロパティ設定が役に立たなくなります。
  3. DataSourcecloseメソッドが自動的に検出されます。
  4. あなたはすべてのそれらの@Qualifierの注釈
  5. が、これは適切なコールバックが適用持つことが必要とされ、@Bean方法であなたの戻り値の型にできるだけ具体的にしてください必要はありません。
  6. 自分でafterPropertiesSetに電話しないでください。春はそれを行います。
+0

お返事ありがとう – User00

関連する問題