После долгих усилий я пришел к этому решению. Сначала я использовал Netflix Archaius для просмотра файла свойств. Затем я поступил следующим образом:
public class ApplicationRouteLocator extends SimpleRouteLocator implements RefreshableRouteLocator {
public ApplicationRouteLocator(String servletPath, ZuulProperties properties) {
super(servletPath, properties );
}
@Override
public void refresh() {
doRefresh();
}
}
Сделал метод doRefresh() общедоступным, расширив SimpleRouteLocator и вызвав его метод в переопределенном интерфейсе RefreshableRouteLocator.
Затем я переопределил bean-компонент RouteLocator с помощью собственной реализации:
@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() для извлечения данных из события). Так как я также Autowired ZuulProperties, я смог получить к нему доступ. С правильным правилом я мог бы найти, является ли собственность Зуула
zuul.ignoredPatterns
был изменен соответствующим образом, изменив его значение в ZuulProperties.
person
Nano
schedule
24.05.2017