我有一个带有CRUD存储库和mysql数据库的spring-boot应用程序。当我在REST控制器中使用此存储库时,没有任何问题,但是我需要在简单的Java类中使用一个存储库,但是它不起作用。
我想加载列表中的所有residentStatEntities以写入CSV文件,但无法加载。
这是我的代码:
CRUD存储库:
@Repository
public interface ResidentStatDBRepository extends CrudRepository<ResidentStatEntity, Long> {
List<ResidentStatEntity> findAll();
}
Java类:
public class ResetDB {
/**
* CRUD Repository
*/
@Autowired
private ResidentStatDBRepository residentStatDBRepository;
/**
* Delete DB and save his content in a CSV file
* @throws Exception
*/
public void save()throws Exception{
//open file
String csvFile = "residentStat.csv";
FileWriter writer = new FileWriter(csvFile, true);
//get list of all stat
List<ResidentStatEntity> residentStatEntities = residentStatDBRepository.findAll();
}
这是控制台中打印的消息:
java.lang.NullPointerException
at com.example.sems.ResetDB.save(ResetDB.java:36)
at com.example.sems.SemsApplication$1.run(SemsApplication.java:52)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
这是我使用ResetDB类的地方
@SpringBootApplication
public class SemsApplication {
public static void main(String[] args) {
SpringApplication.run(SemsApplication.class, args);
int MINUTES = 1; // The delay in minutes
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() { // Function runs every MINUTES minutes.
try{
new ResetDB().save();
System.out.println("ok");
}catch (Exception e){
e.printStackTrace();
}
}
}, 0, 1000 * 60 * MINUTES);
// 1000 milliseconds in a second * 60 per minute * the MINUTES variable.
}
}
我每分钟调用一次此函数,也许是因为它在main方法中?
预先感谢您的回答:)
答案 0 :(得分:0)
ResetDB不是Spring托管的bean。
用@Component注释ResetDB,它应该可以解决问题。
答案 1 :(得分:0)
为了使ResetDB
能够使用Spring注入管理Bean,ResetDB
本身必须由该系统实例化。
将@Component
批注添加到ResetDB
类中,并使ResetDB
的实例也自动连线。