Java 自动连线对象正在变为null

Java 自动连线对象正在变为null,java,spring,spring-boot,Java,Spring,Spring Boot,我正在为我的应用程序使用Spring Boot。我正在application.properties文件中定义JNDI名称 当我试图在下面的类中获取JdbcTemplate时,它的null: @Configuration public class DemoClass { @Autowired private JdbcTemplate template; @Bean private DataSource getDS(){ return templat

我正在为我的应用程序使用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
    }
}

我不确定默认情况下是否配置了此项。。如果不是,那么您可以尝试自己配置:

@Autowired
DataSoure dataSource;

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

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

我不确定默认情况下是否配置了此选项。。如果不是,那么您可以尝试自己配置:

@Autowired
DataSoure dataSource;

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

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

默认情况下
@Autowired
设置
required=true
,因此
DemoClass
不应由Spring构造

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


相反,请确保使用Spring的组件扫描发现
DemoClass
类,例如使用
@SpringBootApplication
@ComponentScan
,例如根据默认设置
@Autowired
设置
required=true
,因此
DemoClass
不应由Spring构建

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

相反,请确保使用Spring的组件扫描(例如使用
@SpringBootApplication
@ComponentScan
查找
DemoClass
类,例如根据

  • 应用程序属性

    数据库连接详细信息

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

    spring.datasource.username=Scott

    spring.datasource.password=Tiger

    spring.datasource.driver类名=oracle.jdbc.driver.OracleDriver

    spring.datasource.tomcat.initial size=1

    spring.datasource.tomcat.max active=1

    spring.datasource.tomcat.minidle=1

    spring.datasource.tomcat.max idle=1

  • 应用程序属性

    数据库连接详细信息

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

    spring.datasource.username=Scott

    spring.datasource.password=Tiger

    spring.datasource.driver类名=oracle.jdbc.driver.OracleDriver

    spring.datasource.tomcat.initial size=1

    spring.datasource.tomcat.max active=1

    spring.datasource.tomcat.minidle=1

    spring.datasource.tomcat.max idle=1


如果你在getDS获得NPE。这意味着JdbcTemplate尚未注入,可能无法注入

通过

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


如果你在getDS获得NPE。这意味着JdbcTemplate尚未注入,可能无法注入

通过

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


请同时提供应用程序属性和启动配置。如果没有这些信息,没有人可以帮助您jdbc模板依赖于数据源。将数据源从模板中拉出是没有意义的。如果您需要的话,只需自动连接数据源。检查应用程序属性中的jndi名称和应用程序服务器上配置的名称。还要检查应用程序服务器上的数据源配置。请同时提供应用程序属性和启动配置。如果没有这些信息,没有人可以帮助您jdbc模板依赖于数据源。将数据源从模板中拉出是没有意义的。如果您需要的话,只需自动连接数据源。检查应用程序属性中的jndi名称和应用程序服务器上配置的名称。还要检查应用服务器上的数据源配置。