Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring load app context в зависимости от Profile 
:(
    Опции темы
4epT
Дата 25.6.2013, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



Всем привет. Имеется большой проект, который состоит из модулей. Один из модулей это data-layer, то есть модуль для работы с БД. Сейчас пишу юнит тесты под данный модуль. Нашел очень красивое решение с помощью которого можно очень легко подпихивать тестовый контекст для тестов. Вот пример:

Код

public final class ApplicationProfiles {

    public static final String DEVELOPMENT = "development";

    public static final String TEST = "test";

    public static final String PRODUCTION = "production";

    private ApplicationProfiles() {
    }

}


Код

@Configuration
public class ApplicationConfig {

    @Configuration
    @Profile( ApplicationProfiles.DEVELOPMENT )
    @ImportResource(value = { "classpath:application-config.xml" })
    static class DevelopmentEnvironmentConfiguration {

    }

    @Configuration
    @Profile( ApplicationProfiles.TEST )
    @ImportResource(value = { "classpath:application-test-config.xml" })
    static class TestEnvironmentConfiguration {

    }

    @Configuration
    @Profile( ApplicationProfiles.PRODUCTION )
    @ImportResource(value = { "classpath:application-config.xml" })
    static class ProductionEnvironmentConfiguration {

    }

}


Код

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { ApplicationConfig.class }, loader = AnnotationConfigContextLoader.class)
@ActiveProfiles( profiles = {ApplicationProfiles.TEST} )
public class MyTest {
...
}


И теперь встал вопрос, как сделать в таком же виде загрузку "боевого" контекста и инициализацию какого нибудь static поля этим контекстом ?

дело в том что у меня нет как такового main метода, это просто модуль ) Есть пару фабрик для получения нужных DAO классов и все.

Можно было бы сделать как то так:

Код

private SpringContext() {
        try {
            context = new ClassPathXmlApplicationContext("application-config.xml");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


Но тогда теряется весь смысл профилей. В идеале я это вижу вот так:

Код

@ContextConfiguration( classes = ApplicationConfig.class, loader = AnnotationConfigContextLoader.class)
@ActiveProfiles(profiles = {ApplicationProfiles.PRODUCTION})
public class SpringContext implements ApplicationContextAware{
...
@Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        context = applicationContext; // set static context 
    }
}


Но в таком случае SpringContext должен быть бином и его кто то должен создать...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0495 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.