51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1049|回复: 0
打印 上一主题 下一主题

SpringBoot自定义starter

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-28 13:37:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,如何自定义

①,我们首先要有一个意识,springboot自己适配的一般以:spring-boot-starter-xxx命名,比如:spring-boot-starter-amqp

②,自己去适配springboot一般以:xxx-spring-boot-starter命名,比如:mybatis-spring-boot-starter

③,springboot自动适配的在依赖时一般不用加版本号,自动适配springboot 的需要版本号。因为sprinboot根本就不知道它的版本

③,通过观察mybatis-spring-boot-starter,我们发现mybatis-spring-boot-starter并没有java代码,通过观察其pom.xml我们发现,它引入了mybatis-spring-boot-autoconfigure

④,所以我们可以仿照mybatis自定义我们的starter


2,创建工程

①,创建一个空的mystart工程,新建两个模块,1,mystart;2,autoconfigurable


3,mystart模块配置

①,mystart依赖于autoconfigurable模块

  1. <groupId>com.spring.start</groupId>
  2.     <artifactId>mystart</artifactId>
  3.     <version>1.0-SNAPSHOT</version>

  4.     <dependencies>
  5.         <dependency>
  6.             <groupId>com.spring.start.autoconfigurable</groupId>
  7.             <artifactId>autoconfigurable</artifactId>
  8.             <version>0.0.1-SNAPSHOT</version>
  9.         </dependency>
  10.     </dependencies>
复制代码


4,autoconfigurable工程代码

①,pom.xml

  1. <groupId>com.spring.start.autoconfigurable</groupId>
  2.         <artifactId>autoconfigurable</artifactId>
  3.         <version>0.0.1-SNAPSHOT</version>
  4.         <packaging>jar</packaging>

  5.         <name>autoconfigurable</name>
  6.         <description>Demo project for Spring Boot</description>

  7.         <parent>
  8.                 <groupId>org.springframework.boot</groupId>
  9.                 <artifactId>spring-boot-starter-parent</artifactId>
  10.                 <version>2.0.0.RELEASE</version>
  11.         </parent>

  12.         <dependencies>
  13.         <--依赖于springboot starter-->
  14.                 <dependency>
  15.                         <groupId>org.springframework.boot</groupId>
  16.                         <artifactId>spring-boot-starter</artifactId>
  17.                 </dependency>
  18.         </dependencies>
复制代码

②,编写xxxProperties类,类似于ServerProperties

  1. import org.springframework.boot.context.properties.ConfigurationProperties;

  2. //这样才能读取到application.properties 中的相应配置
  3. @ConfigurationProperties("spring.su")
  4. public class SuProperties {

  5.     private String prefix;
  6.     private String suffix;

  7.     public String getPrefix() {
  8.         return prefix;
  9.     }

  10.     public void setPrefix(String prefix) {
  11.         this.prefix = prefix;
  12.     }

  13.     public String getSuffix() {
  14.         return suffix;
  15.     }

  16.     public void setSuffix(String suffix) {
  17.         this.suffix = suffix;
  18.     }
  19. }
复制代码

③,编写功能类

  1. public class SuService {
  2.     //这里不用@Autowired注入,会在自动配置类注入时给设置,所以才有setSuProperties 方法
  3.     private SuProperties suProperties;

  4.     public String hello(String name){
  5.         return suProperties.getPrefix()+"--"+name+"=="+suProperties.getSuffix();
  6.     }


  7.     public SuProperties getSuProperties() {
  8.         return suProperties;
  9.     }

  10.     public void setSuProperties(SuProperties suProperties) {
  11.         this.suProperties = suProperties;
  12.     }
  13. }
复制代码

④,编写自动配置类

  1. import org.springframework.beans.factory.annotation.Autowired;
  2. import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
  3. import org.springframework.boot.context.properties.EnableConfigurationProperties;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;

  6. //是个配置类
  7. @Configuration
  8. //在web应用中起效
  9. @ConditionalOnWebApplication
  10. //指明配置类,这样SuProperties 才能被注入
  11. @EnableConfigurationProperties({SuProperties.class})
  12. public class SuAutoConfiguration {

  13.     @Autowired
  14.     private SuProperties suProperties;

  15.     @Bean
  16.     public SuService suService(){
  17.         SuService suService = new SuService();
  18.         suService.setSuProperties(suProperties);
  19.         return suService;
  20.     }
  21. }
复制代码

⑤,添加对应的 META-INF/spring.factories

⑥,spring.factories 内容,这样springboot在启动时会就扫描对应的AutoConfiguration

  1. org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.spring.start.autoconfigurable.SuAutoConfiguration
复制代码


5,mystart工程代码

①,pom.xml 依赖于autoConfiguration 工程即可

  1. <groupId>com.spring.start</groupId>
  2.     <artifactId>mystart</artifactId>
  3.     <version>1.0-SNAPSHOT</version>

  4.     <dependencies>
  5.         <dependency>
  6.             <groupId>com.spring.start.autoconfigurable</groupId>
  7.             <artifactId>autoconfigurable</artifactId>
  8.             <version>0.0.1-SNAPSHOT</version>
  9.         </dependency>
  10.     </dependencies>
复制代码


6,测试工程代码编写

①,pom.xml

  1. <parent>
  2.                 <groupId>org.springframework.boot</groupId>
  3.                 <artifactId>spring-boot-starter-parent</artifactId>
  4.                 <version>2.0.0.RELEASE</version>
  5.         </parent>

  6.         <dependencies>
  7.                 <dependency>
  8.                         <groupId>org.springframework.boot</groupId>
  9.                         <artifactId>spring-boot-starter-web</artifactId>
  10.                 </dependency>
  11.         <--依赖mystart 即可,mystart 会依赖autoconfigurable 工程,注意这里要指定版本号-->
  12.                 <dependency>
  13.                         <groupId>com.spring.start</groupId>
  14.                         <artifactId>mystart</artifactId>
  15.                         <version>1.0-SNAPSHOT</version>
  16.                 </dependency>

  17.                 <dependency>
  18.                         <groupId>org.springframework.boot</groupId>
  19.                         <artifactId>spring-boot-starter-test</artifactId>
  20.                         <scope>test</scope>
  21.                 </dependency>
  22.         </dependencies>
复制代码

②,application.properties

  1. spring.su.prefix=小美女
  2. spring.su.suffix=错过了
复制代码

③,测试类

  1. import com.spring.start.autoconfigurable.SuService;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.web.bind.annotation.RestController;

  5. @RestController
  6. public class HomeController {

  7.     @Autowired
  8.     private SuService suService;

  9.     @RequestMapping("/")
  10.     public String index(){
  11.         return suService.hello("小苏");
  12.     }
  13. }
复制代码

④,启动工程,然后测试即可,

⑤,遗留问题,在application.properties 写的中文会乱码,暂时没有找到解决的办法,知道如何的同学欢迎留言,感谢!!!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-4-20 00:18 , Processed in 0.070158 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表