Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / maven profile и spring property-placeholder prifile / 4 сообщений из 4, страница 1 из 1
02.10.2014, 10:55
    #38764436
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
maven profile и spring property-placeholder prifile
Всем добрый день :

не могу понять где ошибка , при разнесении конфигов по файлам:
т.е для локальной сборки mvn -Pdev - брать значения из файла classpath:spring.properties
а для prod - брать значения из файла в etc
<context:property-placeholder location="file:///etc/tomcat/spring.properties"/>

при этом когда пытаюсь указать профиль - значения не находятся ???


и так что есть pom.xml набором профилей : dev , prod
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
   <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <platform>linux</platform>
                <profile.name>dev</profile.name>
                <skipTests>false</skipTests>
                <hibernate.dialect>org.hibernate.dialect.MySQL5InnoDBDialect</hibernate.dialect>
                <hibernate.hbm2ddl>update</hibernate.hbm2ddl>
                <hibernate.showsql>true</hibernate.showsql>
                <jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver>
                <jdbc.url>jdbc:mysql://localhost/db_front</jdbc.url>
                <jdbc.username>root</jdbc.username>
                <jdbc.password>root</jdbc.password>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <platform>linux</platform>
                <profile.name>prod</profile.name>
                <skipTests>true</skipTests>
                <hibernate.dialect>org.hibernate.dialect.MySQL5InnoDBDialect</hibernate.dialect>
                <hibernate.hbm2ddl>validate</hibernate.hbm2ddl>
                <hibernate.showsql>false</hibernate.showsql>
                <jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver>
                <jdbc.url>jdbc:mysql://prod/db_front</jdbc.url>
                <jdbc.username>user</jdbc.username>
                <jdbc.password>user</jdbc.password>
            </properties>
        </profile>
  </profiles>



при этом все эти значения skipTests , hibernate , jdbc.url итд

с помощью плагина - попадают в один файл spring.properties в сборку ,но в продакшене они уже лежат в файле на диске.


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
                <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>properties-maven-plugin</artifactId>
                <version>1.0-alpha-2</version>
                <executions>
                    <execution>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>write-project-properties</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <outputFile>
                        target/classes/spring.properties
                    </outputFile>
                </configuration>
            </plugin>




в самих спринговых кофигах указано что :
web.xml
Код: xml
1.
2.
3.
4.
   <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/conf/appContext.xml</param-value>
    </context-param>



appContext.xml
Код: xml
1.
2.
3.
4.
5.
<!-- было -->
<!--<context:property-placeholder location="classpath:spring.properties" />-->
<!-- стало -->
       <import resource="devContext.xml"/>
       <import resource="prodContext.xml"/>



prodContext.xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd"
       profile="prod">
    <context:property-placeholder location="file:///etc/tomcat/spring.properties"/>
</beans>



devContext.xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd"
profile="dev">
    <context:property-placeholder location="classpath:spring.properties" />
</beans>




при этом если убрать profile="dev" - то все видится нормально ?!

Как такое может быть? хочется чтобы поведение было такое :

указываю - dev - видится файл в сборке .
Указываю - prod - видится файл на диске.
...
Рейтинг: 0 / 0
04.10.2014, 01:26
    #38766747
kadet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
maven profile и spring property-placeholder prifile
Atum1,
у нас в проекте различия между средами хранятся в файлах-настройках, например:
env_develop.properties
env_product.properties

Далее в applicationContext.xml, например так:

Код: xml
1.
2.
3.
4.
	
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	<property name="location" value="classpath:env_#{systemProperties['current_environment']}.properties" />
</bean>



в зависимости от места вызова передаешь аргумент
Код: java
1.
-Dcurrent_environment=develop


можно так же в maven-профиле объявить системную переменную:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
		<profile>
			<id>DEVELOP</id>

			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-compiler-plugin</artifactId>
						<version>3.1</version>
						<configuration>
							<source>1.7</source>
							<target>1.7</target>
						</configuration>
					</plugin>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-surefire-plugin</artifactId>
						<version>2.17</version>
						<configuration>
							<systemProperties>
								<property>
									<name>current-environment</name>
									<value>develop</value>
								</property>								
							</systemProperties>
						</configuration>
					</plugin>
				</plugins>
			</build>
		</profile>


и вызывать
Код: java
1.
mvn -PDEVELOP clean compile
...
Рейтинг: 0 / 0
04.10.2014, 01:30
    #38766751
kadet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
maven profile и spring property-placeholder prifile
kadetв зависимости от места вызова передаешь аргумент
Код: java
1.
-Dcurrent_environment=develop



извените, вызов будет
Код: java
1.
-Dcurrent-environment=develop
...
Рейтинг: 0 / 0
06.10.2014, 09:46
    #38767516
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
maven profile и spring property-placeholder prifile
kadet,

Спасибо !

так работает .

У меня немного другая проблема , когда указываю в одном случае
Код: xml
1.
 <context:property-placeholder location="file:///etc/tomcat/spring.properties"/>


в другом

Код: xml
1.
 <context:property-placeholder location="classpath:spring.properties" />



поблема как размести и научить понимать разные источники : classpath и file ?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / maven profile и spring property-placeholder prifile / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]