我喜歡這樣sloving(尚未Finnished): 我有spring.cloud.config.server.native.serach-在逗號的形式位置分隔的URI列表
file:/c:/repo/a,file:/c:/repo/b
我創建FileMonitorConfiguration豆(但它有一些問題,因爲它被安排2次,豆本身和彈簧enhaced情況下,我不是這個fammiliar)
並付諸實施(只是草案)NativePropertyPathNotificationExtractor
@Configuration
@EnableAutoConfiguration
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
@Bean
NativePropertyPathNotificationExtractor nativePropertyPathNotificationExtractor(@Autowired(required = false) NativeEnvironmentRepository nativeRepo) {
return new NativePropertyPathNotificationExtractor(nativeRepo);
}
@Bean
FileMonitorConfiguration fileMonitorConfiguration() {
return new FileMonitorConfiguration();
}
}
@Order(Ordered.LOWEST_PRECEDENCE - 500)
public class NativePropertyPathNotificationExtractor implements PropertyPathNotificationExtractor {
private final Set<Path> searchPaths;
public NativePropertyPathNotificationExtractor(NativeEnvironmentRepository nativeRepo) {
searchPaths = searchLocations(nativeRepo);
}
@Override
public PropertyPathNotification extract(MultiValueMap<String, String> headers, Map<String, Object> payload) {
// FileMonitor with empty headers, so if some there, ignore
if (false == headers.isEmpty()) {
return null;
}
if (null == searchPaths) {
return null;
}
Path path = pathFromPayload(payload);
if (null == path) {
return null;
}
for (Path searchPath : searchPaths) {
Path relative = searchPath.relativize(path);
// just a try ;-)
if (true == relative.startsWith("..")) {
continue;
}
return new PropertyPathNotification(relative.toString());
}
return null;
}
private Path pathFromPayload(Map<String, Object> payload) {
if (null == payload) {
return null;
}
if (true == payload.isEmpty()) {
return null;
}
if (false == payload.containsKey("path")) {
return null;
}
if (null == payload.get("path")) {
return null;
}
if (true == StringUtils.isEmpty(payload.get("path").toString())) {
return null;
}
return Paths.get(payload.get("path").toString()).normalize().toAbsolutePath();
}
private Set<Path> searchLocations(NativeEnvironmentRepository nativeRepo) {
if (null == nativeRepo) {
return null;
}
if (null == nativeRepo.getSearchLocations()) {
return null;
}
final Set<Path> paths = new LinkedHashSet<>();
for (String location : nativeRepo.getSearchLocations()) {
try {
paths.add(Paths.get(new URI(location)).normalize().toAbsolutePath());
} catch (Exception e) {
System.err.println("Nevalidne search location uri: " + location);
}
}
return paths;
}
}
嗨, 如果你遇到這樣的問題,我想知道:HTTPS ://github.com/spring-cloud/spring-cloud-config/issues/546 –
請參閱https://cloud.spring.io/spring-cloud-config/spring-cloud-config.html#_push_notifications_and_spring_cloud_bus – spencergibb
我有遵循這個指示。但它不適用於純文本文件。 –