Forår, dvale og en JNDI-datakilde

1. Oversigt

I denne artikel opretter vi en Spring-applikation ved hjælp af Hibernate / JPA med en JNDI-datakilde.

Hvis du vil genopdage det grundlæggende i Spring and Hibernate, skal du tjekke denne artikel.

2. Erklæring om datakilden

2.1. System

Da vi bruger en JNDI-datakilde, definerer vi den ikke i vores applikation, vi definerer den i vores applikationsbeholder.

I dette eksempel skal vi bruge 8.5.x-versionen af ​​Tomcat og 9.5.x-versionen af ​​PostgreSQL-databasen.

Du skal være i stand til at replikere de samme trin ved hjælp af en hvilken som helst anden Java-applikationsbeholder og en database efter eget valg (så længe du har de rigtige JDBC-krukker til det!).

2.2. Erklæring af datakilden på applikationsbeholderen

Vi erklærer vores datakilde i / conf /server.xml fil inde i element.

Forudsat at databaseserveren kører på samme maskine som applikationsbeholderen, og at den tilsigtede database er navngivet postgres, og at brugernavnet er baeldung med adgangskode pass1234, ville en ressource se sådan ud:

Vær opmærksom på, at vi har navngivet vores ressource jdbc / BaeldungDatabase. Dette vil være navnet, der skal bruges, når der henvises til denne datakilde.

Vi har også været nødt til at specificere dens type og databasedrivers klassenavn. For at det skal fungere, skal du også placere den tilsvarende krukke i / lib / (i dette tilfælde PostgreSQLs JDBC-jar).

De resterende konfigurationsparametre er:

  • auth = ”Container” - betyder, at containeren logger på ressourceadministratoren på vegne af applikationen
  • maxTotal, maxIdle, og maxWaitMillis - er poolforbindelsens konfigurationsparametre

Vi skal også definere en ResourceLink inde i element i / conf / kontekst.xml, der ser ud som:

Bemærk, at vi bruger det navn, vi definerede i vores Ressource i server.xml.

3. Brug af ressourcen

3.1. Indstilling af applikationen

Vi definerer en simpel Spring + JPA + dvale-applikation ved hjælp af ren Java-konfiguration nu.

Vi starter med at definere Spring-kontekstens konfiguration (husk at vi fokuserer på JNDI her og antager, at du allerede kender det grundlæggende i Spring's konfiguration):

@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 af ​​enhedslederens konfiguration 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); returtransaktionManager; } // resten af ​​persistens konfiguration}

Bemærk, at vi har et komplet eksempel på konfigurationen i foråret 4 og JPA med dvale-artiklen.

For at skabe vores datakilde bean, skal vi kigge efter den JNDI-ressource, vi definerede i vores applikationscontainer. Vi gemmer dette i vedholdenhed-jndi.egenskaber nøgle (blandt andre egenskaber):

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

Bemærk, at i jdbc.url ejendom vi definerer et rodnavn, vi skal kigge efter: java: comp / env / (dette er standardindstillinger og svarer til komponent og miljø) og derefter det samme navn, som vi brugte i server.xml: jdbc / BaeldungDatabase.

3.2. JPA-konfiguration - Model, DAO og Service

Vi skal bruge en simpel model med @Enhed kommentar med en genereret 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}

Lad os definere et simpelt lager:

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

Og endelig, lad os oprette en simpel tjeneste:

@Service @ Transaktionel offentlig klasse FooService {@Autowired privat FooDao dao; offentlig liste findAll () {return dao.findAll (); }}

Med dette har du alt hvad du behøver for at bruge din JNDI-datakilde i din Spring-applikation.

4. Konklusion

I denne artikel har vi oprettet et eksempel på en Spring-applikation med en JPA + dvaleopsætning, der arbejder med en JNDI-datakilde.

Bemærk, at de vigtigste dele er definitionen af ​​ressourcen i applikationsbeholderen og opslag til JNDI-ressourcen i konfigurationen.

Og som altid kan hele projektet findes på GitHub.


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