声明:
这篇文章是在学习网易云课堂后所做的笔记,主要知识点均来源于视频课程。如果需要了解更多信息请联系网易云课堂相关工作人员。这是一个Java方向高级开发工程师系列课程,如果时间充足,后续会将课程内容以文章的形式整理分享。写的不好,希望大家批评指正。
这是一个通过自定义spring-boot-starter快速集成第三方jar包的案例。首先明确三者之间的关系:
自己写starter的步骤
1.建maven工程。
2.引入spring-boot-start、spring-boot-autoconfigure、第三方jar(也就是以前你们公司自己写的jar包)。
3.如需要生成配置元信息(即spring-configuration-metadata.json),加入spring-boot-configuration-processor依赖;
4.编写自动配置类
5.配置发现配置文件:META-INF/spring.factories
6.打包发布
实操:
girl项目:
这个项目模拟需要集成的你们公司以前写的jar包。
Girl.java:
package com.study;
/**
* @Author: 赖天祥
* @Date: 2019-09-07 17:45
* @Description:
*/
public class Girl {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Girl{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.study</groupId>
<artifactId>girl</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>girl</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
打包:
打包到maven仓库。
girl-spring-boot-starter项目(重点):
这个项目就是你为了集成第三方jar包而创建的starter。
GirlProperties.java:
这个类用于对应配置文件的内容。
package com.study.girl.spring.boot.autoconfigure;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* @Author: 赖天祥
* @Date: 2019-09-07 20:11
* @Description:
*/
@ConfigurationProperties(prefix = "com.girl")
public class GirlProperties {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
GirlAutoConfigure.java:
自动配置类,将加载的配置文件,封装为一个bean对象。
package com.study.girl.spring.boot.autoconfigure;
import com.study.Girl;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Author: 赖天祥
* @Date: 2019-09-07 20:13
* @Description:
*/
@Configuration
@EnableConfigurationProperties(GirlProperties.class)
public class GirlAutoConfigure {
@Bean
public Girl getGirl(GirlProperties girlProperties) {
Girl girl = new Girl();
girl.setName(girlProperties.getName());
girl.setAge(girlProperties.getAge());
return girl;
}
}
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.study</groupId>
<artifactId>girl-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>girl-spring-boot-starter</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.study</groupId>
<artifactId>girl</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.0.3.RELEASE</version>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>META-INF</directory>
<targetPath>META-INF/</targetPath>
</resource>
</resources>
</build>
</project>
创建META-INF文件夹,及spring.factories文件:
这个文件里需要指定你的自动配置类(注意这里不要换行)。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.study.girl.spring.boot.autoconfigure.GirlAutoConfigure
最后的文件目录结构:
打包:
打包到maven仓库。
demo项目
这个就是你们新写的项目,需要用到以前写的jar,这里通过你自己写的starter快速集成进来。
在pom.xml文件中引入starter:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.study</groupId>
<artifactId>starter-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>starter-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.study</groupId>
<artifactId>girl-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置文件application.yml:
com:
girl:
age: 25
name: 貂蝉
server:
port: 8080
使用:
package com.study.starterdemo;
import com.study.Girl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@SpringBootApplication
@Controller
@RequestMapping("/demo")
public class StarterDemoApplication {
public static void main(String[] args) {
SpringApplication.run(StarterDemoApplication.class, args);
}
@Autowired
private Girl girl;
@ResponseBody
@GetMapping("/get")
public Girl get() {
return girl;
}
}
测试:
总结:
新的项目,需要集成第三方的jar包,可以通过starter快速集成。本文是一个自己写starter的案例,是我的课堂笔记,也希望对你有帮助。