Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Mengakses Kacang Skop Permintaan dalam Tugas Asynchronous pada Musim Bunga?
Dalam aplikasi web, permintaan biasanya diproses dalam skop DispatcherServlet atau DispatcherPortlet. Walau bagaimanapun, apabila tugasan dilaksanakan secara tak segerak, seperti menggunakan AsyncTaskExecutor, skop permintaan menjadi tidak tersedia. Ini boleh membawa kepada pengecualian apabila cuba mengakses kacang berskop permintaan dalam tugas async.
Masalah:
Untuk menyelesaikan isu ini, anda perlu mencari cara untuk mendayakan skop permintaan dalam pelaksana tugas tak segerak.
Penyelesaian:
Satu pendekatan melibatkan penciptaan pelaksana tersuai yang menyimpan maklumat skop permintaan dengan tugasan. Begini cara anda boleh melakukannya:
Buat Pelaksana Kumpulan Tugas Tersuai:
<code class="java">public class ContextAwarePoolExecutor extends ThreadPoolTaskExecutor { @Override public <T> Future<T> submit(Callable<T> task) { return super.submit(new ContextAwareCallable(task, RequestContextHolder.currentRequestAttributes())); } }</code>
Cipta Boleh Panggil Konteks Sedar:
<code class="java">public class ContextAwareCallable<T> implements Callable<T> { // ... @Override public T call() throws Exception { // Set the request context for the background thread // ... try { return task.call(); } finally { // Reset the request context // ... } } }</code>
Timpa Konfigurasi Pelaksana:
<code class="java">@Configuration public class ExecutorConfig extends AsyncConfigurerSupport { @Override @Bean public Executor getAsyncExecutor() { return new ContextAwarePoolExecutor(); } }</code>
Dengan menggunakan pelaksana tersuai ini, anda boleh menyerahkan tugasan yang mempunyai akses kepada maklumat skop permintaan. Ini membolehkan anda menggunakan kacang skop permintaan dalam tugas tak segerak anda tanpa menghadapi pengecualian berkaitan skop.
Nota:
Pendekatan ini hanya terpakai pada kacang skop Sesi dan Permintaan . Untuk konteks keselamatan (cth., Spring Security), anda mungkin perlu melaksanakan kaedah berbeza untuk menetapkan konteks dalam urutan latar belakang.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Kacang Skop Permintaan dalam Tugas Asynchronous pada Musim Bunga?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!