2017-01-29 3 views
0

У меня есть приложение Spring 4 MVC, в котором я хотел бы передать в среде (профиле) из командной строки и прочитать при запуске соответствующие файлы .properties для конкретной среды.Настройка среды/профиля в Spring MVC

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

Я все еще изучаю Весну и Яву в целом, поэтому трудно понять это.

В web.xml определяет 3 среды/профили

<context-param> 
    <param-name>spring.profiles.active</param-name> 
    <param-value>test, dev, prod</param-value> 
</context-param> 

У меня есть 3 среды определенных файлы в каталоге ресурсов. Мое понимание заключается в том, что Spring попытается найти соответствующий файл, относящийся к конкретной среде, и общий файл application.properties (если он существует, а он отсутствует), чтобы вернуться.

> \ls src/main/webapp/resources/properties/ 
application-dev.properties application-prod.properties application-test.properties 

Каждый файл довольно прост, только параметры подключения jdbc для этой среды. Пример:

jdbc.driverClassName=org.postgresql.Driver 
jdbc.url=jdbc:postgresql://localhost:5432/galapagos 
jdbc.username=foo 
jdbc.password= 

Наконец в моем сервлета файл spring-web-servlet.xml, я прочитал свойства файла приложения и использовать его, чтобы установить соединение

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/mvc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> 

    .... 

    <!-- Database/JDBC --> 

    <beans:bean 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <beans:property name="location" value="resources/properties/application.properties" /> 
    </beans:bean> 

    <beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <beans:property name="driverClassName" value="${jdbc.driverClassName}" /> 
    <beans:property name="url" value="${jdbc.url}" /> 
    <beans:property name="username" value="${jdbc.username}" /> 
    <beans:property name="password" value="${jdbc.password}" /> 
    </beans:bean> 

    .... 

</beans:beans> 

Это erroring вне, потому что он пытается искать resources/properties/application.properties, который не существует. Но я не уверен, что еще там положить. Как заставить его динамически читать файл правильной среды при запуске?

Я видел несколько примеров like this one с помощью контекстных слушателей, но честно говоря, я до сих пор учусь Spring MVC и не очень понимаю, что те пытаются сделать

Спасибо!

ответ

0

По умолчанию весна попытается найти resources/properties/application.properties для загрузки свойств. Этот файл автоматически определяется. Это ваша проблема, и вы должны ее предоставить. Если вам не нравится иметь файл application.properties, вы можете переопределить его имена, указав свойство среды spring.config.name и его местоположение, используя свойство среды spring.config.location.

В вашем web.xml,

<context-param> 
<param-name>spring.profiles.active</param-name> 
<param-value>test, dev, prod</param-value> 
</context-param> 

Вы активируете 3 профилей одновременно. Я бы предложил определить, какой профиль активирован в вашем application.properties. Например:

spring.profiles.active=dev 

Затем конкретный файл environnment будет загружен и будет иметь приоритет над файлом недвижимости по умолчанию.

+2

** Весна ** не будет искать application.properties по умолчанию, это ** Spring Boot **, который сделает это, пожалуйста, не вводите других в заблуждение –

Смежные вопросы