Rumah Java javaTutorial Menggunakan Durid untuk pengurusan kolam sambungan pangkalan data dalam pembangunan API Java

Menggunakan Durid untuk pengurusan kolam sambungan pangkalan data dalam pembangunan API Java

Jun 19, 2023 am 08:44 AM
java api durid

Semasa proses pembangunan Java API, menyambung ke pangkalan data adalah keperluan biasa. Memandangkan menggunakan DriverManager untuk mendapatkan sambungan pangkalan data setiap kali akan membawa overhed yang tinggi, adalah perlu untuk menggunakan teknologi pengumpulan sambungan. Druid ialah kumpulan sambungan JDBC berprestasi tinggi dengan satu siri fungsi berkuasa seperti pemantauan, statistik dan pengembangan Artikel ini akan memperkenalkan cara menggunakan Druid dalam pembangunan Java API.

1. Pengenalan kepada Druid
Druid ialah kumpulan sambungan pangkalan data yang dibangunkan oleh Alibaba. Ia mempunyai ciri-ciri prestasi cemerlang, fungsi yang kaya dan penggunaan yang mudah. Kelebihan kumpulan sambungan Druid adalah seperti berikut:

  1. Respon pantas terhadap permintaan SQL
  2. Menyediakan keupayaan pemantauan SQL
  3. Menyediakan nilai purata, maksimum, minimum SQL masa pelaksanaan, dsb. Statistik
  4. Dayakan fungsi suntikan anti-SQL
  5. Kod Druid adalah sekecil pemacu pangkalan data, tidak lebih daripada 2MB, yang sangat sesuai untuk aplikasi terbenam.

2. Gunakan Druid untuk pengurusan kumpulan sambungan
Mari kita lihat cara menggunakan Druid untuk pengurusan kumpulan sambungan dalam aplikasi Java.

  1. Perkenalkan kebergantungan Druid
    Perkenalkan kebergantungan berkaitan Druid dalam pom.xml
<!-- druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.10</version>
</dependency>
  1. Konfigurasikan kumpulan sambungan Druid
    Sebelum menggunakan kumpulan sambungan Druid , yang perlu dikonfigurasikan. Konfigurasi Druid boleh dicapai melalui dua kaedah: kod dan fail konfigurasi Di sini kita mengambil kaedah kod sebagai contoh.
//创建 Properties 对象用于存储配置信息
Properties props = new Properties();

//设置连接池基本属性
props.put("driverClassName", "com.mysql.jdbc.Driver");
props.put("url", "jdbc:mysql://localhost:3306/test");
props.put("username", "root");
props.put("password", "root");

//连接属性配置
props.put("initialSize", "5");
props.put("minIdle", "5");
props.put("maxActive", "20");
props.put("maxWait", "60000");
props.put("timeBetweenEvictionRunsMillis", "60000");
props.put("minEvictableIdleTimeMillis", "300000");
props.put("validationQuery", "SELECT 'x'");
props.put("testWhileIdle", "true");
props.put("testOnBorrow", "false");
props.put("testOnReturn", "false");
props.put("poolPreparedStatements", "true");
props.put("maxOpenPreparedStatements", "20");
props.put("filters", "stat,wall,log4j");

//创建 DruidDataSource 实例
DruidDataSource dataSource = new DruidDataSource();
dataSource.configFromPropety(props);

Dalam kod di atas, kami menetapkan URL sambungan pangkalan data, nama pengguna, kata laluan, serta bilangan awal sambungan, bilangan maksimum sambungan dan maklumat konfigurasi lain. Antaranya, maksud setiap konfigurasi adalah seperti berikut:

  • driverClassName: JDBC driver full class name
  • url: database connection URL
  • username: database connection user nama
  • kata laluan: kata laluan sambungan pangkalan data
  • initialSize: bilangan sambungan fizikal yang diwujudkan semasa permulaan. Permulaan berlaku pada permulaan.
  • maxActive: Bilangan maksimum kumpulan sambungan
  • minIdle: Bilangan minimum kumpulan sambungan
  • maxTunggu: Masa menunggu maksimum apabila mendapatkan sambungan, dalam milisaat.
  • timeBetweenEvictionRunsMillis: mempunyai dua maksud: 1) Benang Destroy akan mengesan selang sambungan. 2) Untuk asas penghakiman testWhileIdle, sila rujuk perihalan atribut testWhileIdle untuk butiran
  • minEvictableIdleTimeMillis: masa kemandirian minimum sambungan dalam kolam, dalam milisaat.
    validationQuery’ digunakan untuk menyemak sama ada sambungan itu sah. Ia memerlukan pernyataan pertanyaan (hasil pelaksanaan pernyataan itu tidak penting).
    -testWhileIdle: Diuji semasa memohon sambungan Jika masa melahu lebih besar daripada timeBetweenEvictionRunsMillis, laksanakan validationQuery untuk menyemak sama ada sambungan itu sah.
    -testOnBorrow: Apabila memohon sambungan, laksanakan validationQuery untuk menyemak sama ada sambungan itu sah Konfigurasi ini akan mengurangkan prestasi.
    -testOnReturn: Apabila mengembalikan sambungan, jalankan validationQuery untuk menyemak sama ada sambungan itu sah dengan melakukan konfigurasi ini akan mengurangkan prestasi dan menambah pertimbangan pada kumpulan sambungan
    -poolPreparedStatements: sama ada untuk cache preparedStatement. PSCache. PSCache sangat meningkatkan prestasi pangkalan data yang menyokong kursor, seperti Oracle. Adalah disyorkan untuk menutupnya di bawah mysql.
    -maxOpenPreparedStatements: Selepas menghidupkan poolPreparedStatements, anda perlu menentukan bilangan pernyataan cache pada setiap sambungan
    -penapis: Jenis atribut ialah pemalam Sambungan dikonfigurasikan melalui pemalam yang biasa digunakan. ins ialah:

      监控统计用的filter:stat
      日志用的filter:log4j
      防御SQL注入的filter:wall
    
  1. Dapatkan sambungan pangkalan data
    Selepas contoh DruidDataSource dicipta, kita boleh mendapatkan sambungan melalui kaedah DruidDataSource.getConnection().
Connection conn = dataSource.getConnection();
  1. Pelaksanaan statistik pemantauan dan log pelaksanaan SQL
    Selain fungsi asas kumpulan sambungan, Druid juga menyediakan fungsi praktikal seperti statistik pemantauan dan log pelaksanaan SQL. Kita boleh mencapai ini dengan menetapkan Penapis semasa membangunkan kod.
// 创建 Druid 连接池
DruidDataSource dataSource = new DruidDataSource();
//... 配置数据库连接池信息

// 配置监控统计
// 设置监控统计用的 Filter,用于统计监控信息
WallFilter wallFilter = new WallFilter();
wallFilter.setDbType("mysql");

StatFilter statFilter = new StatFilter();
statFilter.setSlowSqlMillis(1000);
statFilter.setLogSlowSql(true);

// 设置 Druid 连接池的 Filters
dataSource.setProxyFilters(Arrays.asList(wallFilter, statFilter));

// 打印 SQL 执行日志
Log4jFilter logFilter = new Log4jFilter();
logFilter.setStatementExecutableSqlLogEnable(true);
dataSource.setProxyFilters(Collections.singletonList(logFilter));

Semasa proses pelaksanaan khusus, kita boleh memilih untuk menggunakan statistik pemantauan atau fungsi log mengikut keperluan.

3. Kesimpulan
Artikel ini memperkenalkan cara menggunakan Druid untuk pengurusan kumpulan sambungan dalam pembangunan Java API. Dengan menggunakan Druid, kami bukan sahaja boleh meningkatkan prestasi aplikasi, tetapi juga memperoleh pemahaman yang lebih komprehensif tentang pengendalian aplikasi melalui fungsi seperti statistik pemantauan dan log pelaksanaan SQL.

Atas ialah kandungan terperinci Menggunakan Durid untuk pengurusan kolam sambungan pangkalan data dalam pembangunan API Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT

Stock Market GPT

Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Cara memaksa laman web skala oleh UC Browser_UC Browser's Skala Web Laman Web oleh Penyemak Imbas UC Cara memaksa laman web skala oleh UC Browser_UC Browser's Skala Web Laman Web oleh Penyemak Imbas UC Sep 24, 2025 pm 04:54 PM

Pertama, aktifkan fungsi skala terbina dalam penyemak imbas UC, pergi ke Tetapan → Layari Tetapan → Font dan Typesetting atau Page Scaling, dan pilih nisbah pratetap atau peratusan tersuai; Kedua, anda boleh memaksa saiz paparan halaman dengan membuka atau mencubit gerak isyarat dengan dua jari; Untuk laman web yang menyekat skala, anda boleh meminta versi desktop laman web untuk membuka kunci sekatan; Pengguna lanjutan juga boleh mengubah suai atribut Viewport dengan melaksanakan kod JavaScript di bar alamat untuk mencapai kesan skala paksa yang lebih fleksibel.

Mengapa sistem masa nyata memerlukan jaminan tindak balas deterministik? Mengapa sistem masa nyata memerlukan jaminan tindak balas deterministik? Sep 22, 2025 pm 04:03 PM

Sistem masa nyata memerlukan tindak balas deterministik, kerana ketepatan bergantung pada masa penghantaran hasil; Sistem masa nyata yang sukar memerlukan tarikh akhir yang ketat, terlepas akan membawa kepada bencana, sementara masa nyata yang lembut membolehkan kelewatan sekali-sekala; Faktor-faktor yang tidak ditentukan seperti penjadualan, gangguan, cache, pengurusan memori, dan lain-lain mempengaruhi masa; Pelan pembinaan termasuk pemilihan RTO, analisis WCET, pengurusan sumber, pengoptimuman perkakasan dan ujian yang ketat.

Bagaimana untuk mendapatkan nama kaedah panggilan di Java? Bagaimana untuk mendapatkan nama kaedah panggilan di Java? Sep 24, 2025 am 06:41 AM

Jawapannya ialah menggunakan thread.currentThread ().

Bagaimana anda menangani pengecualian di Java? Bagaimana anda menangani pengecualian di Java? Sep 23, 2025 am 04:44 AM

Pengendalian pengecualian Java menangkap pengecualian melalui blok cuba, akhirnya blok memastikan pembersihan sumber, cuba-dengan-sumber secara automatik menguruskan sumber, melemparkan pengecualian, pengecualian adat untuk menangani kesilapan tertentu, dan mengikuti amalan terbaik seperti menangkap pengecualian tertentu, tidak mengabaikan pengecualian, dan mengelakkan blok tangkapan kosong, dengan itu mencapai kod yang rapi dan mengekalkan.

Bagaimana menggunakan kelas pilihan untuk mengelakkan NullPointerException di Java? Bagaimana menggunakan kelas pilihan untuk mengelakkan NullPointerException di Java? Sep 25, 2025 am 06:04 AM

Kelas pilihan digunakan untuk mengendalikan nilai -nilai yang selamat yang mungkin menjadi batal, mengelakkan pengecualian penunjuk null. 1. Buat contoh menggunakan pilihan. Nullable untuk mengendalikan nilai null. 2. Semak dan nilai akses melalui ISPRESENT atau Keselamatan IFPRESENT untuk mengelakkan panggilan langsung untuk menyebabkan pengecualian. 3. Gunakan Orelse dan Orelseget untuk memberikan nilai lalai, atau gunakan Orelsethrow untuk membuang pengecualian tersuai. 4. Menukar atau menapis nilai melalui operasi peta dan penapis rantaian untuk meningkatkan kebolehbacaan kod dan ketahanan.

Penggunaan CPU Tinggi Microsoft Edge Penggunaan CPU Tinggi Microsoft Edge Sep 24, 2025 am 12:17 AM

Edge menduduki CPU yang tinggi kerana penggunaan sumber yang tinggi berdasarkan kernel kromium, ditambah dengan faktor-faktor seperti halaman multi-tab, plug-in berjalan, skrip laman web dan mekanisme rendering; Penyelesaian termasuk: 1. Tutup sambungan yang tidak perlu untuk mengurangkan beban latar belakang; 2. Dayakan fungsi "Tag Tidur" untuk mengurangkan penggunaan sumber tag terbiar; 3. Bersihkan proses latar belakang dan tutup tetapan yang berkaitan dengan GPU; 4. Kemas kini penyemak imbas dan sistem untuk memastikan keserasian dan pengoptimuman prestasi.

Bagaimana untuk mendapatkan kelas objek di Java? Bagaimana untuk mendapatkan kelas objek di Java? Sep 26, 2025 am 04:58 AM

Gunakan kaedah getClass () untuk mendapatkan kelas runtime objek, seperti str.getClass () untuk mengembalikan objek kelas; Untuk jenis, anda boleh menggunakan sintaks string.class secara langsung. Kelas kelas menyediakan kaedah seperti getName (), getImpleName () untuk mendapatkan maklumat kelas, seperti num.getClass (). GetImpleName () untuk output integer.

Bagaimana cara menggunakan kaedah ganti pada rentetan di Java? Bagaimana cara menggunakan kaedah ganti pada rentetan di Java? Sep 24, 2025 am 02:53 AM

DiaplacemethodinjavareturnsanewstringwithalloccurrencesofspecifiedCharactersorsorsreplaced.ithastwoforms: OneForReplacingsinglecharactersandanotherforsubstrings.sincestringsareimmutable, theoriginalremainsuncle, "

See all articles