多くの努力の結果、私はこの解決策を考え出しました。まず、Netflix Archaiusを使ってプロパティファイルを見ました。次のようにそれから私は進ん:
public class ApplicationRouteLocator extends SimpleRouteLocator implements RefreshableRouteLocator {
public ApplicationRouteLocator(String servletPath, ZuulProperties properties) {
super(servletPath, properties);
}
@Override
public void refresh() {
doRefresh();
}
}
はSimpleRouteLocatorを拡張し、インタフェースRefreshableRouteLocatorの上書き1でそのメソッドを呼び出すことによってdoRefresh()メソッドを公開して。ファイル内のプロパティは、イベントがトリガされた修正された
@Configuration
@EnableConfigurationProperties({ ZuulProperties.class })
public class ZuulConfig {
public static ApplicationRouteLocator simpleRouteLocator;
@Autowired
private ZuulProperties zuulProperties;
@Autowired
private ServerProperties server;
@Bean
@Primary
public RouteLocator routeLocator() {
logger.info("zuulProperties are: {}", zuulProperties);
simpleRouteLocator = new ApplicationRouteLocator(this.server.getServletPrefix(),
this.zuulProperties);
ConfigurationManager.getConfigInstance().addConfigurationListener(configurationListener);
return simpleRouteLocator;
}
private ConfigurationListener configurationListener =
new ConfigurationListener() {
@Override
public void configurationChanged(ConfigurationEvent ce) {
// zuulProperties.getRoutes() do something
// zuulProperties.getIgnoredPatterns() do something
simpleRouteLocator.refresh();
}
}
}
たびとConfigurationEventはそれ(getPropertyName()およびgetPropertyValueに対処することができました:
は、その後、私は私のカスタム実装で豆RouteLocatorを再定義しました()を使用してイベントからデータを抽出します)。私もZuulPropertiesをAutowiredして以来、私はそれにアクセスできました。右のルールで、私は
zuul.ignoredPatterns
Zuul
のプロパティがそれに応じてZuulPropertiesでその値を変更する変更されたかどうかを見つけることができます。
ダイナミックにコードを使用していることを意味します。クラウド設定を使用している場合、zuulプロパティからルーティングを削除し、アクチュエータ経由でリフレッシュしてルーティングを実行することはできません... ... –