Skip to content

Instantly share code, notes, and snippets.

@alexandreaquiles
Last active March 2, 2017 21:54
Show Gist options
  • Save alexandreaquiles/2b905ef218a8cc879434 to your computer and use it in GitHub Desktop.
Save alexandreaquiles/2b905ef218a8cc879434 to your computer and use it in GitHub Desktop.
Configurando um DataSource com JNDI no Spring.
<!-- no diretorio de instalacao do Tomcat -->
<Resource name="jdbc/dataSource" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="root" password=""
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/fj21"/>

A configuração do banco de dados usando DataSource que foi feita no capítulo 13 fica no arquivo WEB-INF/spring-context.xml que, quando empacotarmos nosso projeto Web, ficaria dentro do WAR.

Mas como fazemos então para modificar o endereço IP do BD, o usuário e senha em produção? Será que o analista de infra vai ter que abrir o WAR, modificar o spring-context.xml e compactar de novo?

Não! Existe um mecanismo chamado JNDI, que nos permite externalizar as configurações.

No spring-context.xml, para fazer a configuração do DataSource ser externalizada, repare na linha: <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/dataSource" />

O endereço do BD vai parar lá no Tomcat, no arquivo context.xml que fica no diretório conf:

Como a configuração do BD passa a ficar no tomcat/conf/context.xml, não seria necessário alterar mais o WAR. E, na verdade, provavelmente a configuração só seria feita uma vez: logo após a instalação do Tomcat.

<!-- Dentro do META-INF/ -->
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="tarefas">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<!-- SEM as propriedades URL, login, senha e driver -->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">
<jee:jndi-lookup
id="dataSource"
jndi-name="java:comp/env/jdbc/dataSource" />
<!-- gerenciamento de jpa pelo spring -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
</bean>
<!-- gerenciamento da transação pelo spring -->
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<tx:annotation-driven/>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment