Обработка web.config различия через несколько машин при использовании управления версиями

Контекст сервлета:

Он инициализируется при развертывании приложения сервлета. Контекст сервлета содержит все конфигурации (init-param, context-params и т. Д.) Всего приложения сервлета.

Контекст приложения:

Это особенность Spring. Инициализируется весной. Он содержит все определения bean-компонентов и жизненный цикл bean-компонентов, определенных в файлах конфигурации Spring. Servlet-Context не имеет ни малейшего представления об этом.

Существует два типа контекстов в Spring: parent и child.

Родительский контекст Spring (контекст приложения / корневой контекст)

  
         
            org.springframework.web.context.ContextLoaderListener
        
  
  
        contextConfigLocation
        
            /WEB-INF/service-context.xml,
            /WEB-INF/dao-context.xml,
            /WEB-INF/was-context.xml,
            /WEB-INF/jndi-context.xml,
            /WEB-INF/json-context.xml
        
  

role-target-of-contextloaderlistener-in-spring
Spring- ContextLoaderListener-And-DispatcherServlet-Concepts
Когда запускается контейнер Spring, он считывает все определения bean-компонентов из файлов конфигурации и создает объекты bean-объектов и управляет жизненным циклом объектов bean-компонентов. Эта конфигурация не является обязательной.

DispatcherServlet vs ContextLoaderListener
/ декларирование-spring-bean-in-parent-context-vs-child-context

Spring Child Контекст (WebApplicationContext / Child Context)


    myWebApplication
    
         org.springframework.web.servlet.DispatcherServlet
    
    1


    myWebApplication
    /app/*

При запуске весеннего веб-приложения он ищет файл конфигурации Spring Bean myWebApplication-servlet.xml. Он будет читать все определения компонентов, создавать и управлять жизненным циклом объектов объектов. Если доступен родительский весенний контекст, он объединит дочерний весенний контекст с родительским весенним контекстом. Если родительский контекст Spring недоступен, приложение будет иметь только дочерний контекст весны.

7
задан 7 revs 23 August 2009 в 12:17
поделиться

6 ответов

VS 2010 предоставит вам много возможностей для управления файлами web.config для различных конфигураций ... Пожалуйста, ознакомьтесь с .

1
ответ дан 7 December 2019 в 03:19
поделиться

Один из подходов, который я иногда использую, - это разделение раздела, относящегося к среде, в отдельный файл конфигурации, который обычно исключаются из развертывания (за исключением первого раза или изменения их структуры):

Пример для строк подключения: В web.config:

<connectionStrings configSource="connections.config"></connectionStrings>

Файл connections.config (который обычно не включается в развертывание; поэтому он не изменяется):

<?xml version="1.0"?>
<connectionStrings>
    <add name="connectionName" connectionString="[connection string goes here]"/>
</connectionStrings>

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

5
ответ дан 7 December 2019 в 03:19
поделиться

То, что вы описываете, очень похоже на использование файла Machine.config для хранения строк подключения. Я еще не видел этого, так что вы пробовали? Похоже, вы можете использовать глобальный Web.config, который также находится рядом с вашим Machine.config.

Несколько ссылок:

Иерархия и наследование файла конфигурации ASP.NET

Разница между Web.config и машиной. config

0
ответ дан 7 December 2019 в 03:19
поделиться

Мы не храним настройки среды в web.config. Они хранятся в базе данных.

Это позволяет нам выполнять развертывание xcopy и сохранять файл web.config в нашей системе контроля версий.

Доступ к базе данных осуществляется через один ключ реестра.

0
ответ дан 7 December 2019 в 03:19
поделиться

Конфигурацию приложения можно разделить на две категории.

  1. Для конкретного приложения
  2. Для конкретного развертывания

Конфигурация для конкретного приложения включает в себя такие вещи, как реализация кэширования, реализация бизнес-правил и будет применяться к каждому развертыванию приложения. Это должно войти в файл web.config, который является частью структуры каталогов приложения и проверяется в системе управления версиями.

Конфигурация, специфичная для развертывания, включает такие вещи, как строки подключения, периоды тайм-аута и т. д. и могут отличаться от одного развертывания к другому. Это должно быть введено как часть конфигурации экземпляра IIS, который задействован в развертывании и сохранен любой стратегией резервного копирования, применяемой для рассматриваемой машины.

Насколько я могу судить, это именно то, что иерархическая природа файлов web.config была разработана для обработки.

Преимущества такого расположения заключаются в ...

  1. Не нужно беспокоиться о том, какая версия настроек разработчика окажется в системе контроля версий, потому что ни один из них не .
  2. В каждом развертывании используется один и тот же двоичный файл, поэтому проблемы развертывания с большей вероятностью будут связаны с конфигурацией развертывания.
  3. Последующие развертывания не требуют изменений конфигурации, связанных с развертыванием, поскольку они уже существуют.
1
ответ дан 7 December 2019 в 03:19
поделиться

Хотя решений определенно много, ни одно из них на самом деле не дает вам огромного контроля над сгенерированной конфигурацией, одно решение, которое я отметил в своей редакции, где вы получаете огромный контроль но с накладными расходами, связанными с необходимостью написания файла xslt, использовала задачу сборки xslt для использования шаблона web.config / app.config из системы управления версиями (который я лично называю web.base.config / app.base.config), и используйте файл xslt для преобразования файла конфигурации с контролем версий во время сборки и сгенерируйте файл web.config / app.config.

Вот пример задачи сборки xslt (хотя вы можете захотеть чтобы написать его в соответствии с вашими стандартами кодирования), и пример обычного преобразования xslt, которое изменит значение строки подключения и скопирует все остальное в конфигурации:

<?xml version="1.0" encoding="utf-8"?>  
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">  
  <xsl:output method="xml" indent="yes"/>  

  <!-- Copy all. -->  
  <xsl:template match="@* | node()">  
      <xsl:copy>  
          <xsl:apply-templates select="@* | node()"/>  
      </xsl:copy>  
  </xsl:template>  

  <!-- Swap connection string. -->
  <xsl:template match="/configuration/connectionStrings/add[@name='my_connection_string_name']">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
      <xsl:attribute name="connectionString">my replacement connection string value</xsl:attribute>
    </xsl:copy>  
  </xsl:template>

</xsl:stylesheet> 

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

2
ответ дан 7 December 2019 в 03:19
поделиться
Другие вопросы по тегам:

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