自动对象变为空

时间:2018-04-03 17:01:34

标签: java spring spring-boot

我正在为我的应用程序使用Spring Boot。我在application.properties文件中定义了JNDI名称。

当我尝试在下面的课程中获得JdbcTemplate时,null

@Configuration
public class DemoClass
{
    @Autowired
    private JdbcTemplate template;

    @Bean
    private DataSource getDS(){
        return template.getDataSource(); //NPE
    }
}

另一个班级

@Component
public class SecondClass {
    @Autowired
    private JdbcTemplate template;

    public void show(){
        template.getDataSource(): // Working Fine
    }
}

4 个答案:

答案 0 :(得分:1)

我不确定默认配置如果..如果不配置,那么也许您可以尝试自己配置:

@Autowired
DataSoure dataSource;

@Bean
public JdbcTemplate getJdbcTemplate() {
  return new JdbcTemplate(dataSource);
}

在任何情况下,如果您只需要DataSource,我认为它是由Spring Boot自动配置的,因此您可以在需要时直接自动装配它。

答案 1 :(得分:1)

@Repository
public class DataRepository {

    private JdbcTemplate jdbcTemplate;
    @Autowired
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }


    public int updateCandidate() {
    return this.jdbcTemplate.update("update .... from table where ....");
    }
}   
  • application.properties

    数据库连接详情

    spring.datasource.url=jdbc:oracle:thin:***

    spring.datasource.username=Scott

    spring.datasource.password=Tiger

    spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver

    spring.datasource.tomcat.initial-size=1

    spring.datasource.tomcat.max-active=1

    spring.datasource.tomcat.min-idle=1

    spring.datasource.tomcat.max-idle=1

答案 2 :(得分:1)

如果您在getDS上获得NPE。这意味着JdbcTemplate尚未注入,也许它无法注入。

通过

给出一个关于bean依赖关系的提示
    @Bean
    public JdbcTemplate getJdbcTemplate(DataSource dataSource){
        return new JdbcTemplate(dataSource)
    }

或者

    @Bean
    @DependsOn("template")
    public DataSouce getDS(){
        return template.getDataSource();
    }

答案 3 :(得分:0)

默认@Autowired设置required=true,因此Spring不应构建DemoClass

您很可能正在创建new DemoClass()或完全禁用注释配置,并且DemoClass类已手动注册,例如使用XML。

而是确保使用Spring的组件扫描发现DemoClass类,例如使用@SpringBootApplication@ComponentScan例如根据{{​​3}}。