创建项目
- IntelliJ IDE选择
New
—>Project
—>Spring Initializr
- 设置项目
group
、Artifact
、type
、Language
、Packaging
、Java Version
- 下一步选择
Web
—>Spring Web
- 下一步填写项目名称及存储路径
- 下一步点击完成,开始初始化项目下载maven依赖的包
PS:初次创建项目,下载依赖包会耗时很久,可将maven地址更改为国内阿里镜像地址
-
找到IDE中maven的setting.xml位置
-
新建一个
setting.xml
文件,将maven的地址设置为阿里的镜像地址,内容如下<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd"> <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> </settings>
-
将该setting.xml文件丢到IDE的Maven的setting.xml的路径下面替换原文件;或者放在其他位置,勾选后面的自定义位置,选择你的setting.xml所在位置即可
编写代码
我们应用简单的提供RESTFUL风格的API接口给其他应用程序,基于MVC架构首先我们创建一个业务Controllor
-
创建LogicControllor
简单实现login接口
打包发布
打包jar
这里需要注意下,因为Springboot自带tomcat容器,一般我们都会将应用打包成jar
,然后部署到服务器使用java -jar xxxx.jar
直接启动就可以。当然打包成jar时候可通过配置aplication.properties
设置应用访问端口和访问路径
但是如果使用了80或443端口,同一台服务器的其他应用部署就无法再次使用,因此接下来们通过另一种打包方式,使用war
打包,然后部署到外部的tomcat容器中(不使用Sprintboot内嵌的tomcat)来解决多应用共享80端口问题
- 配置
pom.xml
,设置打包版本、名称、打包方式
- 点击右侧的
maven
应用下面的Lifecycle
—>clean
—>pacakge
;或者命令行执行mvn clean package
- 然后在项目根目录下的
target
下生成我们的jar
- 将我们的打包结果修改下名称(demo.jar),然后部署到服务器上的目录下执行
java -jar demo.jar
即可启动该应用
打包war
打包war形式和jar类似,不过启动方式和pom.xml
配置略有不同,因为war我们不依赖内置的tomcat,因此我们配置一下pom.xml
告诉mavan不要将tomcat打包
-
配置应用启动
让我们的启动类继承
SpringBootServletInitializer
,并重写configure
方法,builder.sources指向我们的启动类 -
配置
pom.xml
注意,这里打包方式设置成了
war
war
打包排除tomcat
-
执行打包命令
mvn clean package
点击右侧的maven
应用下面的Lifecycle
—>clean
—>pacakge
,同jar方式一样; -
执行完成后在项目根目录下的
target
下生成我们的war
-
将我们的打包结果war上传到服务器的tomcat的webapps下重启tomcat即可
-
部署成功,我们通过Postman模拟请求试试:
OK,可以正常访问我们的RESTFUL接口。至此通过Springboot创建的应用,我们通过两种打包方式都成功部署。
但是!但是!但是!!!
在实践过程中发现,发现通过mavan依赖的库可正常打包到我们的jar/war包内,但是我们项目导入的本地jar却无法正常打包进来,因此还需要对pom进行配置,设置依赖的本地包可打包到jar/war包中。
扩展
Maven引入本地Jar包并打包进War包中
例如,我们项目需要依赖一个本地test.jar
,我们通过配置pom.xml文件让其通过maven打包到war/jar内
-
在项目根目录创建
lib
,将本地的jar
拷贝至lib目录 -
右键jar选择添加为库
-
配置
pom.xml
经过上面配置,编写代码时已经可以引入Jar包中的class了,但是在打包时,由于scope=system,默认并不会将Jar包打进war包中,所有需要通过插件进行打包。
修改pom.xml文件,在plugins标签下加入下面的代码
这样,打出来的war包中,就会包含以项目名称-版本.jar
的包,内部就是我们引入的本地jar包。
完整的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 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.3.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.zcmain</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <!--版本号--> <name>demo</name> <!--打出来的包的名字 demo-0.0.1-SNAPSHOT.jar/war--> <packaging>war</packaging> <!--打包形式--> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </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> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <!--外置tomcat启动 :<scope>provided</scope>表示这个jar包在编译测试等地方是需要的,但是打包不会一起打包进去, 这也避免了此类构件当部署到目标容器后产生包依赖冲突。由于SpringBoot内置了Tomcat所以这里需要重新配置一下,防止冲突--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <!--引入本地jar,让其可以打包进去--> <dependency> <groupId>com.zcmain</groupId> <artifactId>demo</artifactId> <version>1.0.0</version> <scope>system</scope> <systemPath>${project.basedir}/lib/test.jar</systemPath> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.10</version> <executions> <execution> <id>copy-dependencies</id> <phase>compile</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/lib </outputDirectory> <includeScope>system</includeScope> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
闲暇之余写了个小程序,欢迎大家扫码使用