Как инициализировать постоянство. xml переменных при запуске программы? - PullRequest
1 голос
/ 09 марта 2020

В основном я делаю вставку в базе данных PostgreSQL, но, поскольку у меня несколько баз данных, мне приходится менять конфигурации в зависимости от каждой среды.

Дело в том, что я использовал не очень хороший способ чтобы сделать это, так как каждый раз, когда я делаю вставку, я заменяю все переменные, что является очень медленным и определенно не хорошим способом для достижения этого.

Как бы я мог сделать те же самые вставки, но имея настроен во время запуска моего Api?

Вот что я сейчас делаю:

package br.jus.tjba.dje.local.service;

import br.jus.tjba.dje.local.entity.Conteudo;
import br.jus.tjba.dje.local.repository.ConteudoRepository;

import br.jus.tjba.tjfw4.core.service.AbstractService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.persistence.*;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Service
public class ConteudoService extends AbstractService {

    @Autowired
    private ConteudoRepository conteudoRepository;

    public EntityTransaction insertInDb(String something, String somethingElse) {

        Map<String, String> env = System.getenv();
        Map<String, Object> configOverrides = new HashMap<>();

        // Here I change my persistance.xml configs
        for(Map.Entry<String, String> entry: env.entrySet()) {
            if (entry.getKey().contains("DATABASE_URL")) {
                configOverrides.put("javax.persistence.jdbc.url", env.get(entry.getValue()));
            } else if (entry.getKey().contains("DATABASE_USER")) {
                configOverrides.put("javax.persistence.jdbc.user", env.get(entry.getValue()));
            } else if (entry.getKey().contains("DATABASE_PASSWORD")) {
                configOverrides.put("javax.persistence.jdbc.password", env.get(entry.getValue()));
            }
        }

        // Cria um factory dando override nas variáveis.
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("default", configOverrides);
        EntityManager conteudoManager = factory.createEntityManager();

        Query query = conteudoManager.createNativeQuery("INSERT INTO something(" +
                "SOMETHING," +
                "SOMETHING_ELSE)" +
                " VALUES (" +
                ":something," +
                ":somethingElse)");

        conteudoManager.getTransaction().begin();

        query.setParameter("something", something);
        query.setParameter("somethingElse", somethingElse);
        query.executeUpdate();
        return conteudoManager.getTransaction();

    }

    public Conteudo getContent() {
        return conteudoRepository.getContent();
    }

}

Также мое сопротивление. xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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">
    <persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="javax.persistence.jdbc.url" value="url" />
            <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
            <property name="javax.persistence.jdbc.password" value="password" />
            <property name="javax.persistence.jdbc.user" value="login" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...