创建基于Springboot的RESTFUl服务并打包发布

创建项目
  • IntelliJ IDE选择New—>Project—>Spring Initializr 在这里插入图片描述
  • 设置项目groupArtifacttypeLanguagePackagingJava Version
    在这里插入图片描述
  • 下一步选择Web—>Spring Web
    在这里插入图片描述
  • 下一步填写项目名称及存储路径
    在这里插入图片描述
  • 下一步点击完成,开始初始化项目下载maven依赖的包
    PS:初次创建项目,下载依赖包会耗时很久,可将maven地址更改为国内阿里镜像地址
  1. 找到IDE中maven的setting.xml位置
    在这里插入图片描述

  2. 新建一个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>
    
  3. 将该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端口问题

  1. 配置pom.xml,设置打包版本、名称、打包方式
    在这里插入图片描述
  2. 点击右侧的maven应用下面的Lifecycle—>clean—>pacakge;或者命令行执行mvn clean package
    在这里插入图片描述
  3. 然后在项目根目录下的target下生成我们的jar
    在这里插入图片描述
  4. 将我们的打包结果修改下名称(demo.jar),然后部署到服务器上的目录下执行java -jar demo.jar即可启动该应用
打包war

打包war形式和jar类似,不过启动方式和pom.xml配置略有不同,因为war我们不依赖内置的tomcat,因此我们配置一下pom.xml告诉mavan不要将tomcat打包

  1. 配置应用启动

    让我们的启动类继承SpringBootServletInitializer,并重写configure方法,builder.sources指向我们的启动类在这里插入图片描述

  2. 配置pom.xml

    注意,这里打包方式设置成了war在这里插入图片描述
    war打包排除tomcat
    在这里插入图片描述

  3. 执行打包命令mvn clean package点击右侧的maven应用下面的Lifecycle—>clean—>pacakge,同jar方式一样;

  4. 执行完成后在项目根目录下的target下生成我们的war
    在这里插入图片描述

  5. 将我们的打包结果war上传到服务器的tomcat的webapps下重启tomcat即可
    在这里插入图片描述

  6. 部署成功,我们通过Postman模拟请求试试:
    在这里插入图片描述
    OK,可以正常访问我们的RESTFUL接口。至此通过Springboot创建的应用,我们通过两种打包方式都成功部署。

但是!但是!但是!!!

在实践过程中发现,发现通过mavan依赖的库可正常打包到我们的jar/war包内,但是我们项目导入的本地jar却无法正常打包进来,因此还需要对pom进行配置,设置依赖的本地包可打包到jar/war包中。

扩展
Maven引入本地Jar包并打包进War包中

例如,我们项目需要依赖一个本地test.jar,我们通过配置pom.xml文件让其通过maven打包到war/jar内

  1. 在项目根目录创建lib,将本地的jar拷贝至lib目录

  2. 右键jar选择添加为库
    在这里插入图片描述

  3. 配置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>
    
    

闲暇之余写了个小程序,欢迎大家扫码使用
在这里插入图片描述

restful restful所需要的jar包 ========================================= Restlet, a RESTful Web framework for Java ========================================= http://www.restlet.org ----------------------------------------- Native REST support * Core REST concepts have equivalent Java classes (UniformInterface, Resource, Representation, Connector for example). * Suitable for both client-side and server-side web applications. The innovation is that that it uses the same API, reducing the learning curve and the software footprint. * Restlet-GWT module available, letting you leverage the Restlet API from within any Web browser, without plugins. * Concept of "URIs as UI" supported based on the URI Templates standard. This results in a very flexible yet simple routing with automatic extraction of URI variables into request attributes. * Tunneling service lets browsers issue any HTTP method (PUT, DELETE, MOVE, etc.) through a simple HTTP POST. This service is transparent for Restlet applications. Complete Web Server * Static file serving similar to Apache HTTP Server, with metadata association based on file extensions. * Transparent content negotiation based on client preferences. * Conditional requests automatically supported for resources. * Remote edition of files based on PUT and DELETE methods (aka mini-WebDAV mode). * Decoder service transparently decodes compressed or encoded input representations. This service is transparent for Restlet applications. * Log service writes all accesses to your applications in a standard Web log file. The log format follows the W3C Extended Log File Format and is fully customizable. * Powerful URI based redirection support similar to Apache Rewrite module. Available Connectors * Multiple server HTTP connectors available, based on either Mortbay's Jetty or the Simple framework or Grizzly NIO framework. * AJP server connector available to let you plug behind an Apache HTT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值