Я хочу, чтобы достичь следующего:Отключить конфигурацию сервера Spring Cloud с помощью профиля?
- в режиме 'Dev', embbed Spring Cloud Config в текущем веб-приложение
- когда не в режиме 'Dev', подключиться к серверу Spring Cloud Config экземпляр, который уже работает
Таким образом, мой путь к классам для текущего веб-приложение содержит зависимости в конфигурации сервера и клиента:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
В режиме разработчика, и со следующими свойствами в bootstrap.yml, это нормально (встроенный сервер конфигурации сконфигурирован и запущен)
spring:
application:
name: app1
profiles:
active: dev
cloud:
config:
uri: ${SPRING_CONFIG_URI:http://localhost:8888}
---
spring:
profiles: dev
cloud:
config:
server:
bootstrap: true
git:
uri: https://github.com/nocquidant/my-config-repo.git
basedir: target/config
Когда не в режиме «Dev» (spring.profiles.active = prod, например), текущий webapp не запускается: он не может autowire мои свойства (я думаю, что встроенный сервер запущен с плохой конфигурацией)
Если я прокомментирую зависимость spring-cloud-config-server в POM, то это работает.
Я thougth я мог бы достичь того, чего я хочу, используя следующее, но нет (на самом деле с помощью EnableConfigServer или нет, кажется, не изменить ничего):
@Configuration
@Profile("dev")
@EnableConfigServer
public static class EmbeddedConfigServer { }
Как я мог сделать (без использования профиля Maven) ? Есть ли простой способ отключить конфигурационный сервер весеннего облака? Есть ли лучший способ достичь моей цели?
Любая помощь приветствуется.
P.S. Используемая версия:
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>1.0.3.BUILD-SNAPSHOT</version>
</parent>
// Ник
// --- Edit # 1
Пожалуйста, см простой проект на GitHub: https://github.com/nocquidant/exchange/tree/master/poc-spring-cloud/
Он содержит 2 простых модулей: конфи сервер и клиент-приложение.
Во-первых, если вы запускаете класс клиента из модуля клиент-приложение, все в порядке (встроенный режим включен => см профиль Дев в bootstrap.yml)
Затем запуск конфиг-сервера (ConfigServer класс). Затем измените «spring.profiles.active» на «prod» (или что-то еще) в клиентском приложении и перезапустите его: инъекция свойств больше не работает (и Webapp отказывается запускаться).
Caused by: org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'server' on field 'port': rejected value [${taap.bak.config.port}];
Таким образом, он не может подключиться к модулю конфигурационного сервера. И если вы прокомментируете зависимости maven: spring-cloud-config-server от модуля клиент-приложение, он снова работает.
Надеюсь, теперь это яснее. Спасибо,
Я бы подумал, что '@Profile (« dev »)' работал бы. Какую ошибку вы видите? – spencergibb
Я только что редактировал свой пост, чтобы сделать его более понятным. Благодарю. –