2
respostas

Configuração do Hibernate/JPA para produção

Pessoal,

Como consigo configurar o persistence.xml para produção? Minha pergunta tange especificamente a definição de parâmetros como usuário, senha e url do banco, por exemplo.

Gostaria de não incluir esses dados diretamente no arquivo e sim, numa variável de ambiente, por exemplo.

Não consegui incluir nada do tipo:

<property name="javax.persistence.jdbc.url" value=${db.url} />

Qual o jeito ideal de fazer isso?

Obs1. Existe alternativa à definição de um mapa com as configurações do banco? Vi que a JPA permite um mapa sendo passado na criação de um entityManager que sobrescreve as configurações do persistence. Contudo, não posso usar essa abordagem

2 respostas

Ler env vars no persistence.xml diretamente não é possível. Se você estiver usando o Spring, isso é possível, mas para o JPA diretamente, infelizmente não. O que você pode fazer é fazer essa leitura das env vars programaticamente, por exemplo:

Map<String, String> env = System.getenv();
Map<String, Object> configOverrides = new HashMap<String, Object>();
for (String envName : env.keySet()) {
    if (envName.contains("DB_USER")) {
        configOverrides.put("toplink.jdbc.user", env.get(envName)));    
    }
    // You can put more code in here to populate configOverrides...
}

EntityManagerFactory emf =
    Persistence.createEntityManagerFactory("default", configOverrides);

Oi, Otávio!

Obrigado pela resposta. Contudo, como falei na pergunta, infelizmente, não posso usar essa abordagem, pois quero utilizar o EntityManager injetado via @PersistenceContext.

Estou utilizando Spring MVC também. Como poderia fazer isso através dele?