Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Mengakses Kacang Skop Permintaan dalam Tugas Asynchronous pada Musim Bunga?

Bagaimanakah Saya Boleh Mengakses Kacang Skop Permintaan dalam Tugas Asynchronous pada Musim Bunga?

Linda Hamilton
Lepaskan: 2024-11-03 04:25:02
asal
994 orang telah melayarinya

 How Can I Access Request-Scoped Beans in Asynchronous Tasks in Spring?

Mendayakan Skop Permintaan dalam Pelaksanaan Tugas Asynchronous

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:

  1. 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>
    Salin selepas log masuk
  2. 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>
    Salin selepas log masuk
  3. Timpa Konfigurasi Pelaksana:

    <code class="java">@Configuration
    public class ExecutorConfig extends AsyncConfigurerSupport {
        @Override
        @Bean
        public Executor getAsyncExecutor() {
            return new ContextAwarePoolExecutor();
        }
    }</code>
    Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan