我有一个使用
Spring Boot 0.5.0.M5的项目设置.
在我的一个配置文件我试图@Autowire环境,但失败与NullPointerException.
这是我到目前为止
Application.java
- @EnableAutoConfiguration
- @Configuration
- @ComponentScan
- public class Application {
- public static void main(String[] args) {
- SpringApplication.run(Application.class,args);
- }
- }
JpaConfig.java在哪里我试图@Autowire环境
- @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;
- }
- }
我正在尝试加载属性文件中配置的数据库属性.但是,环境不会被注入,并且代码与NullPointerException失败.我在XML文件中没有任何配置.
对于属性文件,我以这种方式配置了PropertySourcesPlaceholderConfigurer:
- @Configuration
- @PropertySource("classpath:database.properties")
- public class PropertyConfig {
- @Bean
- public static PropertySourcesPlaceholderConfigurer propertyPlaceHolderConfigurer() {
- return new PropertySourcesPlaceholderConfigurer();
- }
- }
我已经尝试交换@Autowired,@Resource和@Inject,但迄今没有任何工作.会感谢任何帮助.谢谢.
解决方法
我相信Spring和EntityManagerFactory有一些生命周期的问题,你可能已经有这些错误(在4.0.0.RC1中修复了) – 如果你的@Configuration类被提前超时,可能不符合自动装配的条件.如果是这样,你可以从日志输出中得知.
只是出于兴趣,您是否知道如果您使用@EnableAutoConfiguration(只要您的@ComponentScan该包在哪里定义您的存储库),您的JpaConfig和PropertyConfig提供的功能已经预先设置为开箱即用?以JPA sample in Spring Boot为例.