查看原文
其他

Spring Boot 定制 parent 快速构建应用

SpringForAll社区 SpringForAll社区 2021-05-26


点击上方☝SpringForAll社区,轻松关注!
及时获取有趣有料的技术文章

1/ 场景

有很多小应用,有一些公共的特点,比如说都依赖了spring-boot、log4j2、lombok、fastjson等等,为了方便开发,可以使用Maven定制一个parent来简化开发,统一管理第三方依赖的版本。(为后续的微服务做准备哦!)

2/ 构建 parent

2.1. 新建一个Maven工程,any-root。

2.2. 修改pom.xml,添加父工程的依赖,基本上子工程都会用到这些依赖。

1<?xml version="1.0" encoding="UTF-8"?>
2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4    <modelVersion>4.0.0</modelVersion>
5
6    <groupId>cn.ictgu</groupId>
7    <artifactId>any-root</artifactId>
8    <version>1.0.RELEASE</version>
9    <packaging>pom</packaging>
10
11    <properties>
12        <spring-boot.version>1.5.3.RELEASE</spring-boot.version>
13        <java.version>1.8</java.version>
14        <lombock.version>1.16.16</lombock.version>
15        <fastjson.version>1.2.32</fastjson.version>
16        <commons-lang3.version>3.5</commons-lang3.version>
17        <jsoup.version>1.10.2</jsoup.version>
18    </properties>
19
20    <dependencyManagement>
21        <dependencies>
22            <!-- Spring Boot -->
23            <dependency>
24                <groupId>org.springframework.boot</groupId>
25                <artifactId>spring-boot-dependencies</artifactId>
26                <version>${spring-boot.version}</version>
27                <type>pom</type>
28                <scope>import</scope>
29            </dependency>
30        </dependencies>
31    </dependencyManagement>
32
33    <dependencies>
34
35        <!-- web -->
36        <dependency>
37            <groupId>org.springframework.boot</groupId>
38            <artifactId>spring-boot-starter-web</artifactId>
39            <exclusions>
40                <exclusion>
41                    <groupId>org.springframework.boot</groupId>
42                    <artifactId>spring-boot-starter-logging</artifactId>
43                </exclusion>
44                <exclusion>
45                    <groupId>org.springframework.boot</groupId>
46                    <artifactId>spring-boot-starter-tomcat</artifactId>
47                </exclusion>
48            </exclusions>
49        </dependency>
50
51        <!-- Web 容器 undertow -->
52        <dependency>
53            <groupId>org.springframework.boot</groupId>
54            <artifactId>spring-boot-starter-undertow</artifactId>
55        </dependency>
56
57        <!-- 日志 Log4j2 -->
58        <dependency>
59            <groupId>org.springframework.boot</groupId>
60            <artifactId>spring-boot-starter-log4j2</artifactId>
61        </dependency>
62
63        <!-- 面向切面 aop -->
64        <dependency>
65            <groupId>org.springframework.boot</groupId>
66            <artifactId>spring-boot-starter-aop</artifactId>
67        </dependency>
68
69        <!-- 代码简化 Lombok -->
70        <dependency>
71            <groupId>org.projectlombok</groupId>
72            <artifactId>lombok</artifactId>
73            <version>${lombock.version}</version>
74        </dependency>
75
76        <!-- JSON fastJSON -->
77        <dependency>
78            <groupId>com.alibaba</groupId>
79            <artifactId>fastjson</artifactId>
80            <version>${fastjson.version}</version>
81        </dependency>
82
83        <!-- 通用工具类 Apache Commons-lang3 -->
84        <dependency>
85            <groupId>org.apache.commons</groupId>
86            <artifactId>commons-lang3</artifactId>
87            <version>${commons-lang3.version}</version>
88        </dependency>
89
90
91        <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
92        <dependency>
93            <groupId>org.jsoup</groupId>
94            <artifactId>jsoup</artifactId>
95            <version>${jsoup.version}</version>
96        </dependency>
97
98    </dependencies>
99
100    <!-- Package as an executable jar -->
101    <build>
102        <plugins>
103            <plugin>
104                <groupId>org.springframework.boot</groupId>
105                <artifactId>spring-boot-maven-plugin</artifactId>
106            </plugin>
107        </plugins>
108    </build>
109
110
111</project>

附加一篇文章: Maven实战(六)--- dependencies与dependencyManagement的区别

2.3. 依赖了log4j2,需要在resources目录下添加log4j2的配置文件

img

项目结构

1<?xml version="1.0" encoding="UTF-8"?>
2<Configuration status="WARN" monitorInterval="30">
3    <Properties>
4        <Property name="PID">????</Property>
5        <Property name="LOG_PATTERN">%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{%5p} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n%xwEx</Property>
6    </Properties>
7    <Appenders>
8        <Console name="Console" target="SYSTEM_OUT" follow="true">
9            <PatternLayout pattern="${LOG_PATTERN}"/>
10        </Console>
11    </Appenders>
12    <Loggers>
13        <Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
14        <Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
15        <Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
16
17        <Root level="info">
18            <AppenderRef ref="Console"/>
19        </Root>
20    </Loggers>
21</Configuration>

2.4 将父工程安装到本地仓库
方式一:使用 IDEA

img

点击 install

方式二:使用命令行,进入pom.xml所在目录,执行

1mvn clean install

至此,父工程已安装完毕,其它工程依赖此工程即可添加父工程所有依赖。

3/ 快速构建子工程

3.1 新建一个Maven工程:avatar

3.2 修改pom.xml,继承父工程any-root

1<?xml version="1.0" encoding="UTF-8"?>
2<project xmlns="http://maven.apache.org/POM/4.0.0"
3         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

5    <modelVersion>4.0.0</modelVersion>
6
7    <groupId>cn.ictgu</groupId>
8    <artifactId>avatar</artifactId>
9    <version>1.0-SNAPSHOT</version>
10
11    <parent>
12        <groupId>cn.ictgu</groupId>
13        <artifactId>any-root</artifactId>
14        <version>1.0.RELEASE</version>
15    </parent>
16
17</project>

IDEA 会自动导入父工程中的依赖:

img

相关依赖

3.3 添加启动类,测试lombok/log4j2

img

启动程序

4/ 子项目添加其它依赖,以spring-boot-actuator 为例:

4.1 在avatar项目的基础上,修改pom.xml,添加actuator的依赖

1<?xml version="1.0" encoding="UTF-8"?>
2<project xmlns="http://maven.apache.org/POM/4.0.0"
3         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

5    <modelVersion>4.0.0</modelVersion>
6
7    <groupId>cn.ictgu</groupId>
8    <artifactId>avatar</artifactId>
9    <version>1.0-SNAPSHOT</version>
10
11    <parent>
12        <groupId>cn.ictgu</groupId>
13        <artifactId>any-root</artifactId>
14        <version>1.0.RELEASE</version>
15    </parent>
16
17    <dependencies>
18        <dependency>
19            <groupId>org.springframework.boot</groupId>
20            <artifactId>spring-boot-starter-actuator</artifactId>
21        </dependency>
22    </dependencies>
23
24</project>

4.2 添加配置文件,在resources下添加application.yml

1management:
2  security:
3    enabled: false

作用是可以随意访问actuator下的所有端点

4.3 启动项目

img

启动日志

4.4 验证actuator下的端点,访问http://localhost:8080/beans
查看整个应用所有bean的依赖关系:

img

/beans

5/ 总结

将公共依赖定制为父工程,有如下好处:

  • 避免手动添加依赖带来的失误操作;

  • 统一管理依赖的版本号;

  • 加快子工程的构建,一个继承即可获得大量公共服务。

© 著作权归作者所有,转载或内容合作请联系作者


● SpringBot中教你手把手配置 https

● Spring Boot 日志处理你还在用Logback?

● 【双11狂欢的背后】微服务注册中心如何承载大型系统的千万级访问?

● Spring Boot 新一代监控你该这么玩

● Spring Boot 异常处理

● Spring Boot 配置 - 配置信息加密

● 拒绝黑盒应用-Spring Boot 应用可视化监控

● 并发Bug之源有三,请睁大眼睛看清它们


如有收获,请帮忙转发,您的鼓励是作者最大的动力,谢谢!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存