Rumah > Java > javaTutorial > teks badan

Cara SpringBoot memanggil lapisan perkhidmatan dalam kelas tersuai

WBOY
Lepaskan: 2023-05-11 23:01:20
ke hadapan
1303 orang telah melayarinya

Latar Belakang:

Membuat pelayan TCP untuk menyambung ke peranti pintar, dan kemudian perlu menyimpan maklumat penting seperti kedudukan yang dihantar oleh peranti dalam masa nyata ke dalam pangkalan data.

Untuk mempertimbangkan kemungkinan menyediakan antara muka rehat kepada dunia luar pada masa hadapan, pelayan TCP disepadukan ke dalam rangka kerja SpringBoot, ia juga untuk menggunakan rangka kerja mybatis untuk mencapai akses data sebagai secepat mungkin, dan kemudian menyelesaikan cara memulakan, cara log keluar, dsb. Masalahnya ialah apabila memproses mesej pelayan TCP, anda perlu menulis ke pangkalan data, terus memanggil lapisan DAO, dan menyusun serta melaporkan ralat.

Lapisan Perkhidmatan dipanggil secara normal dan berjalan ke tempat panggilan Pengecualian penunjuk nol dijejaki dan perkhidmatan didapati kosong disuntik melalui @Autowired oleh lapisan pengawal sebelumnya gagal.

Penyelesaian:

1 Muat naik kod

@Component
public class ServerHandler extends IoHandlerAdapter {
    @Autowired
    protected HealthDataService healthDataService;
    private static ServerHandler  serverHandler ;
    @PostConstruct //通过@PostConstruct实现初始化bean之前进行的操作
    public void init() {  
        serverHandler = this;  
        serverHandler.healthDataService = this.healthDataService;        
        // 初使化时将已静态化的testService实例化
    }  
    //测试调用
    public void test(){
        serverHandler .healthDataService.<你的service层方法>;
    }
Salin selepas log masuk

2 Penerangan:

Anotasi kelas yang perlu memanggil lapisan Perkhidmatan Spring dengan @Component sebagai Pemuatan komponen;

Juga dapatkan objek Bean lapisan Perkhidmatan melalui @Autowired; 🎜> Serlahkan: Lulus Anotasi @PostConstruct untuk memulakan objek statik dan healthDataService pembolehubah ahli statiknya semasa pemulaan Prinsipnya adalah untuk mendapatkan objek lapisan perkhidmatan dan menyimpannya secara statik untuk mengelakkannya daripada dikeluarkan.

Perangkap tersebut:

Apabila saya mula-mula mula memanggil, saya selalu fikir ia sangat mudah pada masa lalu, springmvc menulis konfigurasi, menandakan objek sebagai kacang , dan anda boleh memanggilnya sesuka hati Terdapat kacang dalam bekas Spring IOC, tetapi ini adalah SpringBoot, jadi mungkin ada perbezaan saya mencuba tiga halaman pertama bantuan daripada Baidu, tetapi pada dasarnya tidak berjaya. Termasuk: 1) Isytiharkan kelas alat sebagai komponen spring, seperti @controller @compent, dsb., dan tambahkan pakej di mana kelas alat terletak dalam tetapan pakej imbasan automatik spring Tidak sah

2) perkhidmatan baharu tidak sah;

Pemprosesan transaksi Springboot berbilang perkhidmatan yang memanggil satu sama lain

Saya mahu memanggil kaedah B perkhidmatan lain dalam kaedah A satu perkhidmatan, kedua-duanya kaedah A dan kaedah B Terdapat operasi pemasukan pangkalan data, dan anotasi @Transaction telah ditambahkan, tetapi apabila pengecualian dilemparkan dalam kaedah B, pernyataan sisipan dalam A masih boleh dilaksanakan dengan jayanya. Konfigurasi anotasi

adalah seperti berikut:

@Transactional(isolation= Isolation.DEFAULT,propagation= Propagation.REQUIRED)
Salin selepas log masuk

Saya hairan Selepas mencari maklumat yang berkaitan, saya mendapati bahawa masalahnya masih terletak pada konfigurasi anotasi @Transaction, yang memerlukan pengecualian konfigurasi. rollback.

@Transactional(isolation= Isolation.DEFAULT,propagation= Propagation.REQUIRED,rollbackFor = Exception.class)
Salin selepas log masuk

Dengan cara ini, apabila pengecualian dilemparkan dalam kaedah B, operasi dalam A juga akan ditarik balik dan transaksi akan memainkan peranan mengawal.

Atas ialah kandungan terperinci Cara SpringBoot memanggil lapisan perkhidmatan dalam kelas tersuai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan