Общие стратегии при определении bean-компонентов Spring для различных сред

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

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

В настоящее время то, что я ' у меня есть два определения xml.

native.xml

<bean id="resourceSystem" class="com.cust.NativeResourceSystem" />

distrib.xml

<bean id="resourceSystem" class="com.cust.HadoopResourceSystem">
    <constructor-arg name="fs" ref="hdfs" />
</bean>

При создании контекста приложения я опускаю native.xml или distrib.xml в зависимости от в среде и захватите bean-компонент resourceSystem .

Существуют ли в Spring подходящие инструменты или передовые практики для настройки определений bean-компонентов для различных сред?

Спасибо.

8
задан skaffman 6 November 2010 в 10:40
поделиться

3 ответа

Вот что говорится в справочной документации Spring о PropertyPlaceholderConfigurer

PropertyPlaceholderConfigurer не ищет свойства только в Свойствах файл, который вы указываете, , но также проверяет свойства системы Java , если не может найти свойство, которое вы пытаетесь использовать.

Как вы можете видеть выше, вы можете настроить свойство Java System

На машине разработки

-Dprofile=development

На производственной машине

-Dprofile=production

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

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    <context:property-placeholder/>
    <import resource="service-${profile}.xml"/>
    <import resource="persistence-${profile}.xml"/>
    <import resource="security-${profile}.xml"/>
</beans>

Имейте в виду, что все пути к расположению относятся к файлу определения, выполняющему импорт

Таким образом, этот тип конфигурации поддерживается Spring

. Обычно предпочтительнее сохранять косвенное указание на такие абсолютные местоположения, например, через заполнители «$ {...}» , которые разрешаются в отношении свойств системы JVM во время выполнения .

11
ответ дан 5 December 2019 в 11:21
поделиться

Эта функциональность находится на радаре SpringSource и запланирована для будущих релизов.

См. здесь и здесь.

1
ответ дан 5 December 2019 в 11:21
поделиться

Это то, что я использовал во многих своих проектах.Все компоненты, независимые от среды, должны быть в файле common.xml, а все остальные - в dev.xml / qa.xml / prod.xml . Если вы используете ant для сборки своего проекта, то укажите среду в качестве аргумента для процесса сборки и позвольте сценарию сборки включать соответствующий env.xml и опускать другие. Я имею в виду, что сценарий сборки скопирует dev.xml как env.xml, если это среда разработки, или qa.xml как env.xml, если его QA. Таким образом, код, загружающий определения bean-компонентов, всегда будет использовать «common.xml, env.xml».

3
ответ дан 5 December 2019 в 11:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: