1. 自定义starter的命名规则
SpringBoot提供的starter以 spring-boot-starter-xxx 的方式命名的。
官方建议自定义的starter使用 xxx-spring-boot-starter 命名规则。以区分SpringBoot生态提供的starter
2. 工程说明
示例工程, 通过永中在线预览为示例. springboot项目中如有需要使用到预览功能时, 引入starter非常方便, 替换传统的jar引用或者是代码重复问题;
3. 自定义starter
3.1 创建maven项目,添加pom依赖
3.1.1 如果希望提供的starter模块的javadoc可以正常查看. pom中添加一下内容. 则打包时可以多生产一个javadoc的jar文件. 项目中引入即可
<build>
<plugins>
<!-- 生成doc文档 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<additionalparam>-Xdoclint:none</additionalparam>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
3.2 创建配置类 @ConfigurationProperties(prefix = "yozo-config")
读取resources下配置文件中yozo-config开头的配置信息映射成实体。也可以不创建, 直接使用@value注解
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* 永中配置属性类
*
* @author dennis
* @date 2022/7/8
*/
@ConfigurationProperties(prefix = "yozo-config")
public class YozoProperties {
/**
* 永中服务器地址
*/
private String host;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
}
3.3 创建业务逻辑类
提供给其他工程引入时, 可以调用的service
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* 永中配置属性类
*
* @author dennis
* @date 2022/7/8
*/
@ConfigurationProperties(prefix = "yozo-config")
public class YozoProperties {
/**
* 永中服务器地址
*/
private String host;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
}
3.4 创建自动装配类
@Configuration: 声明这是一个配置对象 @EnableConfigurationProperties(YozoProperties.class) :使YozoProperties对象生效,将其注入IOC容器之中。或者使用@Bean注释像yozoService()一样;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import com.demo.yozo.starter.service.YozoService;
/**
* 自动配置类
*
* @author dennis
* @date 2022/7/8
*/
@Configuration
@EnableConfigurationProperties(YozoProperties.class)
public class YozoAutoConfiguration {
@Bean
public YozoService yozoService() {
return new YozoService();
}
@Bean
public RestTemplate restTemplate() {
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setConnectTimeout(5 * 1000);
requestFactory.setReadTimeout(60 * 1000);
RestTemplate restTemplate = new RestTemplate(requestFactory);
return restTemplate;
}
}
3.5 在resources文件夹下创建META-INF文件夹,并创建spring.factories文件
starter自动装配
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.demo.yozo.starter.config.YozoAutoConfiguration
additional-spring-configuration-metadata.json(yml文件中可以有提示)
在开发人员的IDE工具使用个人编写的配置读取很有效的在application.properties
或application.yml
文件下完成提示;
{
"properties": [
{
"name": "yozo-config.host",
"type": "java.lang.String",
"defaultValue": "https://www.yozodcs.com/fcscloud",
"description": "yozo api host"
}
]
}
3.6 将该项目用maven打包发到maven库中
4. 项目引入
4.1 创建一个spring项目
4.2 pom中引入刚刚的starter模块
<dependency>
<groupId>com.demo</groupId>
<artifactId>demo-yozo-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
如需要javadoc则再引入(调用service方法时, 可以看到方法的注释)
<dependency>
<groupId>com.demo</groupId>
<artifactId>demo-yozo-spring-boot-starter</artifactId>
<classifier>javadoc</classifier>
<version>1.0-SNAPSHOT</version>
</dependency>
4.3 配置yml文件
server:
port: 8081
servlet:
context-path: /yozo
yozo-config:
host: https://www.yozodcs.com/fcscloud
4.4 新建一个controller测试
/**
* title
*
* @author dennis
* @date 2022/7/8
*/
@RestController
public class PreviewController {
@Autowired
private YozoService yozoService;
@RequestMapping("/preview")
public JSONObject previewFile(HttpServletRequest request, HttpServletResponse response) throws Exception {
String fileUrl = request.getParameter("fileUrl");
String previewUrl = yozoService.previewByUrl(fileUrl);
JSONObject jsonObject = new JSONObject();
jsonObject.put("previewUrl", previewUrl);
return jsonObject;
}
}
使用postman进行测试
5. 参考文档
永中API文档地址 Office文档、pdf转换成html,支持多文档合并_永中DCS
关注个人公众号获取源代码