Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring启动进度报告_Java_Spring_Spring Boot_Progress - Fatal编程技术网

Java Spring启动进度报告

Java Spring启动进度报告,java,spring,spring-boot,progress,Java,Spring,Spring Boot,Progress,我希望能够在Spring Boot中报告某个方法的进度。我使用了一个单独的类,将当前状态存储在其中,并作为当前视图返回: 看起来是这样的: public class SearchTableReloadState { //STATIC STORAGE public static long TABLE_ROW_COUNT = 0; public static long CURRENT_OFFSET = 0; public static long CURRENT_L

我希望能够在Spring Boot中报告某个方法的进度。我使用了一个单独的类,将当前状态存储在其中,并作为当前视图返回: 看起来是这样的:

public class SearchTableReloadState {

    //STATIC STORAGE

    public static long TABLE_ROW_COUNT = 0;
    public static long CURRENT_OFFSET = 0;
    public static long CURRENT_LIMIT = 0;
    public static long DEFAULT_LIMIT = 20000;

    public static void reset() {
        TABLE_ROW_COUNT = 0;
        CURRENT_OFFSET = 0;
        CURRENT_LIMIT = DEFAULT_LIMIT;
    }

    public static void setDefaultLimit(long defaultLimit) {
        DEFAULT_LIMIT = defaultLimit;
    }

    // VIEWMODEL
    public long tableRowCount = 0;
    public long currentOffset = 0;
    public long currentLimit = 0;

    public static SearchTableReloadState getState() {
        SearchTableReloadState reloadState = new SearchTableReloadState();
        reloadState.tableRowCount = TABLE_ROW_COUNT;
        reloadState.currentOffset = CURRENT_OFFSET;
        reloadState.currentLimit = CURRENT_LIMIT;
        return reloadState;
    }
}
方法:

@RequestMapping(value = {"/manage/searchtable/reload/state"}, method = RequestMethod.GET)
public @ResponseBody SearchTableReloadState searchTableReloadState() {
    return SearchTableReloadState.getState();
} 

@ResponseStatus(HttpStatus.OK)
    @RequestMapping(value = {"/manage/searchtable/reload"}, method = RequestMethod.GET)
    public void searchTableReload() throws ResourceAlreadyExistsException, ParameterMissingIdException {
     SearchTableReloadState.reset();
     SearchTableReloadState.TABLE_ROW_COUNT = productDataReferenceDao.countJobReferences();
     productDataReferenceDao.truncateSearchTable();
     while (SearchTableReloadState.CURRENT_OFFSET < SearchTableReloadState.TABLE_ROW_COUNT) {
          ... long running task
          ....
          SearchTableReloadState.CURRENT_OFFSET += SearchTableReloadState.CURRENT_LIMIT;
        }
}
@RequestMapping(value={/manage/searchtable/reload/state},method=RequestMethod.GET)
public@ResponseBody SearchTableReloadState SearchTableReloadState(){
返回SearchTableReloadState.getState();
} 
@ResponseStatus(HttpStatus.OK)
@RequestMapping(值={/manage/searchtable/reload},方法=RequestMethod.GET)
public void searchTableReload()引发ResourceReadyExistsException、ParameterMissingIndexException{
SearchTableReloadState.reset();
SearchTableReloadState.TABLE_ROW_COUNT=productDataReferenceDao.countJobReferences();
productDataReferenceDao.truncateSearchTable();
while(SearchTableReloadState.CURRENT_OFFSET
带有/state的方法将报告当前状态,因此我可以在站点上使用Ajax调用这些状态。问题是,如果我启动长时间运行的,状态报告请求将不会完成,直到长时间运行没有完成。我认为Spring对每个请求使用单独的线程。我需要在Spring中实现线程吗


如果我对长时间运行的进程使用
@Async
注释,它的工作原理与我预期的一样,但我仍然不明白,为什么针对不同方法的两个单独的HTTP请求会相互阻塞

如果我在方法上使用
@Async
注释,那么调用它的HTTP请求将立即得到响应,它将在后台运行,我可以按预期调用state方法。即使它正在工作,我仍然不知道为什么没有异步执行它就不能工作

如果要使用
@Async
注释,必须将
@EnableAsync
注释放在使用
@SpringBootApplication
和/或
@EnableAutoConfiguration
的类上


我希望以后有人能提供更好的答案。

如果我对该方法使用
@Async
注释,则调用它的HTTP请求将立即得到响应,它将在后台运行,我可以按预期调用state方法。即使它正在工作,我仍然不知道为什么没有异步执行它就不能工作

如果要使用
@Async
注释,必须将
@EnableAsync
注释放在使用
@SpringBootApplication
和/或
@EnableAutoConfiguration
的类上


我希望以后有人能提供更好的答案。

不,我不认为它是这样工作的,你在其他地方有另一个问题,但为了确认它不符合你提到的方式,你能打开spring日志,并将它们发布在这里吗。如果您可以向SpringAppender添加线程id,以检查它是否将使用另一个线程来处理请求,那么我如何访问SpringBoot的日志?我正在和IDE中运行它,所以您是指运行过程打印到控制台窗口的内容吗?是的,您使用的是log4j吗?我使用的是Spring Boot的默认配置,我没有配置另一个日志默认Spring Boot logger使用的是
应用程序。属性
。你创建了一个吗?不,我不认为它是这样工作的,你在其他地方有另一个问题,但是为了确认它不符合你提到的方式,你能打开spring日志,并将它们发布在这里吗。如果您可以向SpringAppender添加线程id,以检查它是否将使用另一个线程来处理请求,那么我如何访问SpringBoot的日志?我正在和IDE中运行它,所以您是指运行过程打印到控制台窗口的内容吗?是的,您使用的是log4j吗?我使用的是Spring Boot的默认配置,我没有配置另一个日志默认Spring Boot logger使用的是
应用程序。属性
。你创造了一个吗?