1. 根据项目,修改Application.properties, 

需要继承类ProjectContributor,并且对外公布为@Bean



public class ApplicationPropertiesContributor implements ProjectContributor {

private ProjectDescription description;

public ApplicationPropertiesContributor(ProjectDescription description) {
this.description = description;
}

private final String relativePath = "src/main/resources/application.properties";
private final String resourcePattern = "classpath:configuration/application.properties";

private final PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();

@Override
public void contribute(Path projectRoot) throws IOException {

Path output = projectRoot.resolve(this.relativePath);
if (!Files.exists(output)) {
Files.createDirectories(output.getParent());
Files.createFile(output);
}
//将现有配置项中Application.properties复制到target路径,然后Append自定义配置
Resource resource = this.resolver.getResource(this.resourcePattern);
FileCopyUtils.copy(resource.getInputStream(), Files.newOutputStream(output, StandardOpenOption.APPEND));

if (this.description.getRequestedDependencies().containsKey("nacos-discovery")) {
try (PrintWriter writer = new PrintWriter(Files.newBufferedWriter(output, StandardOpenOption.APPEND))) {
writer.println();
writer.println("spring.cloud.nacos.discovery.username=nacos");
writer.println("spring.cloud.nacos.discovery.password=nacos");
writer.println("spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848");
writer.println("spring.cloud.nacos.discovery.namespace=public");
}
}
}
}


 

2. 如果需要对启动Main方法做私有化定制,需要实现 MainApplicationTypeCustomizer,如pom引入了openFeign依赖,则需要在main方法中添加注解@EnableFeignClients



@Bean
public MainApplicationTypeCustomizer<TypeDeclaration> nacosDiscoveryApplicationAnnotator(ProjectDescription projectDescription, Build build) {
return typeDeclaration -> {
if (projectDescription.getRequestedDependencies().containsKey("nacos-discovery")) {
typeDeclaration
.annotate(Annotation.name("org.springframework.cloud.client.discovery.EnableDiscoveryClient"));
}
if (build.dependencies().has("cloud-feign")) {
typeDeclaration
.annotate(Annotation.name("org.springframework.cloud.openfeign.EnableFeignClients"));
}
};
}


 

最终直接结果如下:



@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosConfigDemoApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConfigDemoApplication.class, args);
}

}


 

 

3.通过实现 HelpDocumentCustomizer, 实现在Help.md中添加自定义信息,如:



public class LixiangHelpDocumentCustomizer implements HelpDocumentCustomizer {
private ProjectDescription projectDescription;

public LixiangHelpDocumentCustomizer(ProjectDescription projectDescription) {
this.projectDescription = projectDescription;
}

@Override
public void customize(HelpDocument document) {

if (projectDescription.getRequestedDependencies().containsKey("nacos-config")) {
document.gettingStarted().addGuideLink("https://github.com/alibaba/spring-cloud-alibaba/tree/master/spring-cloud-alibaba-examples/nacos-example/nacos-config-example",
"Nacos Configuration Example");
document.getWarnings().addItem("如果spring-boot版本高于2.4.0,并且配置未生效的话, 请在systerm.Envrionment中尝试配置如下属性'spring.cloud.bootstrap.enabled=true'.");
}
if (projectDescription.getRequestedDependencies().containsKey("nacos-discovery")) {
document.gettingStarted().addGuideLink("https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme.md",
"Nacos Service Discovery Example");
}
}
}