java – Spring引导 – 环境@Autowired抛出NullPointerException

前端之家收集整理的这篇文章主要介绍了java – Spring引导 – 环境@Autowired抛出NullPointerException前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个使用 Spring Boot 0.5.0.M5的项目设置.

在我的一个配置文件我试图@Autowire环境,但失败与NullPointerException.

这是我到目前为止

Application.java

  1. @EnableAutoConfiguration
  2. @Configuration
  3. @ComponentScan
  4. public class Application {
  5.  
  6. public static void main(String[] args) {
  7. SpringApplication.run(Application.class,args);
  8. }
  9. }

JpaConfig.java在哪里我试图@Autowire环境

  1. @Configuration
  2. @EnableTransactionManagement
  3. @EnableJpaRepositories(basePackages = "com.ui.persistence.repository")
  4. public class JpaConfig {
  5. private static final String DATABASE_DRIVER = "db.driver";
  6. private static final String DATABASE_PASSWORD = "db.password";
  7. private static final String DATABASE_URL = "db.url";
  8. private static final String DATABASE_USERNAME = "db.username";
  9. private static final String HIBERNATE_DIALECT = "hibernate.dialect";
  10. private static final String HIBERNATE_SHOW_sql = "hibernate.show_sql";
  11. private static final String ENTITYMANAGER_PACKAGES_TO_SCAN
  12. = "entitymanager.packages.to.scan";
  13.  
  14. @Autowired
  15. private Environment env;
  16.  
  17. @Bean
  18. public DataSource dataSource() {
  19. DriverManagerDataSource dataSource = new DriverManagerDataSource();
  20. dataSource.setDriverClassName(env.getProperty(DATABASE_DRIVER));
  21. dataSource.setUrl(env.getProperty(DATABASE_URL));
  22. dataSource.setUsername(env.getProperty(DATABASE_USERNAME));
  23. dataSource.setPassword(env.getProperty(DATABASE_PASSWORD));
  24. return dataSource;
  25. }
  26.  
  27. @Bean
  28. public LocalContainerEntityManagerfactorybean entityManagerFactory() {
  29. LocalContainerEntityManagerfactorybean entityManagerfactorybean
  30. = new LocalContainerEntityManagerfactorybean();
  31. entityManagerfactorybean.setDataSource(dataSource());
  32. entityManagerfactorybean.setPersistenceProviderClass(
  33. HibernatePersistence.class);
  34. entityManagerfactorybean.setPackagesToScan(
  35. env.getProperty(ENTITYMANAGER_PACKAGES_TO_SCAN));
  36. entityManagerfactorybean.setJpaProperties(hibernateProperties());
  37. return entityManagerfactorybean;
  38. }
  39. }

我正在尝试加载属性文件中配置的数据库属性.但是,环境不会被注入,并且代码与NullPointerException失败.我在XML文件中没有任何配置.

对于属性文件,我以这种方式配置了PropertySourcesPlaceholderConfigurer:

  1. @Configuration
  2. @PropertySource("classpath:database.properties")
  3. public class PropertyConfig {
  4. @Bean
  5. public static PropertySourcesPlaceholderConfigurer propertyPlaceHolderConfigurer() {
  6. return new PropertySourcesPlaceholderConfigurer();
  7. }
  8. }

我已经尝试交换@Autowired,@Resource和@Inject,但迄今没有任何工作.会感谢任何帮助.谢谢.

解决方法

我相信Spring和EntityManagerFactory有一些生命周期的问题,你可能已经有这些错误(在4.0.0.RC1中修复了) – 如果你的@Configuration类被提前超时,可能不符合自动装配的条件.如果是这样,你可以从日志输出中得知.

只是出于兴趣,您是否知道如果您使用@EnableAutoConfiguration(只要您的@ComponentScan该包在哪里定义您的存储库),您的JpaConfig和PropertyConfig提供的功能已经预先设置为开箱即用?以JPA sample in Spring Boot为例.

猜你在找的Java相关文章