问题描述
我正在尝试使用 jdbcTemplate 查询 MysqL 数据库以获取 SYSDATE。所以查询就像SELECT SYSDATE()
但是,我收到以下错误:
Exception in thread "main" java.lang.NullPointerException
at com.Trade.xml.modifier.Test.<init>(Test.java:18)
at com.Trade.xml.modifier.TradeModifierApplication.main(TradeModifierApplication.java:17)
这是我做的一些事情:
application.properties
看起来像这样:
spring.datasource.url=jdbc:MysqL://localhost:3306/xmlconverter
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.MysqL.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect
DatabaseConfiguration.class
看起来像这样
@Configuration
public class DatabaseConfiguration {
@Value("${spring.datasource.driver-class-name}")
private String driverName;
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String userName;
@Value("${spring.datasource.password}")
private String password;
@Bean(name = "dataSource")
public DataSource dataSource() {
final DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(driverName);
dataSource.setUrl(url);
dataSource.setUsername(userName);
dataSource.setPassword(password);
return dataSource;
}
@Bean
public JdbcTemplate dbjdbcTemplate() {
return new JdbcTemplate(dataSource());
}
}
2.我还创建了一个 Test.class
,我在其中编写了查询方法
@Service
public class Test {
//Since a bean is created in DatabaseConfiguration,//"template = new JdbcTemplate()" is omitted (should be recognized automatically,right?)
@Autowired
private JdbcTemplate template;
public String getDate() {
String sql = "SELECT SYSDATE()";
return template.queryForObject(sql,String.class);
}
}
-
主类如下
@SpringBootApplication public class TradeModifierApplication { public static void main(String[] args) { SpringApplication.run(TradeModifierApplication.class,args); Test test = new test(); System.out.println(test.getDate());
此时我已经阅读了整个互联网,但我不确定这个 NPE 的根本原因是什么。任何帮助/提示将不胜感激。
解决方法
问题应该是 TradeModifierApplication 中的这一行:
Test test = new Test();
你应该让spring容器实例化Test类。
一种方法是通过以下方式注入:
public static void main(String[] args) {
ApplicationContext applicationContext = SpringApplication.run(TradeModifierApplication.class,args);
Test service = applicationContext.getBean(Test.class);
service.getDate());
}
}