gpt4 book ai didi

java - 在线程中进行 DAO 注入(inject)

转载 作者:行者123 更新时间:2023-12-01 18:51:09 25 4
gpt4 key购买 nike

我正在使用wildfly在java ee中开发一个Web应用程序,我必须开发一个立即响应客户端的Web服务,但是您必须创建一个任务或线程来执行一些任务,并最终更新记录中的记录数据库

这是一个基本示例,这里创建了线程

@GET
@Path("/createReq")
@Produces("application/json")
public void createReq() {
objThread trip = new ObjThread();
trip.setIdTrip("id");
trip.start();
}

这是一个基本示例,这里创建了线程

public class ObjThread extends Thread {
volatile boolean ejecutar = true;
public String idTrip;
private int time = 0;

@Inject
Tbl_car_tripDAO tripDAO;

@Override
public void run() {
try {
while (ejecutar) {
if (time == 1) {
// task 1
} else if (time == 3) { //30
// task 2
} else if (time >= 5) { //45
// task 3
detener();
changeStatus();
}
Thread.sleep(1000);
time++;
}
} catch (Exception e) {
// TODO: handle exception
}
}

public void detener() {
ejecutar = false;
}

public void changeStatus() {
try {
Tbl_car_trip trip= tripDAO.getTripByIdTrip(idTrip);
trip.setCar_tri_status("data");
tripDAO.update(trip);
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
}

public void setIdTrip(String idTrip) {
this.idTrip = idTrip;
}
}

但是在执行时,我在changeStatus方法中遇到持久性错误,但是如果我在另一个类中使用相同的方法和@inject注释,它就可以正常工作。您能帮我解决这个问题吗? 。谢谢

升级

这是我的 DAO 类

@Singleton
public class Tbl_car_tripDAO {

@Inject
private EntityManager em;

public boolean update(Tbl_car_trip tbl_car_trip) {
try {
em.merge(tbl_car_trip);
return true;
} catch (Exception e) {
return false;
}
}

最佳答案

ObjThread 必须是 Spring bean,以便您可以注入(inject)依赖项 (Tbl_car_tripDAO)。

@Component
@Scope("prototype")
public class ObjThread extends Thread {

您需要从Sprint上下文中获取ObjThread(无法使用new ObjThread()实例化

关于java - 在线程中进行 DAO 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59737682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com