Spring, Hibernate og en JNDI-datakilde

1. Oversikt

I denne artikkelen oppretter vi en Spring-applikasjon ved hjelp av Hibernate / JPA med en JNDI-datakilde.

Hvis du vil gjenoppdage det grunnleggende om vår og dvalemodus, kan du sjekke ut denne artikkelen.

2. Deklarere datakilden

2.1. System

Siden vi bruker en JNDI-datakilde, vil vi ikke definere den i applikasjonen vår, vi vil definere den i applikasjonsbeholderen vår.

I dette eksemplet skal vi bruke 8.5.x-versjonen av Tomcat og 9.5.x-versjonen av PostgreSQL-databasen.

Du bør kunne replikere de samme trinnene ved hjelp av en hvilken som helst annen Java-applikasjonsbeholder og en database du velger (så lenge du har riktige JDBC-krukker til det!).

2.2. Erklære datakilden på applikasjonsbeholderen

Vi vil erklære datakilden vår i / conf /server.xml filen inne i element.

Forutsatt at databaseserveren kjører på samme maskin som applikasjonsbeholderen, og at den tiltenkte databasen heter postgres, og at brukernavnet er baeldung med passord pass1234, ville en ressurs se slik ut:

Vær oppmerksom på at vi har kalt ressursen vår jdbc / BaeldungDatabase. Dette vil være navnet som skal brukes når det henvises til denne datakilden.

Vi har også måttet spesifisere type og databasedrivers klassenavn. For at det skal fungere, må du også plassere den tilsvarende glasset / lib / (i dette tilfellet PostgreSQLs JDBC-krukke).

Gjenværende konfigurasjonsparametere er:

  • auth = ”beholder” - betyr at containeren vil logge på ressurssjefen på vegne av applikasjonen
  • maxTotal, maxIdle, og maxWaitMillis - er konfigurasjonsparametere for bassengforbindelser

Vi må også definere en ResourceLink inne i element i / conf / kontekst.xml, som vil se ut som:

Merk at vi bruker navnet vi definerte i vårt Ressurs i server.xml.

3. Bruke ressursen

3.1. Stille inn applikasjonen

Vi skal definere en enkel Spring + JPA + Hibernate-applikasjon ved hjelp av ren Java-konfigurasjon nå.

Vi begynner med å definere vårkontekstens konfigurasjon (husk at vi fokuserer på JNDI her og antar at du allerede kjenner til det grunnleggende om vårens konfigurasjon):

@Configuration @EnableTransactionManagement @PropertySource ("classpath: persistence-jndi.properties") @ComponentScan ("com.baeldung.hibernate.cache") @EnableJpaRepositories (basePackages = "com.baeldung.hibernate.cacheDonoist.dao". {@Autowired private Environment env; @Bean offentlig LocalContainerEntityManagerFactoryBean entityManagerFactory () kaster NamingException {LocalContainerEntityManagerFactoryBean em = ny LocalContainerEntityManagerFactoryBean (); em.setDataSource (dataSource ()); // resten av enhetens lederkonfigurasjon returnerer dem; } @Bean public DataSource dataSource () kaster NamingException {return (DataSource) new JndiTemplate (). Lookup (env.getProperty ("jdbc.url")); } @Bean offentlig PlatformTransactionManager transactionManager (EntityManagerFactory emf) {JpaTransactionManager transactionManager = ny JpaTransactionManager (); transactionManager.setEntityManagerFactory (emf); returtransaksjonManager; } // resten av utholdenhetskonfigurasjon}

Vær oppmerksom på at vi har et fullstendig eksempel på konfigurasjonen i våren 4 og JPA med dvalemodus.

For å skape vår datakilde bean, må vi se etter JNDI-ressursen vi definerte i applikasjonsbeholderen vår. Vi lagrer dette i utholdenhetsjndi. eiendommer nøkkel (blant andre egenskaper):

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

Legg merke til at i jdbc.url eiendom vi definerer et rotnavn å se etter: java: comp / env / (dette er standardinnstillinger og tilsvarer komponent og miljø) og deretter det samme navnet vi brukte i server.xml: jdbc / BaeldungDatabase.

3.2. JPA Configuration - Model, DAO and Service

Vi skal bruke en enkel modell med @Enhet kommentar med en generert id og en Navn:

@Entity offentlig klasse Foo {@Id @GeneratedValue (strategi = GenerationType.AUTO) @Column (name = "ID") privat Lang id; @Column (name = "NAME") privat strengnavn; // standard getters og setters}

La oss definere et enkelt lager:

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

Og til slutt, la oss lage en enkel tjeneste:

@Service @ Transaksjonell offentlig klasse FooService {@Autowired privat FooDao dao; public List findAll () {return dao.findAll (); }}

Med dette har du alt du trenger for å kunne bruke JNDI-datakilden i vårapplikasjonen.

4. Konklusjon

I denne artikkelen har vi laget et eksempel på en Spring-applikasjon med et JPA + Hibernate-oppsett som arbeider med en JNDI-datakilde.

Merk at de viktigste delene er definisjonen av ressursen i applikasjonsbeholderen og oppslaget etter JNDI-ressursen i konfigurasjonen.

Og som alltid kan hele prosjektet bli funnet på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found