JdbcTemplate无法使用自动装配

时间:2016-03-18 08:43:48

标签: java spring-mvc spring-boot jdbctemplate

我正在使用Springboot创建一个REST应用程序。在做了一些研究后,我将JdbcTemplate添加到它,而不是直接使用Jdbc和结果集。我在application.properties中有以下配置。

server.context-path=/foo
spring.datasource.driverClassName=com.teradata.jdbc.TeraDriver
spring.datasource.url=jdbc:teradata://url
spring.datasource.username=root
spring.datasource.password=root

我的REST控制器具有以下代码

@RestController
public class LosController {

    @CrossOrigin
    @RequestMapping("/bar")
    public String Bar(){
        Gson gson = new Gson();
        Bar bar = new Bar();
        response = gson.toJson(bar.getData());
        return response;
    }

在这个对象中,我有

public class Bar {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    public List<BarObject> getData(){
        String selectSql = "SELECT * FROM BAR";
        System.out.println(selectSql);
        System.out.println(jdbcTemplate.getDataSource().toString());

        List<BarObject> barObjs = jdbcTemplate.query(selectSql, new BarMapper());       

        return barObjs;
    }
}

我经历了这个link并配置了所提到的一切。我能够看到System.out.println(selectSql)正常工作。但在下一行,我得到null pointer exception。所以JdbcTemplate对象并不是我感觉到的数据。我怎样才能使这个工作?我试图不使用任何xml配置,这就是我选择属性文件的原因。

1 个答案:

答案 0 :(得分:1)

Bar不是春天豆。

要使其正常运行,您可以使用Bar@Component进行注释,并在LosController中自动加盖,而不是使用new创建。

@RestController
public class LosController {

    @Autowired
    private Bar bar;

    @CrossOrigin
    @RequestMapping("/bar")
    public String Bar(){
        Gson gson = new Gson();
        response = gson.toJson(bar.getData());
        return response;
    }
}

@Component
public class Bar {

    @Autowired
    private JdbcTemplate jdbcTemplate;


    public List<BarObject> getData(){
        String selectSql = "SELECT * FROM BAR";
        System.out.println(selectSql);
        System.out.println(jdbcTemplate.getDataSource().toString());

        List<BarObject> barObjs = jdbcTemplate.query(selectSql, new BarMapper());       

        return barObjs;
    }
}