在Spring云配置服务器克隆git repo并正确地提供文件后,它还可以对这些文件进行更改并将其推回远程git repo吗?或者该功能必须在运行配置服务器的应用程序中编写?
对于其他感兴趣的人,我自动连接了SpringJgitenEnvironmentRepository,并包装了一些附加功能。我使用FileUtils来处理文件操作,然后使用JGitBean编写了一个基本服务:
@Autowired private JGitEnvironmentRepository jgit;
@Value("${spring.cloud.config.server.git.uri}.git")
private String remoteRepoURL;
@Value("${spring.cloud.config.server.git.username}")
private String username;
@Value("${spring.cloud.config.server.git.password}")
private String password;
private Git git = null;
private Repository localRepo ;
private CredentialsProvider creds;
public File getWorkingDirectory(){
return jgit.getBasedir();
}
public void updateLocalRepo() throws Exception {
log.info("Updating the local repository.");
init();
git.pull()
.setCredentialsProvider( creds )
.call();
}
public void commitAndPushRepository(String commitMessage) throws Exception {
init();
git.commit()
.setAll(true)
.setMessage(commitMessage)
.call();
git.push()
.setCredentialsProvider( creds )
.call();
log.info("Pushed local repository with message [" + commitMessage+"].");
}//end commitAndPush
private void init() throws IOException {
if(git!=null) return;
String repoPath = jgit.getBasedir().getPath();
localRepo = new FileRepository(repoPath + "/.git");
git = new Git(localRepo);
StoredConfig config = git.getRepository().getConfig();
config.setString("remote", "origin", "url", remoteRepoURL);
config.save();
creds = new UsernamePasswordCredentialsProvider(username, password);
log.info("Initialized local repository at path " + repoPath);
}
这里是文件服务:
@Autowired private GitService gitService;
public void updateFile(String author, String fileName, String newContent) throws Exception{
Assert.hasLength(fileName, "File name must not be null.");
Assert.hasLength(newContent, "File must contain content.");
Assert.hasLength(author, "Unable to update file without author logging.");
gitService.updateLocalRepo();
File workingDirectory = gitService.getWorkingDirectory();
log.info("Updating file [" + fileName + "] in the working dir " + workingDirectory);
File matchingFile = findFileWithName(workingDirectory, fileName);
Assert.notNull(matchingFile, "No file with name " + fileName + " was found.");
FileUtils.write(matchingFile, newContent);
gitService.commitAndPushRepository( buildCommitMessage(author, fileName) );
}//end updateFile
public String getConfigFileContents(String fileName) throws Exception {
gitService.updateLocalRepo();
File file = findFileWithName(gitService.getWorkingDirectory(), fileName);
Assert.notNull(file, "No file with name " + fileName + " found.");
return FileUtils.readFileToString( file );
}
public Collection<String> getAllConfigFileNames() throws Exception{
gitService.updateLocalRepo();
Collection<String> fileNames = new ArrayList<>();
Collection<File> allFiles = FileUtils.listFiles(gitService.getWorkingDirectory(), TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
for(File file : allFiles) {
fileNames.add(file.getName());
}//end foreach file
return fileNames;
}
private String buildCommitMessage(String author, String fileName) {
return "Author of commit on [" + fileName + "]: " + author;
}
private File findFileWithName(File workingDirectory, String fileName) {
Collection<File> allFiles = FileUtils.listFiles(workingDirectory, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
for(File file : allFiles) {
if(fileName.equals(file.getName())){
return file;
}//endif found
}//end foreach file
return null;
}//end findFileWIthName
不,它不会写字。配置服务器是远程git存储库的只读客户端。
我正在使用Spring Cloud Config服务器,能够检测来自git存储库的更改并将其传递给配置客户机。 有两种方法,我已经实现了: null 所以两者都工作得很好,那么使用Spring Cloud Bus有什么好处吗?或者在生产环境中,不使用Spring Cloud Bus会有什么问题吗?因为将需要额外的工作来设置RabbitMQ集群(HA)作为生产中的Spring云总线。 谢谢,大卫
我想实现以下目标: 在“开发”模式下,在当前webapp中执行Spring云配置 因此,当前webapp的类路径包含对配置服务器和客户端的依赖关系: 在开发模式下,并在引导程序中具有以下属性。yml,没问题(嵌入式配置服务器已配置并启动) 当不在'dev'模式(例如spring.profiles.active=prod)时,当前的webapp不会启动:它无法自动装配我的属性(我猜嵌入式服务器是以错
我已经使用spring开发了配置服务器。 我的申请书。java是 我的bootstrap.properties档案 我的配置服务器客户端开发。属性文件 我使用了git init、git add和git commit命令将我的文件添加到本地git。 但是当我运行应用程序并进入http://localhost:8888/client-config/development 它不显示我的属性值。 应用程序
我正在尝试设置一个SpringCloudConfig服务器,它使用SSH密钥从GitRepo获取配置。它使用SpringBootVersion2.1运行。0.0版本和springCloudVersion格林威治。M3。 当在下面的配置中使用带有用户名和密码的https bitbucket URI时,配置服务工作正常,没有问题: 但我们必须迁移到使用ssh密钥,而不是使用以下配置的用户名和密码: i
我正在尝试创建SpringCloudConfigServer,以便使用SSHURI连接到git存储库(bitbucket)。我正在关注Spring云配置 我使用ssh-keygen实用工具生成了密钥对,并粘贴了。发布文件内容在我的bitbucket帐户的ssh部分,但当我运行作为spring启动应用程序的服务器时,我得到无效的privateKey异常。 我也使用了这个堆栈溢出帖子中提供的建议,但是
我正在使用Spring Cloud配置服务器,我需要为每个阶段的产品测试和开发创建一个配置文件,我已经为默认配置文件创建了4个yml文件application.yml,为每个配置文件创建了应用程序-{配置文件},所以我的问题是如何通过环境变量加载特定的配置,并在每个配置文件配置和端口上运行配置服务器,我已经创建了一个bootstrap.yml但我不能解决这个问题。如果有人能指导我完成这些步骤来满足