Spring, Hibernate a zdroj údajov JNDI

1. Prehľad

V tomto článku vytvoríme jarnú aplikáciu pomocou Hibernate / JPA so zdrojom údajov JNDI.

Ak chcete znovu objaviť základy jari a zimného spánku, prečítajte si tento článok.

2. Deklarovanie zdroja údajov

2.1. Systém

Pretože používame zdroj údajov JNDI, nebudeme ho definovať v našej aplikácii, budeme ho definovať v našom kontajneri aplikácie.

V tomto príklade použijeme verziu Tomcat verzie 8.5.xa databázy PostgreSQL verzie 9.5.x.

Rovnaké kroky by ste mali byť schopní replikovať pomocou ľubovoľného iného kontajnera aplikácií Java a databázy podľa vášho výberu (ak na to máte správne nádoby JDBC!).

2.2. Deklarovanie zdroja údajov v kontajneri aplikácie

Náš zdroj údajov deklarujeme v / conf /server.xml súbor vo vnútri element.

Za predpokladu, že databázový server je spustený na rovnakom stroji ako aplikačný kontajner a že plánovaná databáza je pomenovaná postgresa že je používateľské meno baeldung s heslom prejsť1234, zdroj bude vyzerať takto:

Berte na vedomie, že sme náš zdroj pomenovali jdbc / BaeldungDatabase. Toto bude názov, ktorý sa použije pri odkazovaní na tento zdroj údajov.

Tiež sme museli určiť jeho typ a názov triedy ovládača databázy. Aby to fungovalo, musíte do nich vložiť aj zodpovedajúcu nádobu / lib / (v tomto prípade JDBC jar PostgreSQL).

Zostávajúce konfiguračné parametre sú:

  • auth = ”Kontajner” - znamená, že kontajner sa bude v mene aplikácie prihlasovať k správcovi prostriedkov
  • maxTotal, maxIdle, a maxWaitMillis - sú konfiguračné parametre pripojenia k bazénu

Musíme tiež definovať a ResourceLink vnútri prvok v / conf / kontext.xml, čo by vyzeralo takto:

Upozorňujeme, že používame názov, ktorý sme si zadefinovali v našom Zdroj v server.xml.

3. Používanie zdroja

3.1. Nastavenie aplikácie

Teraz definujeme jednoduchú aplikáciu Spring + JPA + Hibernate pomocou čistej konfigurácie Java.

Začneme definovaním konfigurácie jarného kontextu (nezabudnite, že sa tu zameriavame na JNDI a za predpokladu, že už viete základy konfigurácie Spring):

@Configuration @EnableTransactionManagement @PropertySource ("classpath: persistence-jndi.properties") @ComponentScan ("com.baeldung.hibernate.cache") @EnableJpaRepositories (basePackages = "com.baeldung.hibernate.cache.dao") public {@Autowired private Environment env; @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory () hodí NamingException {LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean (); em.setDataSource (dataSource ()); // zvyšok konfigurácie správcu entity vráti em; } @Bean public DataSource dataSource () hodí NamingException {return (DataSource) new JndiTemplate (). Lookup (env.getProperty ("jdbc.url")); } @Bean public PlatformTransactionManager transactionManager (EntityManagerFactory emf) {JpaTransactionManager transactionManager = nový JpaTransactionManager (); transactionManager.setEntityManagerFactory (emf); return transactionManager; } // konfigurácia zvyšku perzistencie}

Upozorňujeme, že máme úplný príklad konfigurácie v článku Spring 4 a JPA with Hibernate.

Aby sme vytvorili naše dátový zdroj fazuľa, musíme hľadať zdroj JNDI, ktorý sme definovali v našom kontajneri aplikácií. Toto uložíme persistence-jndi.properties kľúč (okrem iných vlastností):

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

Všimnite si, že v jdbc.url majetok definujeme koreňový názov, ktorý treba hľadať: java: comp / env / (jedná sa o predvolené hodnoty a zodpovedajú komponentom a prostrediu) a potom rovnaký názov, aký sme používali server.xml: jdbc / BaeldungDatabase.

3.2. Konfigurácia JPA - model, DAO a služba

Použijeme jednoduchý model s @Entity anotácia s vygenerovaným id a a názov:

@Entity public class Foo {@Id @GeneratedValue (strategy = GenerationType.AUTO) @Column (name = "ID") private Long id; @Column (name = "NAME") private String name; // predvolení zakladatelia a nastavovatelia}

Definujme jednoduché úložisko:

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

A nakoniec vytvorme jednoduchú službu:

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

Vďaka tomu máte všetko, čo potrebujete, aby ste mohli vo svojej jarnej aplikácii použiť svoj zdroj údajov JNDI.

4. Záver

V tomto článku sme vytvorili ukážku jarnej aplikácie s nastavením dlhodobého spánku JPA +, ktorá pracuje so zdrojom údajov JNDI.

Všimnite si, že najdôležitejšou časťou je definícia prostriedku v kontajneri aplikácie a vyhľadanie prostriedku JNDI v konfigurácii.

Celý projekt nájdete ako vždy na GitHube.


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