手把手教你从零开始搭建SpringBoot后端项目框架

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 原料新鲜的IntelliJ IDEA、一双手、以及电脑一台。搭建框架新建项目打开IDE,点击File -> New Project。在左侧的列表中的选择Maven项目,点击Next。填写GroupId和ArtifactId什么是GroupId和ArtifactId?大家可以参考一下google出来的定义,可以参考一下。

原料

新鲜的IntelliJ IDEA、一双手、以及电脑一台。

搭建框架

新建项目

打开IDE,点击File -> New Project。在左侧的列表中的选择Maven项目,点击Next。

填写GroupId和ArtifactId

什么是GroupId和ArtifactId?大家可以参考一下google出来的定义,可以参考一下。

GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构。

ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称

简单理解一下,可以理解为GroupId就是你的Github账号,而ArtifactId就是你的具体某个项目,例如这个例子的源码,SpringBootDemo,detectiveHLH/springbootdemo
detectiveHLH就是GroupId,而ArtifactId就是后面的项目名称。

所以,这里应该填写如下(仅供参考)。

GroupId: com.detectivehlh.test
ArtifactId: parent

test为项目的名称。ArtifactId代表父类,所以就写parent了。点击Next。

设置Project Name和Project Location

ProjectName就写项目的名称就好。Project Location就是项目在你本地的真实路径。填好之后,点击Next。

然后可以看到IDE已经新建好了项目。

.
├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   └── resources
│   └── test
│       └── java
└── test.iml

然后右下角会弹出Maven projects need to be imported,选择右边的Enable Auto-Imported.然后删除src目录。

新建模块

本次项目的框架一共有四层结构,也可以说是有四个模块。分别是api、core、data、domain.我们从底层开始,自底向上开始构建模块。

domain

存放实体类

点击File -> New -> Module,在左侧的列表中选择Maven,点击Next。在ArtifactId处填 domain,一路Next。

data模块

主要是做一些对数据库的操作

点击File -> New -> Module,在左侧的列表中选择Maven,点击Next。在ArtifactId处填 data,一路Next。在模块中其实是存在相互依赖关系的。
data模块依赖domain模块的实体。所以要在data文件的配置文件中实现对domain的依赖。

打开data目录中的pom.xml文件。在

<dependencies>
    <dependency>
        <groupId>com.detectivehlh.test</groupId>
        <artifactId>domain</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

core模块

后端主要的业务逻辑都会在core模块中。

点击File -> New -> Module,在左侧的列表中选择Maven,点击Next。在ArtifactId处填 core,一路Next。同上,此处也需要配置依赖关系。
core模块的中的service会依赖data模块中的数据。

打开core目录下的pom.xml文件。在

<dependencies>
    <dependency>
        <groupId>com.detectivehlh.test</groupId>
        <artifactId>data</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

api模块

主要是存放供前端调用的接口。

点击File -> New -> Module,在左侧的列表中选择Maven,点击Next。在ArtifactId处填 api,一路Next。此处的api模块依赖core中的service服务。

打开api目录下的pom.xml文件。在

<dependencies>
    <dependency>
        <groupId>com.detectivehlh.test</groupId>
        <artifactId>core</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

让项目"走两步"

到此,框架算是搭建好了,下一步就是要让项目"走两步"来看看。此时的项目的目录如下。

.
├── api
│   ├── api.iml
│   ├── pom.xml
│   └── src
│       ├── main
│       │   ├── java
│       │   └── resources
│       └── test
│           └── java
├── core
│   ├── pom.xml
│   └── src
│       ├── main
│       │   ├── java
│       │   └── resources
│       └── test
│           └── java
├── data
│   ├── pom.xml
│   └── src
│       ├── main
│       │   ├── java
│       │   └── resources
│       └── test
│           └── java
├── domain
│   ├── pom.xml
│   └── src
│       ├── main
│       │   ├── java
│       │   └── resources
│       └── test
│           └── java
├── pom.xml
└── test.iml

定位到/api/src/main/java,在java目录下新建package,名字为你之前定义的groupid再加上模块名,举个例子。我这的名字就应该为com.detectivehlh.test.api,然后
在该包下新建名为Application的class。然后将代码替换成如下代码。

package com.detectivehlh.test.api;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

此时会报错,是因为springboot的各项依赖,都还没有引入项目的dependences。打开根目录下的pom.xml文件,添加如下依赖。

 <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.4.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

然后打开api目录下的pom.xml文件。在dependencies标签中添加如下依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

此时Application中就不会报错了。然后就可以启动项目了。打开Application这个类,在SpringBootApplication注解下有个绿色的启动键,点击即可启动项目。之后可在右上方启动。

启动之后,打开http://localhost:8080,如果页面显示

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Tue Sep 18 19:01:11 CST 2018
There was an unexpected error (type=Not Found, status=404).
No message available

那么一个简单的springboot应用就可以启动成功了。

实现controller层

com.detectivehlh.test.api包下,新建一个名为controller的包。然后新建名为HelloController的class。
将其全部替换为如下代码(包名根据你的项目命名自行修改)。

package com.detectivehlh.test.api.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, SpringBoot";
    }
}

重新启动项目,访问http://localhost:8080/hello,就可以看到页面显示如下信息。

Hello, SpringBoot

@RestController注解比较适用于Restful风格的API,如果接口只关心数据,不做server render,就可以使用@RestController注解。
如果接口需要返回模版页面,则需要使用@Controller注解。

@GetMapping注解,是将HTTP Get请求映射到我们自定义的hello方法上。

实现service层

新建CoreConfiguration

定位到/core/src/main/java,在java目录下新建名为com.detectivehlh.test.core的包。然后在该包新建名为CoreConfiguration的Class。
将其全部替换为如下代码(包名根据你的项目命名自行修改)。

package com.detectivehlh.test.core;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * @author detectiveHLH
 * @date 2018/09/13
 */
@ComponentScan
@Configuration
public class CoreConfiguration {

}

引入依赖

此时会报错,同样是因为依赖没有引入。在core的pom.xml文件中的dependencies标签中添加如下依赖。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.5.RELEASE</version>
</dependency>

稍等片刻,就不会有报错提示了。

新建Interface

在com.detectivehlh.test.core包下新建一个名为service的包。在service包下新建一个Class,
名字为HelloService,类型选择Interface。然后修改代码如下(包名根据你的项目命名自行修改)。

package com.detectivehlh.test.core.service;

public interface HelloService {
    String sayHello();
}

新建实现类

在service目录下新建名为impl的包。然后在impl下新建名为HelloServiceImpl的类。修改代码如下(包名根据你的项目命名自行修改)。

package com.detectivehlh.test.core.service.impl;

import com.detectivehlh.test.core.service.HelloService;
import org.springframework.stereotype.Service;

@Service
public class HelloServiceImpl implements HelloService {
    @Override
    public String sayHello() {
        return "Hello, SpringBoot";
    }
}

调用实现类

修改HelloController中的 hello 方法的代码如下(包名根据你的项目命名自行修改)。

package com.detectivehlh.test.api.controller;

import com.detectivehlh.test.core.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * RestController
 * 定义为Restful风格的API控制器
 */
@RestController
public class HelloController {
    @Autowired
    private HelloService helloService;
    
    @GetMapping("/hello")
    public String hello() {
        return helloService.sayHello();
    }
}

此时helloService会报错,这是因为我们没有将HelloService这个添加到Bean容器中来。修改Application类代码如下(包名根据你的项目命名自行修改)。

package com.detectivehlh.test.api;

import com.detectivehlh.test.core.CoreConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Import;

@SpringBootApplication
@Import(CoreConfiguration.class)
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

此时再访问http://localhost:8080/hello,就可以看到如下正常的输出了。

Hello, SpringBoot

打通数据库

实现了简单的service,下一步就是要连接数据库。假设现在在你本地已经有了mysql服务。有名为test的数据库,该数据库下有名为user_role的表。表结构如下。

数据库表名和表数据

column_name column_value
id 用户id
name 用户名

并且有了数据

column_name column_value
id name
1 detectiveHLH

新建实体类

定位到/domain/src/main/java,在java目录下新建名为com.detectivehlh.test.domain的包。在该包下新建entity包。
在entity下新建名为BaseEntity的抽象类。修改代码如下。

package com.detectivehlh.test.domain.entity;

public abstract class BaseEntity {

    private long createdAt;

    private String createdBy;

    private long updatedAt;

    private String updatedBy;

    public long getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(long createdAt) {
        this.createdAt = createdAt;
    }

    public String getCreatedBy() {
        return createdBy;
    }

    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }

    public long getUpdatedAt() {
        return updatedAt;
    }

    public void setUpdatedAt(long updatedAt) {
        this.updatedAt = updatedAt;
    }

    public String getUpdatedBy() {
        return updatedBy;
    }

    public void setUpdatedBy(String updatedBy) {
        this.updatedBy = updatedBy;
    }
}

在entity下新建名为UserRole的类。代码如下。

package com.detectivehlh.test.domain.entity;

public class UserRole extends BaseEntity {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

新建dao层

实现与数据库交互的mapper。

定位到/data/src/main/java,在java目录下新建名为com.detectivehlh.test.data的包。在该包下新建名为dao的包和名为
DataConfiguration的类。然后在dao包下新建名为UserRoleMapper的类。DataConfiguration代码如下。

package com.detectivehlh.test.data;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * @author duzhengkang
 * @date 2018/6/25
 */
@ComponentScan
@Configuration
@MapperScan("com.detectivehlh.test.data.dao")
public class DataConfiguration {

}

将UserRoleMapper的代码修改为如下。

package com.detectivehlh.test.data.dao;

import com.detectivehlh.test.domain.entity.UserRole;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository
public interface UserRoleMapper {
    /**
     * 查询所有的用户角色
     * @return
     */
    List<UserRole> all();
}

此时代码会报错,同样的依赖原因。打开根目录下的pom.xml文件。添加如下依赖。

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.10</version>
</dependency>
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.5</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.6</version>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.2</version>
</dependency>

添加如上依赖,稍等片刻,就不会报错了。但是此时运行项目依旧会报错。是因为我们引入了mybatis但是却没有配置文件。以及没有将mapper注入到容器中去。

修改Application中的代码如下。

package com.detectivehlh.test.api;

import com.detectivehlh.test.core.CoreConfiguration;
import com.detectivehlh.test.data.DataConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Import;

@SpringBootApplication
@Import({CoreConfiguration.class, DataConfiguration.class})
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

mapper就被注入到容器中去了。下一步需要添加配置文件。定位到/api/src/main/resources,新建application.yaml文件。
修改代码如下。

spring:
  application:
    name: test
# 数据库配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 9687Luohongwei
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
# mapper文件配置
mybatis:
  mapper-locations: classpath:mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

修改完毕后,启动项目,访问http://localhost:8080/hello,就可以看到正常输出了。

实现mapper

定位到/data/src/main/resources,新建名为mapper的包。在mapper包下新建名为UserRoleMapper的xml文件。修改代码如下。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.detectivehlh.test.data.dao.UserRoleMapper">
    <!--用于与数据库字段作一一对应-->
    <resultMap id="userRoleMap" type="com.detectivehlh.test.domain.entity.UserRole">
        <result column="id" property="id"/>
        <result column="name" property="name"/>
    </resultMap>

    <!--查询下方列出的所有列-->
    <sql id="allColumns">
        id, name
    </sql>

    <!--定义表名-->
    <sql id="tableName">
        user_role
    </sql>

    <select id="all" resultMap="userRoleMap">
        SELECT
        <include refid="allColumns"/>
        FROM
        <include refid="tableName"/>
        ORDER BY id DESC
    </select>

</mapper>

一定注意namespace是否准确。

调用mapper

修改实现类HelloServiceImpl代码如下。

package com.detectivehlh.springbootdemo.core.service.impl;

import com.detectivehlh.springbootdemo.core.service.HelloService;
import com.detectivehlh.springbootdemo.data.dao.UserRoleMapper;
import com.detectivehlh.springbootdemo.domain.entity.UserRole;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class HelloServiceImpl implements HelloService {
    @Autowired
    private UserRoleMapper userRoleMapper;

    @Override
    public List<UserRole> createToken(String key) {
        List<UserRole> data = userRoleMapper.all();
        return data;
    }
}

此时会报错,是因为实现类中的返回类型已经变成了List

package com.detectivehlh.test.core.service;

import com.detectivehlh.test.domain.entity.UserRole;
import java.util.List;

public interface HelloService {
    List<UserRole> sayHello();
}

让我们回到controller中,我们发现在HelloController中也有报错。这个错误同样也是因为返回类型不一致的原因,修改代码如下。

package com.detectivehlh.test.api.controller;

import com.detectivehlh.test.core.service.HelloService;
import com.detectivehlh.test.domain.entity.UserRole;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * RestController
 * 定义为Restful风格的API控制器
 */
@RestController
public class HelloController {
    @Autowired
    private HelloService helloService;

    @GetMapping("/hello")
    public List<UserRole> hello() {
        return helloService.sayHello();
    }
}

然后启动项目,访问http://localhost:8080/hello。就可以看到,接口返回了user_role表中的所有数据。

[
    {
        "createdAt": 0,
        "createdBy": null,
        "updatedAt": 0,
        "updatedBy": null,
        "id": 1,
        "name": "Tom"
    }
]

此时虽然能够正常访问,但是会在控制台报如下警告。

Tue Sep 18 20:40:22 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

在com.detectivehlh.test.api包下新建config包,在config包中新建DbConfig文件。代码如下。

package com.detectivehlh.test.api.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
/**
 * DbConfig
 *
 * @author detectiveHLH
 * @date 2018-07-27 10:35
 **/
@Configuration
@ConfigurationProperties
@EnableTransactionManagement
public class DbConfig {
    @Bean
    @ConfigurationProperties("spring.datasource")
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        return dataSource;
    }
    @Bean
    public JdbcTemplate jdbcTemplate(){
        return new JdbcTemplate(dataSource());
    }
    @Bean
    public PlatformTransactionManager transactionManager(){
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource());
        return dataSourceTransactionManager;
    }
}

重启启动项目,访问接口时就不会有警告了。

最后的代码目录结构如下。

.
├── api
│   ├── api.iml
│   ├── pom.xml
│   ├── src
│   │   ├── main
│   │   │   ├── java
│   │   │   │   └── com
│   │   │   │       └── detectivehlh
│   │   │   │           └── test
│   │   │   │               └── api
│   │   │   │                   ├── Application.java
│   │   │   │                   ├── config
│   │   │   │                   │   └── DbConfig.java
│   │   │   │                   └── controller
│   │   │   │                       └── HelloController.java
│   │   │   └── resources
│   │   │       └── application.yml
│   │   └── test
│   │       └── java
│   └── target
│       ├── classes
│       │   ├── application.yml
│       │   └── com
│       │       └── detectivehlh
│       │           └── test
│       │               └── api
│       │                   ├── Application.class
│       │                   ├── config
│       │                   │   └── DbConfig.class
│       │                   └── controller
│       │                       └── HelloController.class
│       └── generated-sources
│           └── annotations
├── core
│   ├── pom.xml
│   ├── src
│   │   ├── main
│   │   │   ├── java
│   │   │   │   └── com
│   │   │   │       └── detectivehlh
│   │   │   │           └── test
│   │   │   │               └── core
│   │   │   │                   ├── CoreConfiguration.java
│   │   │   │                   └── service
│   │   │   │                       ├── HelloService.java
│   │   │   │                       └── impl
│   │   │   │                           └── HelloServiceImpl.java
│   │   │   └── resources
│   │   └── test
│   │       └── java
│   └── target
│       ├── classes
│       │   └── com
│       │       └── detectivehlh
│       │           └── test
│       │               └── core
│       │                   ├── CoreConfiguration.class
│       │                   └── service
│       │                       ├── HelloService.class
│       │                       └── impl
│       │                           └── HelloServiceImpl.class
│       └── generated-sources
│           └── annotations
├── data
│   ├── pom.xml
│   ├── src
│   │   ├── main
│   │   │   ├── java
│   │   │   │   └── com
│   │   │   │       └── detectivehlh
│   │   │   │           └── test
│   │   │   │               └── data
│   │   │   │                   ├── DataConfiguration.java
│   │   │   │                   └── dao
│   │   │   │                       └── UserRoleMapper.java
│   │   │   └── resources
│   │   │       └── mapper
│   │   │           └── UserRoleMapper.xml
│   │   └── test
│   │       └── java
│   └── target
│       ├── classes
│       │   ├── com
│       │   │   └── detectivehlh
│       │   │       └── test
│       │   │           └── data
│       │   │               ├── DataConfiguration.class
│       │   │               └── dao
│       │   │                   └── UserRoleMapper.class
│       │   └── mapper
│       │       └── UserRoleMapper.xml
│       └── generated-sources
│           └── annotations
├── domain
│   ├── pom.xml
│   ├── src
│   │   ├── main
│   │   │   ├── java
│   │   │   │   └── com
│   │   │   │       └── detectivehlh
│   │   │   │           └── test
│   │   │   │               └── domain
│   │   │   │                   └── entity
│   │   │   │                       ├── BaseEntity.java
│   │   │   │                       └── UserRole.java
│   │   │   └── resources
│   │   └── test
│   │       └── java
│   └── target
│       ├── classes
│       │   └── com
│       │       └── detectivehlh
│       │           └── test
│       │               └── domain
│       │                   └── entity
│       │                       ├── BaseEntity.class
│       │                       └── UserRole.class
│       └── generated-sources
│           └── annotations
├── pom.xml
└── test.iml

写在后面

写的比较详细,如果有不对的地方,大佬尽管怼。本项目的源码在 这里

个人博客在 这里

Github在 这里,欢迎star或follow。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
XML Java 应用服务中间件
SpringBoot项目打war包流程
本文介绍了将Spring Boot项目改造为WAR包并部署到外部Tomcat服务器的步骤。主要内容包括:1) 修改pom.xml中的打包方式为WAR;2) 排除Spring Boot内置的Tomcat依赖;3) 添加Servlet API依赖;4) 改造启动类以支持WAR部署;5) 打包和部署。通过这些步骤,可以轻松地将Spring Boot应用转换为适合外部Tomcat服务器的WAR包。
154 64
SpringBoot项目打war包流程
|
19天前
|
SQL JavaScript 安全
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
61 11
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
|
9天前
|
Java 应用服务中间件 Maven
SpringBoot项目打包成war包
通过上述步骤,我们成功地将一个Spring Boot应用打包成WAR文件,并部署到外部的Tomcat服务器中。这种方式适用于需要与传统Servlet容器集成的场景。
29 8
|
1月前
基于springboot+thymeleaf+Redis仿知乎网站问答项目源码
基于springboot+thymeleaf+Redis仿知乎网站问答项目源码
161 36
|
1月前
|
自然语言处理 IDE Java
SpringBoot start.aliyun.com创建项目,解决properties乱码的问题
通过确保文件和开发环境的编码一致,配置 Maven 编码,设置 Spring Boot 应用和嵌入式服务器的编码,可以有效解决 properties 文件的乱码问题。以上步骤可以帮助开发者确保在 Spring Boot 项目中正确处理和显示多语言字符,避免因编码问题导致的乱码现象。
45 5
|
1月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
64 2
|
3月前
|
存储 Java 关系型数据库
在Spring Boot中整合Seata框架实现分布式事务
可以在 Spring Boot 中成功整合 Seata 框架,实现分布式事务的管理和处理。在实际应用中,还需要根据具体的业务需求和技术架构进行进一步的优化和调整。同时,要注意处理各种可能出现的问题,以保障分布式事务的顺利执行。
235 53
|
2月前
|
IDE Java 测试技术
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
83 5
|
3月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
89 2
|
2月前
|
安全 Java API
实现跨域请求:Spring Boot后端的解决方案
本文介绍了在Spring Boot中处理跨域请求的三种方法:使用`@CrossOrigin`注解、全局配置以及自定义过滤器。每种方法都适用于不同的场景和需求,帮助开发者灵活地解决跨域问题,确保前后端交互顺畅与安全。
135 0