Springboot 工程 创建Api,以及如何部署至Tomcat,并调用接口

发布时间 2023-11-02 16:52:08作者: Arcturis

本人是Android客户端出身,后端一概不知,但是现在做的很多事情,必须去学习下,后端是怎么样的,好在了解java语言,后台上后还不错

学习下大名鼎鼎的Springboot框架,为了给我的前端提供Api

 涉及到有 springboot,mysql的安装使用,navicat查看,建表,eclipse大坑的使用,springboot 打包,postman 模拟请求,tomcat web应用服务器的使用部署以及启动

  1. Springboot 与 eclipse

本来想用idea,但是无奈,idea不免费,折腾很久破解也失败了

eclipse 需要安装springboot插件  Help - > eclipseMarketoplace 找到 SpringTools 4 安装 本人 Eclipse 是 Eclipse IDE for Enterprise Java and Web Developers (includes Incubating components) 一定要选这个版本的eclipse安装,而不要使用一般的java 版本的eclipse,不然你新建工程会没有Spring

 

 

 

  2 新建工程

  新建工程 file -> new -> Project ->Spring boot->Spring starter Project (你安装这个就会有这个选项)

 

上面就是新建工程注意两个箭头的地方,一个是版本建议用没有后缀不带 snapshoot的,再有就是选择 Srping web,然后finish结束建立工程

  1. 如何写接口如何与mysql数据库建立连接


看下pom.xml 的dependence ,springboot可以使用gradle构建,也可使用maven构建

maven构建 包谷管理配置是在pom。xml 就类似 Android里 工程里的 build. gradle 生命 implence 包一样

maven使用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.7.17</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.arcturis</groupId>
    <artifactId>demo-maven-3</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo-maven-3</name>
    <description>Demo project for Spring Boot</description>
    <packaging>war</packaging>
    <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>
        </dependency>
        
         <!--简化bean代码-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        
         <!--json-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.80</version>
        </dependency>
        
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        
        <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        
        <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>    
             <version>8.0.26</version>
         </dependency>
         
        <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>javax.servlet-api</artifactId>
              <scope>provided</scope>
         </dependency> 
        
    </dependencies>

    <build>
        <finalName>DemoMaven3</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

他这个dependece 里面 groupid是包管理公司名  artifactId 就是包名,你还能声明version包版本,还有个重要的scope,有几个个重要参数 compile,test,provided

compile 指的后面把这个包一起打包到工程最终包里面,test是指的,这个包只供测试,provded是部署后部署容器提供所需的包,这个类最终不会打包进工程最终包,这个以下是详细解释

javax.servlet-api 这个单独拿出来说,里面mysql jdbc json一些的,不说了,这个包是为了servlet打包部署到tomcat采用的,tomcat自身容器有提供,所以scope是provided
spring-boot-starter-data-jpa 是动态操作数据层的包,允许动态操作数据库
<packaging>war</packaging> 这个参数代表你的工程最终打包成war包,war包后续可以部署至tomcat ,tomcat会解析读取
build标签下 <finalName>DemoMaven3</finalName> 这个就是最红war包的包名

  1. 一些spring工程文件解释


如何写一个api接口呢, 请使用@RestController 

@RequestMapping("/users") 这个/users 就是你api请求的开始的路径

 

如何操作数据库呢 

 主要就是引入的这三个包,jdbc,jpa,还有mysql connector

你在数据库里建好表,然后建好对应的bean类比如

 @Entity表明是一个实体类 @Table 是你数据库里的表名 @Id是主键 @Generatedvalue 主键生成策略 @Column 表字段名

ok建好实体

建一个Dao类操作数据库 Jpa可以自动生成数据库操作方法,你只需要集成JpaRepository就行

 请求怎么写

@RequestMapping("/xxx") 表明这是一个Http请求 

@ResponseBody 会将你的返回绑定至web Responebody中

 ok 这个 userREspository 就是咱们的Dao层数据库 , 在开头定义生命 打上@Autowired注解即可

    @Autowired
    private UserRespository userREspository;

就能愉快的使用Dao 操作Mysql了

 

Post请求怎么写

 

PostMapping 表明这是个Post请求

 

  1. 如何打包部署至Tomcat

写一下mysql 连接属性 在resouce 文件夹下 application.proprity 里

spring.datasource.url=jdbc:mysql://localhost:3306/users?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.mvc.hiddenmethod.filter.enabled=true

 

Tips:原先characterEncoding值是UTF-8mb4 导致数据库连接报错,这里需要改成UTF-8 就行了,不然会字符集不匹配

我们打包的东西,最终在哪里的呢,如何打包呢,右键工程 run as- > Maven install 

ok 就会在 target 文件夹下 有你的输出出来的 xxx.war 文件

然后在 tomcat conf 目录 server.conf 配置文件

Host标签下 增加

<Context path="/users" docBase="C:\spring\DemoMaven3.war"  reloadable="true"></Context> 
path属性是区分不同的web应用 比如你接口地址是/user/getAllUsers 那么 path增加了 users之后 接口地址就是/users/user/getAllUsers
docBase 是你在服务器上 war的绝对路径
 
  • 调试测试

开始请求把

 

 别忘了开启你对应的云服务器端口

里面很多注解 的解释不是官方的解释,是我自己的理解会有偏差,本文主要是复现整个流程,具体注解可以去官方查看具体用法