我有一个可运行的任务,我试图自动连接字段,但当我这样做时,任务不会运行。当我自动连接runnable外部的字段时,它工作正常。为什么会发生这种情况?还有没有其他更简单的方法可以在runnable中获取自动安装字段的新实例,而不是在内部自动安装它?
这是我的可运行方法”
Runnable task = new Runnable() {
@Autowired
ICruxPanelClientService CruxPanelClientService;
public void run (){
CruxPanelClientService.setCruxWebServiceBaseURL("http://10.41.181.23:8080");
CronCruxModel m = new CronCruxModel();
m = model1.get(model_var);
System.out.println("EXECUTING");
System.out.println(m.getService_status() + " ---------EXEexecution");
System.out.println(m.getCat_name() + "Executing Name ");
// time = m.getService_time();
UpdateCategoryRequest updateCategoryRequest = new UpdateCategoryRequest();
CategoryModel categoryModel = new CategoryModel();
categoryModel.setColor(m.getCat_color());
categoryModel.setIcon(m.getCat_icon());
categoryModel.setIconWhite(m.getCat_icon_white());
categoryModel.setName(m.getCat_name());
categoryModel.setId(m.getCat_id());
categoryModel.setKey(m.getCat_catkey());
categoryModel.setIndexOrder(m.getCat_indexOrder());
updateCategoryRequest.setCategory(categoryModel);
CruxPanelClientService.updateCategory(updateCategoryRequest);
GetServiceDataIdByCategoryIdRequest request1 = new GetServiceDataIdByCategoryIdRequest();
request1.setId(m.getCat_id());
GetServiceDataIdByCategoryIdResponse response1 = CruxPanelClientService.getServiceDataIdByCategoryId(request1);
ArrayList<ServiceModel> service = new ArrayList<ServiceModel>();
service = response1.getServiceModels();
JSONArray json = new JSONArray();
if(m.getService_order_succ_msg()==null)
{
json = new JSONArray();
}
else {
json = new JSONArray(m.getService_order_succ_msg());
}
String message = m.getService_order_succ_msg();
for (int j=0;j<service.size();j++)
{
UpdateServiceMasterRequest req = new UpdateServiceMasterRequest();
ServiceModel s = new ServiceModel();
s=service.get(j);
;
JSONObject obj = new JSONObject();
if(json.length()==0 )
{
String ms = null;
s.setOrderSuccessMessage(ms);
req.setServiceModel(s);
}
else {
String message1 = json.get(j).toString();
if(message1.equals(null) || message1.equals("")) {
String ms = null;
s.setOrderSuccessMessage(ms);
req.setServiceModel(s);
}
else {
s.setOrderSuccessMessage(message1);
req.setServiceModel(s);
}
}
CruxPanelClientService.updateServiceMaster(req);
}
m.setService_status("executed");
UpdateCronCruxRequest q = new UpdateCronCruxRequest();
q.setCronCruxModel(m);
CruxPanelClientService.updateCronCrux(q);
}
};`
Spring不@autowire
任何东西进入非托管实例(您使用new
创建的实例,与Spring创建和管理的实例相反)。
这给你留下了以下选择:
@autowire
外部的依赖项,并将其传递给Runnable
(或使其可由Running
访问)Runnable
,并在需要的地方创建@autowire
applicationContext.getBean(..)
)使用线程时要小心作用域和延迟初始化,因为一些Spring作用域(例如“请求”或“会话”作用域)是线程本地绑定的(例如,在新线程中使用延迟请求作用域依赖项时,该依赖项在执行时不再与当前请求关联)。
@Autowire
不能用于匿名类(因为您调用了new
,而不是Spring),您可以在外部类中自动连接一个字段,然后在Runnable
中使用该字段。
或者使Runnable
成为一个完整的类(不是匿名的)并使其成为bean(并自动装配,例如使用id
)
问题是Spring不能控制可运行文件的创建。有几种可能的解决方案:
示例:
@Service
public class SomeService {
@Autowired
private ICruxPanelClientService cruxPanelClientService;
public Runnable newRunnable() {
return new Runnable() {
public void run() {
cruxPanelClientService <- will be visible here and injected
}
}
}
}
示例:
@Configuration
public class Runnableconfiguration {
@Bean
@Scope("prototype")
public Runnable newRunnbale(final ICruxPanelClientService cruxPanelClientService) {
return new Runnable() {
public void run() {
cruxPanelClientService <- will be visible here
}
}
}
}
问题内容: 当我运行TaskJob时,我得到了空指针异常,因为Spring不会自动装配serviceJob服务。是新线程导致此问题,因为Spring自动连接mysqlService没有任何问题? 我的applicationContext.xml; 我的课是; 编辑: TaskJob实例化; 问题答案: Spring仅自动装配其创建的组件。您正在调用新的TaskJob(),Spring不知道该对象,
我已经尝试在表视图单元格中硬编码行高。运行程序后,它看起来只有一行。我怀疑这是因为表视图的行的高度。 你能告诉我这里出了什么问题吗?
我试图在单击按钮或菜单项时将用户重定向到另一个页面。不幸的是,onClick函数只在运行时起作用,在实际单击时不起作用,我不知道为什么。 这是我的功能 如果我调用函数时没有这样的回调 它在运行时调用,而不是在实际单击按钮或菜单项时调用。被调用的函数没有任何问题(我尝试过在单击时console.log一些东西,但没有结果)。 我错过了什么或做错了什么?
问题内容: Netbeans说我的三元运算符不是语句。怎么会? 我尝试过if / then / else对应项,并且工作正常: 问题答案: 三元运算符中的语句必须是非空的。他们需要退货。
我对SonarRunner有以下问题。 SonarQube 以及 Sonar 运行器无法拉取 junit 格式的 xml 报告 “单元测试”或“测试覆盖率”小组件不显示。它说没有数据。我正在按照此处描述的说明进行操作 我按照描述手动创建了XML格式的报告文件,但是仍然没有成功。 下面是 XML 文件 - TEST-Firefox_210_Mac_OS.com.company.BarTest.xml
我是JPA新手,正在使用spring数据。我想建立一个多单单向关系。我的表格是国家和地区,正如预期的那样,关系是许多国家属于一个地区。我尝试从Country实体获取所有数据,但失败了,出现以下错误。 错误 区域类别 国家/地区级 存储库 测试用例 错误-异常 堆栈跟踪 导致此问题的原因是什么?无法转换为内部表示是什么意思?如何克服这个问题?