我有一个使用 Spring Boot 0.5.0.M5 的项目设置。
在我尝试@Autowire Environment使用的一个配置文件中,但失败了NullPointerException。
@Autowire Environment
NullPointerException
这是我到目前为止的内容:
应用程序
@EnableAutoConfiguration @Configuration @ComponentScan public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
*我正在尝试的 *JpaConfig.java@Autowire Environment
@Configuration @EnableTransactionManagement @EnableJpaRepositories(basePackages = "com.ui.persistence.repository") public class JpaConfig { private static final String DATABASE_DRIVER = "db.driver"; private static final String DATABASE_PASSWORD = "db.password"; private static final String DATABASE_URL = "db.url"; private static final String DATABASE_USERNAME = "db.username"; private static final String HIBERNATE_DIALECT = "hibernate.dialect"; private static final String HIBERNATE_SHOW_SQL = "hibernate.show_sql"; private static final String ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan"; @Autowired private Environment env; @Bean public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(env.getProperty(DATABASE_DRIVER)); dataSource.setUrl(env.getProperty(DATABASE_URL)); dataSource.setUsername(env.getProperty(DATABASE_USERNAME)); dataSource.setPassword(env.getProperty(DATABASE_PASSWORD)); return dataSource; } @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() { LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); entityManagerFactoryBean.setDataSource(dataSource()); entityManagerFactoryBean.setPersistenceProviderClass( HibernatePersistence.class); entityManagerFactoryBean.setPackagesToScan( env.getProperty(ENTITYMANAGER_PACKAGES_TO_SCAN)); entityManagerFactoryBean.setJpaProperties(hibernateProperties()); return entityManagerFactoryBean; } }
我正在尝试加载在属性文件中配置的数据库属性。但是,Environment不会注入,并且代码将失败NullPointerException。我在XML文件中没有任何配置。
Environment
对于属性文件,我已通过PropertySourcesPlaceholderConfigurer以下方式配置:
PropertySourcesPlaceholderConfigurer
@Configuration @PropertySource("classpath:database.properties") public class PropertyConfig { @Bean public static PropertySourcesPlaceholderConfigurer propertyPlaceHolderConfigurer() { return new PropertySourcesPlaceholderConfigurer(); } }
我试图交换@Autowired,@Resource并且@Inject但至今没有奏效。将不胜感激。谢谢。
@Autowired
@Resource
@Inject
我相信Spring和EntityManagerFactory会存在一些生命周期问题,并且您可能已经犯了这些问题(已在4.0.0.RC1中修复)-如果您的@Configuration类在早期被实例化,则可能不符合自动装配的条件。您可能会从日志输出中得知是否是这种情况。
EntityManagerFactory
@Configuration
只是出于兴趣,您是否知道您使用JpaConfig和提供的功能(PropertyConfig如果您使用的是已定义好的,@EnableAutoConfiguration只要您@ComponentScan定义了存储库的那个包)?
JpaConfig
PropertyConfig
@EnableAutoConfiguration
@ComponentScan