我如何区分 java 中相同功能的预定调用和 HTTP 调用?
how can i differentiate between scheduled call and HTTP call of the same function in java?
我的微服务中有一个 get 函数,它本质上是从数据库中获取数据。此功能 运行 作为调度程序(cron 作业),也作为 api 端点,可以从 UI.
触发
@GetMapping(value = "getDataUI")
public String getDataUI() throws Exception {
return service.getData(); // call to service layer
}
//service layer
@Scheduled(cron = "0 0 8 * * ?")
public String getData(){
// logic here //
}
我想在 getData() 中添加一些逻辑,只有当它被调度程序触发时才会执行,当从 UI ("/getDataUI").
我该怎么做?还是有更好的方法来实现我正在尝试做的事情?
请注意,使用 @Scheduled
注释方法需要遵循的简单规则是:
- 该方法通常应具有 void return 类型(否则,returned 值将被忽略)
- 该方法不应期望任何参数
解决方案1.创建两个单独的方法
保持简单:
public class DataService implements Service {
public String getData() {
return "Data";
}
@Scheduled(cron = "0 0 8 * * ?")
public void performScheduler() {
/*scheduler logic*/
String data = getData();
/* process data */
}
}
解决方案 2. 为调度程序创建单独的服务
public class SchedulerDataService {
private Service service;
public SchedulerDataService(Service service) {
this.service = service;
}
@Scheduled(cron = "0 0 8 * * ?")
public void performScheduler() {
/*scheduler logic*/
String data = service.getData();
/* process data */
}
}
可以通过以下方式实现
- cron作业和服务方法的重构
- Cron Job 可以有包装器方法来调用服务方法。
- 在服务方法中添加参数
在上面的例子中:
1.Same 如上 getDataUI
@GetMapping(value = "getDataUI")
public String getDataUI() throws Exception {
--
return service.getData("UI"); // call to service layer
}
从服务层删除了计划注释
//服务层
public String getData(String param){
if(param=="CRON")
//
else
//
}
安排任务
@Scheduled(cron = "0 0 8 * * ?")
public String getScheduleData(){
//service.getData("CRON");
}
我的微服务中有一个 get 函数,它本质上是从数据库中获取数据。此功能 运行 作为调度程序(cron 作业),也作为 api 端点,可以从 UI.
触发@GetMapping(value = "getDataUI")
public String getDataUI() throws Exception {
return service.getData(); // call to service layer
}
//service layer
@Scheduled(cron = "0 0 8 * * ?")
public String getData(){
// logic here //
}
我想在 getData() 中添加一些逻辑,只有当它被调度程序触发时才会执行,当从 UI ("/getDataUI").
我该怎么做?还是有更好的方法来实现我正在尝试做的事情?
请注意,使用 @Scheduled
注释方法需要遵循的简单规则是:
- 该方法通常应具有 void return 类型(否则,returned 值将被忽略)
- 该方法不应期望任何参数
解决方案1.创建两个单独的方法
保持简单:
public class DataService implements Service {
public String getData() {
return "Data";
}
@Scheduled(cron = "0 0 8 * * ?")
public void performScheduler() {
/*scheduler logic*/
String data = getData();
/* process data */
}
}
解决方案 2. 为调度程序创建单独的服务
public class SchedulerDataService {
private Service service;
public SchedulerDataService(Service service) {
this.service = service;
}
@Scheduled(cron = "0 0 8 * * ?")
public void performScheduler() {
/*scheduler logic*/
String data = service.getData();
/* process data */
}
}
可以通过以下方式实现
- cron作业和服务方法的重构
- Cron Job 可以有包装器方法来调用服务方法。
- 在服务方法中添加参数
在上面的例子中:
1.Same 如上 getDataUI
@GetMapping(value = "getDataUI")
public String getDataUI() throws Exception {
--
return service.getData("UI"); // call to service layer
}
从服务层删除了计划注释
//服务层
public String getData(String param){ if(param=="CRON") // else // }
安排任务
@Scheduled(cron = "0 0 8 * * ?") public String getScheduleData(){ //service.getData("CRON"); }