作为一家企业,我们希望在我们的PCF实例上内部托管初始化器,我可以这样做。我也能够修改application.yml以默认一些选择。
我通过创建自己的spring-boot应用程序来实现这一点,该应用程序使用io.spring.initializr:initializr-web:0.3.0.RELEASE作为运行时依赖项。
我有两个主要问题:
答案 0 :(得分:4)
有walk you through the creation of your own instance的参考指南。关于你的主要问题:
是的,这可以在自定义实例中使用。实现ProjectRequestPostProcessor
并将这两个依赖项添加到项目中。
@Component
class PreselectedDependenciesRequestPostProcessor implements ProjectRequestPostProcessor {
private final InitializrMetadataProvider metadataProvider;
public PreselectedDependenciesRequestPostProcessor(
InitializrMetadataProvider metadataProvider) {
this.metadataProvider = metadataProvider;
}
@Override
public void postProcessAfterResolution(ProjectRequest request,
InitializrMetadata metadata) {
DependenciesCapability dependencies = metadataProvider.get().getDependencies();
if (!hasDependencies(request, "web")) {
request.getResolvedDependencies().add(dependencies.get("web"));
}
if (!hasDependencies(request, "security")) {
request.getResolvedDependencies().add(dependencies.get("security"));
}
}
private boolean hasDependencies(ProjectRequest request, String... dependenciesId) {
for (String id : dependenciesId) {
if (getDependency(request, id) == null) {
return false;
}
}
return true;
}
private Dependency getDependency(ProjectRequest request, String id) {
return request.getResolvedDependencies().stream()
.filter(d -> id.equals(d.getId())).findFirst().orElse(null);
}
}
它们不会在UI中被选中,但它们将以与用户选择它们相同的方式集成到项目中。我推荐这种方法的原因是IDE集成的目标实例可以与main(start.spring.io)实例相同。攻击Web UI只会使这个特定客户端工作,IMO是一个问题。
对于第二个问题,大多数分支从ProjectGenerator
延伸并做任何他们想做的事情(包括覆盖gradle构建)。检查该课程了解更多详情。
Spring Initializr尚未达到1.0,所以它还没有处于合同足够成熟的状态。
答案 1 :(得分:1)
我已经为我们的内部用法做了很多这样的工作,并将在明天的gr8conf上发表演讲。
放入自定义文件并添加默认选择非常简单,需要一些修改java,css和html的知识。您可以在此处获取我为完成此演示所做的工作的来源:https://github.com/Grails-Plugin-Consortium/initializr/tree/master
需要更改的代码是冗长的,所以最简单的方法来了解我必须做的工作才能实现这一点,只需链接差异,添加“默认”选项和应用程序配置文件。
添加自定义文件以添加到生成的应用程序更容易,只需要将文件添加到initializr-generator中的模板,然后在ProjectGenerator.java中添加链接以复制文件,类似于现有代码的方式已经实施。
protected void generateDockerFile(File dir, Map<String, Object> model){
write(new File(dir, "Dockerfile"), "Dockerfile", model);
write(new File(dir, "docker.sh"), "docker.sh", model);
write(new File(dir, "docker-run.sh"), "docker-run.sh", model);
}
上面添加到ProjectGenerator的方法将添加initializr/initializr-generator/src/main/resources/templates/