spring Initializr 笔记

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");
        }
    }
}

 

 

 

 

 

 

  

 

posted @ 2021-09-15 20:15  龘人上天  阅读(115)  评论(0编辑  收藏  举报