spring boot:无法自动装配bean,但是bean肯定是定义的

时间:2015-01-08 19:34:57

标签: spring spring-mvc autowired

我写了一个小的spring启动程序,需要使用jdbcTemplate连接到数据库。 JDBC驱动程序存在,我在application.properties中设置了所有内容:

spring.datasource.url=jdbc:oracle:thin:@servername:1521:foo
spring.datasource.username=guesswho
spring.datasource.password=iwonttell
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver

当我让spring boot执行器通过打开localhost:8080 / beans显示bean时,我可以看到我的类需要bean ...

1:Object
bean:"mybean"
scope:"singleton"
type:"de...."
resource:"file [C:/....class]"
dependencies:Array[1]
0:"jdbcTemplate"

......我可以看到bean被定义了:

56:Object
bean:"jdbcTemplate"
scope:"singleton"
type:"org.springframework.jdbc.core.JdbcTemplate"
resource:"class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$JdbcTemplateConfiguration.class]"
dependencies:Array[0]

这是我的代码,它显示了我尝试的所有三种自动装配变体,但没有一种工作

public class myBean implements IMyBean {
  @Autowired
  private JdbcTemplate jdbcTemplate;

  @Autowired
  public myBean(JdbcTemplate jdbcTemplate) {
    this.jdbcTemplate = jdbcTemplate;
  }

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

  @Override
  public foo searchDb(String for) {
    String sql = "SELECT bar FROM ...";

    jdbcTemplate.query( sql, ...

在jdbcTemplate.query的最后一行中发生了NPE。

我想我无法看到树木的福雷斯特。我检查了stackoverflow提供的建议答案(例如spring-boot properties not @Autowired),但我认为它们不符合我的问题。全心全意地感谢帮助...

1 个答案:

答案 0 :(得分:1)

这个问题是由一个被遗忘的注释引起的:@AutoWired丢失了,因此我有两个实例。一个配置正确并包含jdbcTemplate,另一个具有null jdbcTemplate。 我查了第一个,但没用过。