Musim semi, Hibernasi, dan Sumber Data JNDI

1. Ikhtisar

Pada artikel ini, kami akan membuat aplikasi Spring menggunakan Hibernate / JPA dengan sumber data JNDI.

Jika Anda ingin menemukan kembali dasar-dasar Spring dan Hibernate, lihat artikel ini.

2. Mendeklarasikan Sumber Data

2.1. Sistem

Karena kami menggunakan sumber data JNDI, kami tidak akan mendefinisikannya dalam aplikasi kami, kami akan mendefinisikannya dalam wadah aplikasi kami.

Dalam contoh ini, kami akan menggunakan versi 8.5.x dari Tomcat dan versi 9.5.x dari database PostgreSQL.

Anda harus dapat mereplikasi langkah yang sama menggunakan wadah aplikasi Java lainnya dan database pilihan Anda (selama Anda memiliki toples JDBC yang tepat untuk itu!).

2.2. Mendeklarasikan Sumber Data di Application Container

Kami akan mendeklarasikan sumber data kami di file / conf / server.xml di dalam file elemen.

Dengan asumsi bahwa server database berjalan pada mesin yang sama dengan wadah aplikasi, dan bahwa database yang dimaksud bernama postgres , dan bahwa nama pengguna adalah baeldung dengan kata sandi pass1234 , sumber daya akan terlihat seperti ini:

Perhatikan bahwa kami telah menamai sumber daya kami jdbc / BaeldungDatabase . Ini akan menjadi nama yang akan digunakan saat mereferensikan sumber data ini.

Kami juga harus menentukan tipe dan nama kelas driver database-nya. Agar berfungsi, Anda juga harus menempatkan jar yang sesuai di / lib / (dalam hal ini, jar JDBC PostgreSQL).

Parameter konfigurasi yang tersisa adalah:

  • auth = "Penampung" - berarti bahwa penampung akan masuk ke pengelola sumber daya atas nama aplikasi
  • maxTotal, maxIdle, dan maxWaitMillis - adalah parameter konfigurasi koneksi kumpulan

Kita juga harus mendefinisikan ResourceLink di dalam fileelemen dalam / conf / konteks .xml, yang akan terlihat seperti ini:

Perhatikan bahwa kami menggunakan nama yang kami tentukan di Sumber Daya kami di server.xml .

3. Menggunakan Sumber Daya

3.1. Mengatur Aplikasi

Kami akan mendefinisikan aplikasi Spring + JPA + Hibernate sederhana menggunakan konfigurasi Java murni sekarang.

Kami akan mulai dengan menentukan konfigurasi konteks Spring (perlu diingat bahwa kami berfokus pada JNDI di sini dan mengasumsikan bahwa Anda sudah mengetahui dasar-dasar konfigurasi Spring):

@Configuration @EnableTransactionManagement @PropertySource("classpath:persistence-jndi.properties") @ComponentScan("com.baeldung.hibernate.cache") @EnableJpaRepositories(basePackages = "com.baeldung.hibernate.cache.dao") public class PersistenceJNDIConfig { @Autowired private Environment env; @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws NamingException { LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); em.setDataSource(dataSource()); // rest of entity manager configuration return em; } @Bean public DataSource dataSource() throws NamingException { return (DataSource) new JndiTemplate().lookup(env.getProperty("jdbc.url")); } @Bean public PlatformTransactionManager transactionManager(EntityManagerFactory emf) { JpaTransactionManager transactionManager = new JpaTransactionManager(); transactionManager.setEntityManagerFactory(emf); return transactionManager; } // rest of persistence configuration }

Perhatikan bahwa kami memiliki contoh lengkap konfigurasi di Spring 4 dan JPA dengan artikel Hibernate.

Untuk membuat bean dataSource kita, kita perlu mencari sumber daya JNDI yang kita definisikan di wadah aplikasi kita. Kami akan menyimpannya dalam kunci persistence-jndi.properties (di antara properti lainnya):

jdbc.url=java:comp/env/jdbc/BaeldungDatabase

Perhatikan bahwa di properti jdbc.url kami menentukan nama root untuk dicari: java: comp / env / (ini adalah default dan sesuai dengan komponen dan lingkungan) dan kemudian nama yang sama yang kami gunakan di server.xml : jdbc / BaeldungDatabase .

3.2. Konfigurasi JPA - Model, DAO dan Layanan

Kita akan menggunakan model sederhana dengan @ Entity penjelasan dengan yang dihasilkan id dan nama :

@Entity public class Foo { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "ID") private Long id; @Column(name = "NAME") private String name; // default getters and setters }

Mari tentukan repositori sederhana:

@Repository public class FooDao { @PersistenceContext private EntityManager entityManager; public List findAll() { return entityManager .createQuery("from " + Foo.class.getName()).getResultList(); } }

Dan terakhir, mari buat layanan sederhana:

@Service @Transactional public class FooService { @Autowired private FooDao dao; public List findAll() { return dao.findAll(); } }

Dengan ini, Anda memiliki semua yang Anda butuhkan untuk menggunakan sumber data JNDI di aplikasi Spring Anda.

4. Kesimpulan

Pada artikel ini, kami telah membuat contoh aplikasi Spring dengan pengaturan JPA + Hibernate yang bekerja dengan sumber data JNDI.

Perhatikan bahwa bagian terpenting adalah definisi sumber daya dalam wadah aplikasi dan pencarian sumber daya JNDI pada konfigurasi.

Dan, seperti biasa, proyek lengkap dapat ditemukan di GitHub.