我正在使用 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 Controller 具有以下代码
@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 配置,这就是我选择属性文件的原因。
最佳答案
Bar
不是 spring bean。
要使其正常工作,您可以使用 @Component
注释 Bar
并在 LosController
中 Autowiring 它,而不是使用 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;
}
}
关于java - JdbcTemplate 不支持 Autowiring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36079762/