2013-11-20 4 views
0

Я пытался настроить параметры конфигурации sessionfactory и datasource из файла внешних свойств с помощью аннотаций (без xml), но я получал следующее исключение.Настройка весны и спящего режима с использованием аннотаций

@Value("${hibernate.dialect}") 
    private String hibernateDialect; 
    @Value("${hibernate.show_sql}") 
    private String hibernateShowSql; 
    @Value("${hibernate.hbm2ddl.auto}") 
    private String hibernateHbm2ddlAuto; 

    @Value("${hibernate.driverClassName}") 
    private String driverClassName; 
    @Value("${hibernate.url}") 
    private String url; 
    @Value("${hibernate.username}") 
    private String username; 
    @Value("${hibernate.password}") 
    private String password; 

    @Bean 

    public PropertyPlaceholderConfigurer getPropertyPlaceholderConfigurer() 
    { 
     PropertyPlaceholderConfigurer propertyPlaceholderConfigurer = new PropertyPlaceholderConfigurer(); 
     propertyPlaceholderConfigurer.setLocation(new ClassPathResource("hibernate.properties")); 
     propertyPlaceholderConfigurer.setIgnoreUnresolvablePlaceholders(true); 
     return propertyPlaceholderConfigurer; 
    } 

    @Bean() 
    public DataSource getDataSource() { 
     System.out.println("**"+driverClassName+"&&"+url+"***"+username+"%%%"+password); 
     DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
     dataSource.setDriverClassName(driverClassName); 
     dataSource.setUrl(url); 
     dataSource.setUsername(username); 
     dataSource.setPassword(password); 

     return dataSource; 
    } 

    @Bean 
    @Autowired 
    public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) 
    { 
     HibernateTransactionManager hibernateTransactionManager = new HibernateTransactionManager(); 
     hibernateTransactionManager.setSessionFactory(sessionFactory); 
     return hibernateTransactionManager; 
    } 

    @Bean 
    @Autowired 
    public HibernateTemplate getHibernateTemplate(SessionFactory sessionFactory) 
    { 
     HibernateTemplate hibernateTemplate = new HibernateTemplate(sessionFactory); 
     return hibernateTemplate; 
    } 

    @Bean 
    public LocalSessionFactoryBean sessionFactory() 
    { 
     LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean(); 
     localSessionFactoryBean.setDataSource(getDataSource()); 
     localSessionFactoryBean.setHibernateProperties(getHibernateProperties()); 
     localSessionFactoryBean.setPackagesToScan(new String[]{"com.foodeebuddee"}); 
     return localSessionFactoryBean; 
    } 



    @Bean 
    public Properties getHibernateProperties() 
    { 
     System.out.println("**"+hibernateDialect+"&&"+hibernateShowSql+"***"+hibernateHbm2ddlAuto); 
     Properties properties = new Properties(); 
     properties.put("hibernate.dialect", hibernateDialect); 
     properties.put("hibernate.show_sql", hibernateShowSql); 
     properties.put("hibernate.hbm2ddl.auto", hibernateHbm2ddlAuto); 
     return properties; 
    } 

Исключение я получил.

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [com/foodeebuddee/Application.class]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.springframework.orm.hibernate4.LocalSessionFactoryBean com.foodeebuddee.Application.sessionFactory()] threw exception; nested exception is java.lang.IllegalArgumentException: Property 'driverClassName' must not be empty 
     at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:584) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1089) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:984) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getSingletonFactoryBeanForTypeCheck(AbstractAutowireCapableBeanFactory.java:840) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:771) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:539) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:384) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:353) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:463) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:456) 
     at org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration$EmbeddedServletContainerCustomizerBeanPostProcessorRegistrar.registerBeanDefinitions(EmbeddedServletContainerAutoConfiguration.java:110) 
     at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:317) 
     at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:139) 
     at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:116) 
     at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:321) 
     at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:240) 
     at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:254) 
     at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:94) 
     at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:609) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) 
     at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:552) 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:293) 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:749) 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:738) 
     at com.foodeebuddee.Application.main(Application.java:191) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 
    Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.springframework.orm.hibernate4.LocalSessionFactoryBean com.foodeebuddee.Application.sessionFactory()] threw exception; nested exception is java.lang.IllegalArgumentException: Property 'driverClassName' must not be empty 
     at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:188) 
     at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:573) 
     ... 30 more 
    Caused by: java.lang.IllegalArgumentException: Property 'driverClassName' must not be empty 
     at org.springframework.util.Assert.hasText(Assert.java:162) 
     at org.springframework.jdbc.datasource.DriverManagerDataSource.setDriverClassName(DriverManagerDataSource.java:124) 
     at com.foodeebuddee.Application.getDataSource(Application.java:111) 
     at com.foodeebuddee.Application.sessionFactory(Application.java:140) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166) 
     ... 31 more 

Любые предложения с благодарностью.

ответ

0

driverClassName имеет важное значение для создания фабрики сеансов весной, но его значение становится пустым, сначала вы можете сделать больше протоколирования и посмотреть, почему значение driverClassName не подходит.

+0

да Дипак я искать то driverClassName получать нулевое значение –

2

Решение в самой ошибки ::::

com.foodeebuddee.Application.sessionFactory)] выбросил исключение (; вложенная исключение java.lang.IllegalArgumentException: Property 'driverClassName' не должен быть пустым на org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate (SimpleInstantiationStrategy.java:188)

обеспечивают подходящий driverClassName как com.mysql.jdbc.Driver

0

Метод getPropertyPlaceholderConfigurer() должен быть статическим.

Более подробную информацию можно найти here

Смежные вопросы