当前位置: 首页 > 面试题库 >

Spring Boot-环境@Autowired抛出NullPointerException

彭展
2023-03-14
问题内容

我有一个使用 Spring Boot 0.5.0.M5 的项目设置。

在我尝试@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文件中没有任何配置。

对于属性文件,我已通过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类在早期被实例化,则可能不符合自动装配的条件。您可能会从日志输出中得知是否是这种情况。

只是出于兴趣,您是否知道您使用JpaConfig和提供的功能(PropertyConfig如果您使用的是已定义好的,@EnableAutoConfiguration只要您@ComponentScan定义了存储库的那个包)?



 类似资料:
  • 我有一个奇怪的例子,我有一个secret.env文件,我把所有的环境变量都设置成这样: 秘密. env 然后我构建了一个docker文件来导出所有变量并运行应用程序: 但是,这将引发一个关键错误: 当我在我的窗户上运行这个程序时,它工作得很好! 有人能帮我一下吗?

  • platformVersion和environment始终为空。在日志中:添加[class path resource[tests.properties]]PropertySource以最低的搜索优先级。我看到stackoverflow上的其他帖子(Autowired Environment是空的),我不想去实现EnvironmentAware。为环境而将私人改为公共并不能解决问题。任何其他想法都

  • 我想使用spring-kafka KafkaTemplate, 我创建了一个KafkaConfig类: …并在我写给Kafka的类中自动连接了Kafka模板: 出于某种原因,自动布线似乎不起作用。我注意到当我在debug中运行时,KafkaTemplate为null: 此对象不应为空;它应该是一个KafkaTemplate对象。这将引发空指针异常: kafka-spring过去为我工作得很好

  • 我正在尝试使用springboot访问数据库,但是spring应用程序在下面抛出了一个异常。 创建名为“welcome controller”的bean时出错:注入autowired依赖项失败;嵌套异常为org.springframework.beans.factory.beancreationexception:无法自动连接字段:private org.springframework.jdbc.

  • 本文向大家介绍springboot 多环境配置教程,包括了springboot 多环境配置教程的使用技巧和注意事项,需要的朋友参考一下 在上一课中我们通过idea工具没有做任何配置就构建了一个springboot项目,并且已经成功启动了,但我们都很清楚这些都远远不能达到我们实际项目的需求,比如我们要引入我们自己的redis配置、mysql配置等,应该如何处理呢?在spring mvc中我们都是通过

  • Eureka Discovery服务器(包括/config/*服务器上的云配置服务)正在向Eureka服务器注册,并且Eureka仪表板显示了该实例。此服务在端口9001上运行,启用SSL并进行用户身份验证。服务照常工作。 然后我创建了一个新的SpringBoot服务,它连接到Eureka并注册到它。由于使用了自签名证书,我在这篇文章中编写了一个小的SSLConfguration类:如何覆盖Spr