簡體   English   中英

我無法在Spring的后台運行該方法

[英]I can not run the method in the background in Spring

我有一個服務DocumentServiceImpl。

在其中,我想在后台運行class GlobalSearch的方法index()

@Service
@RequiredArgsConstructor
 public class DocumentServiceImpl implements DocumentService { 

... any code

@Transactional
 public void save(){

...

  Thread indexTread = new Thread(new GlobalSearch(file, id), "GlobalSearch");
  indexTread.start();

....

 }

}

使用來自類ExtractTextFromFile的方法的類GlobalSearch的方法index 我使用構造函數和Lombok注釋@RequiredArgsConstructor注入類ExtractTextFromFile

@Component
@RequiredArgsConstructor
 public class GlobalSearch implements Runnable{
 public final ExtractTextFromFile extractTextFromFile; (41 lines)

 public File file;
 public Long id;
 public GlobalSearch(File File, Long id){
    this.file = file;
    this.id = id;
}

public void index(File file, Long id) {
    File textFile = extractTextFromFile.toText(file, id);

 ... code of this method

}

@Override
public void run() {
    index(file, id);
}

...other methods
public void search(){...}
public String delete(){...}

}

..但IDE給出了Variable 'extractTextFromFile' might not have been initializepublic final ExtractTextFromFile extractTextFromFile; Variable 'extractTextFromFile' might not have been initialize public final ExtractTextFromFile extractTextFromFile;

如果我使用注入:

@Autowired
ExtractTextFromFile extractTextFromFile;

然后給出錯誤:

Exception in thread "GlobalSearch" java.lang.NullPointerException
at bps.module.zxc.component.GlobalSearch.index(GlobalSearch.java:41)
at bps.module.zxc.component.GlobalSearch.run(GlobalSearch.java:136)
at java.lang.Thread.run(Thread.java:748)

此類ExtractTextFromFile:

@Component
@RequiredArgsConstructor
 public class ExtractTextFromFile {
 public File toText(File file, Long id) {
  extractFromPfd();
  extractFromWord();
 }
  extractFromPfd(){...};
  extractFromWord(){...};
 }

我解決了這個問題,刪除了GlobalSearch和ExtractTextFromFile類的注解@Component,然后將它們初始化為簡單的句點

 GlobalSearch globalSearch = new GlobalSearch() 

...和

 ExtractTextFromFile extractTextFromFile = new ExtractTextFromFile()

你為什么不嘗試@asyc方法和@EnableAsyc

@Async
     public void looper()
     {
        try {
            Thread.sleep(15000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        for(int i=0;i<20000;i++)
        {
            System.out.println("hitting "+i);
        }
     }

通過配置使用@EnableAsync

@SpringBootApplication
@EnableAsync
public class SpringbootdemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootdemoApplication.class, args);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM