Загрузка различных файлов свойств в файл persistence.xml в проекте maven spring - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть сценарий, в котором мне нужно загрузить другой диалект, провайдера в мой файл persistence.xml в зависимости от среды, в которой я развертываю приложение.

Для Eg

В одной среде я использую Oracle11g, а в другой - MySql8. Я хочу, чтобы мой файл persistnece.xml выглядел примерно так.

<persistence-unit name="firstPU" transaction-type="RESOURCE_LOCAL">
        <provider>${somekey.provider}</provider>
        <properties>
            <property name="hibernate.dialect" value="${somekey.dialect}" />
        </properties>
</persistence-unit>

Затем создайте два отдельных файла свойств (first.property, second.property) и выберите любой из них, используя профиль сборки в моем файле pom.xml. Например,

<profile> 
.
.
.
<build> 
            <resources> 
                <resource> 
                    <directory>src/main/resources/config/${build.profile.id}</directory> 
                    <excludes> 
                    <exclude>**/first.properties</exclude> 
                    </excludes> 
                </resource> 
            </resources> 
        </build>
.
.
.
</profile>

Таким образом, основываясь на выбранном профиле, он исключит один из файлов .property и прочитает из другого.

Проблема со всем этим в том, что значения возвращаются как нулевые из файлов свойств. ( больше не )

Я что-то здесь упускаю или есть лучший способ сделать такого рода вещи?

Обновление -

это нормально работает для чтения значений диалекта. Тем не менее, я не могу читать Provider !!

Можно ли также прочитать значение поставщика из файла свойств?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Отключите persistence.xml и настройте LocalEntityManagerFactory с помощью Spring с использованием заполнителей.Таким образом, вы можете просто добавить файл свойств и изменить содержимое, без необходимости воссоздания артефакта.

Создайте файл application.properties (или любое другое имя) и добавьте следующее

spring.jpa.database-platform=org.hibernate.dialect.OracleDialect

Затем, если вы используете конфигурацию на основе Java, добавьте @PropertySource в (опционально)) загрузить этот файл из внешнего местоположения.

@Configuration
@PropertySource("file:/conf/application.properties")
public class MyConfiguration {

    @Autowired
    private Environment env;

    @Bean
    public LocalContainerEntityManagerFactory entityManagerFactory(DataSource ds) {
        LocalContainerEntityManagerFactory emf = new LocalContainerEntityManagerFactory();
        emf.setDataSource(ds);
        emf.setJpaVendorAdapater(jpaVendorAdapter());
        // Other settings
        return emf;
    }

    @Bean
    public HibernateJpaVendorAdapter jpaVendorAdapter() {
        HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
        adapter.setDatabasePlatform(env.getRequiredProperty("spring.jpa.database-platform"));
        return adapter;
    }
}

Теперь вы можете изменить диалект (и другие свойства, если необходимо) на что угодно.

ПРИМЕЧАНИЕ: было выбрано имя свойства, совпадающее с именем в Spring Boot, так что вы можете повторно использовать эту конфигурацию при переходе на Spring Boot, который поддерживает все этовне коробки.

0 голосов
/ 25 апреля 2019

Вместо определения свойств в persistence.xml, вы можете определить все эти детали базы данных в файле свойств, а в сценарии сборки вы можете включить соответствующий файл свойств в вашу войну / ухо.

final Properties persistenceProperties = new Properties();
InputStream is = null;

try {
    is = getClass().getClassLoader().getResourceAsStream("persistence.properties");
    persistenceProperties.load(is);
} finally {
    if (is != null) {
        try {
            is.close();
        } catch (IOException ignored) {
        }
    }
}

entityManagerFactory = Persistence.createEntityManagerFactory("firstPU", persistenceProperties);

Для получения более подробной информации см. ссылку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...