2017-01-14 5 views
0

Я использую Spring Boot 1.4.3.RELEASE и gradle 2.13 для разработки api. В локальной среде профиль «local» работает отлично, но я получаю проблему при развертывании кода на Linux/Unix-сервере.Пружины Значения профиля получаются смешанными

Вот мой application.yml с двумя профилями: DEV и местные

--- 

spring: 
    profiles: 
    active: dev 

server: 
    context-path: /api/v1 
    port: 8080 

build: 
    version: 1.0.0 

cache: 
    storage: 
    path: '/home/user/content/storage/' 


--- 

spring: 
    profiles: 
    active: local 

server: 
    context-path: /content-delivery/api/v1 
    port: 8081 

build: 
    version: 1.0.0 

cache: 
    storage: 
    path: '/Yogen/api/code/cachedData' 

Команда Я использую, чтобы развернуть мой архив войны является:

jdk1.8.0_112/bin/java -jar _-Dspring.profiles.active=dev content-delivery.jar 

Когда я запускаю мою войну оно работал только с одним профилем, но как только я добавил другой профиль, я получаю значения, которые смешиваются, вызывая ошибку, как показано ниже:

01:56:16.557 INFO ContentDeliveryApplication - The following profiles are active: dev 
............ 
02:00:48.182 INFO PropertyPlaceholderConfigurer - Loading properties file from file [/home/542596/content-api/resources/app-dev.properties] 
    02:00:51.939 INFO PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.ws.config.annotation.DelegatingWsConfiguration' of type [class org.springframework.ws.config.annotation.DelegatingWsConfiguration$$EnhancerBySpringCGLIB$$290c5e2d] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
    02:00:55.736 INFO AnnotationActionEndpointMapping - Supporting [WS-Addressing August 2004, WS-Addressing 1.0] 
    02:01:25.559 INFO PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [class org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$a08e9c2b] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
    02:01:56.522 INFO TomcatEmbeddedServletContainer - Tomcat initialized with port(s): 8081 (http) 
    02:01:57.669 INFO StandardService - Starting service Tomcat 
    02:01:57.877 INFO StandardEngine - Starting Servlet Engine: Apache Tomcat/8.5.6 
    02:02:11.228 INFO [/content-delivery/api/v1] - Initializing Spring embedded WebApplicationContext 
    02:02:11.228 INFO ContextLoader - Root WebApplicationContext: initialization completed in 353263 ms 
    02:02:19.412 INFO ServletRegistrationBean - Mapping servlet: 'dispatcherServlet' to [/] 
    02:02:19.517 INFO ServletRegistrationBean - Mapping servlet: 'messageDispatcherServlet' to [/services/*] 
    02:02:19.829 INFO FilterRegistrationBean - Mapping filter: 'metricsFilter' to: [/*] 
    02:02:19.829 INFO FilterRegistrationBean - Mapping filter: 'characterEncodingFilter' to: [/*] 
    02:02:19.829 INFO FilterRegistrationBean - Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 
    02:02:19.829 INFO FilterRegistrationBean - Mapping filter: 'httpPutFormContentFilter' to: [/*] 
    02:02:19.829 INFO FilterRegistrationBean - Mapping filter: 'requestContextFilter' to: [/*] 
    02:02:19.829 INFO FilterRegistrationBean - Mapping filter: 'webRequestLoggingFilter' to: [/*] 
    02:02:19.829 INFO FilterRegistrationBean - Mapping filter: 'applicationContextIdFilter' to: [/*] 
    02:02:46.283 ERROR EhcacheManager - Initialize failed. 
    02:02:46.284 WARN AnnotationConfigEmbeddedWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jsonObjectCacheManager': Invocation of init method failed; nested exception is org.ehcache.StateTransitionException: Directory couldn't be created: /Yogen/api/code/cachedData/cachedData 
    02:02:46.285 INFO StandardService - Stopping service Tomcat 
    02:02:47.528 INFO AutoConfigurationReportLoggingInitializer - 

    Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled. 
    02:02:48.103 ERROR SpringApplication - Application startup failed 
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jsonObjectCacheManager': Invocation of init method failed; nested exception is org.ehcache.StateTransitionException: Directory couldn't be created: /Yogen/api/code/cachedData/cachedData 
      at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:137) ~[spring-beans-4.3.5.RELEASE.jar!/:4.3.5.RELEASE] 

PropertyPlaceholderConfigurer сконфигурирован следующим образом:

@Configuration 
public class PropertyConfiguration { 

    @Bean 
    @Profile("dev") 
    public static PropertyPlaceholderConfigurer developmentPropertyPlaceholderConfigurer() { 
     PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer(); 
     configurer.setLocation(new FileSystemResource("/home/542596/content-api/resources/app-dev.properties")); 
     configurer.setIgnoreUnresolvablePlaceholders(true); 
     return configurer; 
} 
} 

консоль показывает, что файл свойств прочитаются правильно также профиль «DEV», но порт начал и контекстно-путь и другие значения выбирались с 'local' профиль вместо 'dev' профиль.

Что мне не хватает ??? Благодарю.

+0

Вы пробовали в этом yml-файле просто использовать 'spring.profiles: dev' вместо' spring.profiles.active: dev'? То же самое для локального –

+0

Вы не должны регистрировать свой собственный PropertyPlaceholderConfigurer'а, используя функции загрузки с пружиной вместо того, чтобы обойти их. –

+0

@MagdKudama это не сработало, и оно не должно работать, потому что я уже зарегистрирован как «активный», а ключ «spring.profiles.active» не может быть отображен как «spring.profiles:» :) –

ответ

0

Как указано в @Barath, вы не можете разделять свойства профиля в одном файле application.yml. Создайте файл YML для каждого профиля, называют его следующим

application-{profile}.yml 

я бы не использовать bootstrap.yml, чтобы указать, какой профиль для загрузки, как вы хотите, чтобы экстернализовать это, если это возможно, так передать его в VM с помощью -Dspring.profiles.active=dev было бы предпочтительнее.

+0

спасибо ... получилось, и это сработало для меня :) –

1

Ваши профили становятся переопределенными.

Лучше Boostrap приложение с помощью bootstrap.yml

и имеют два application.yml следующим образом:

application-dev.yml 
application-local.yml 

набор профилей в bootstrap.yml, чтобы решить, какой файл свойств для загрузки:

spring: 
     profiles: 
      active : dev # choose which application properties to load dev/local 
+0

Спасибо @Barath, я разделил конфигурацию среды на соответствующие файлы, и это сработало для меня. Но я не хочу использовать 'bootstrap.yml', потому что мне нужно работать на экстернализацию позже :) –

0

У нас также есть еще один вариант, аналогичный @Maxwell ответ вместо прохождения профиля через VM собственности:

вы можете иметь следующие файлы:

application.yml 
application-dev.yml 
application-local.yml 

и определить профиль в application.yml:

spring: 
    profiles: 
     active : dev 

Это обеспечивает загрузку application.yml, а также application-dev.yml.

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

  • Нет связанных вопросов^_^