SpringBoot项目实战,附源码

2023-11-19

SpringBoot2.0笔记

(一)SpringBoot基本操作——环境搭建及项目创建(有demo)

(二)SpringBoot基本操作——使用IDEA打war包发布及测试

(三)SpringBoot基本操作——SpringBoot整合SpringDataJpa(有demo)

(四)SpringBoot基本操作——SpringBoot使用RedisTemplate整合Redis(有demo)

(五)SpringBoot基本操作——SpringBoot使用Jedis整合Redis(有demo)

(六)SpringBoot基本操作——SpringBoot使用Junit4单元测试(有demo)

(七)SpringBoot基本操作——SpringBoot整合Shiro权限管理(完整demo+界面)

 

本文使用idea工具构建Springboot2.0+SpringMvc+Thymeleaf+SpringDataJPA+MySql+Redis项目

GitHub地址:https://github.com/jwwam/springbootDemo.git

此demo可直接下载运行,以下为具体创建项目过程步骤说明和遇到问题解决方法。

一、构建SpringBoot项目

1.使用idea创建Springboot项目,选择SpringInitializr选好jdk版本点击下一步

2.填写项目包名及java版本

3.勾选你需要的项目组件,Springboot版本我使用2.0

Lombok可以简化代码量,提供注解方式代替重复性代码,非必须,用不用看情况,有时候很方便,新手不建议用

4.创建web项目所以勾选Web

5.模板语言勾选Thymeleaf,这个没得说,springboot官方推荐,确实很好用,当然是指3.0版本,老版本性能有短板

6.数据库持久化推荐使用JPA方式,MySQL看情况选择

7.Nosql我这里使用Redis,看你需要,可不勾选,后续需要时再引入

8.MQ可根据自己情况选择,我这里不需要,最后I/O需要一个发邮件的服务,不用的话也不需要勾选,可后续再引入

9.下一步填写项目文件名称

10.Finish后进入项目,然后漫长的等待一段时间后项目会构建完成

二、启动SpringBoot项目

1.项目加载完毕之后打开启动器DemoApplication右键run可直接启动项目,或者右上方直接启动DemoApplication

2.不出意外的话可以直接启动不会报错,没啥好说的,我列一下可能会出现的问题,这些问题基本都是由于前面勾选项目组件(即jpa,mysql等)时引入了需要启动注入的一些依赖或数据源缺失引起的和Springboot版本也有很大的关系,以下报错不一定会出现。

(1)启动报错:Failed to configure a DataSource: 'url' attribute is not specified and no embedd

问题原因:新项目未做相关数据源配置, 启动springboot找不到配置引起

解决办法(选一即可):

① 启动类DemoApplication加入注解@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

禁止自动加载数据源配置

② 手动添加数据源,在application.properties加入以下配置:

#数据源
spring.datasource.url=jdbc:mysql://localhost:3306/demo_test?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

(2)启动报错:At least one JPA metamodel must be present!

问题原因:Springboot自动加载持久化bean,即自动加载jpa的bean造成

解决办法(选一即可)

① 启动类DemoApplication加上以下注解

@EnableAutoConfiguration(exclude={
   JpaRepositoriesAutoConfiguration.class //禁止springboot自动加载持久化bean
})

② pom加入或更改jpa启动包,按照以下格式

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-jpa</artifactId>
   <exclusions>
      <exclusion>
         <groupId>org.hibernate</groupId>
         <artifactId>hibernate-entitymanager</artifactId>
      </exclusion>
      <exclusion>
         <groupId>org.hibernate</groupId>
         <artifactId>hibernate-core</artifactId>
      </exclusion>
   </exclusions>
</dependency>
<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-core</artifactId>
   <version>5.2.10.Final</version>
</dependency>

pom重新导入就好了,启动项目也不再报错。

三、Hello World页面显示及Json数据回传

1.增加一个测试控制层和页面,添加测试类FirstController.java

package com.springboot.demo.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
 
import javax.servlet.http.HttpServletRequest;
 
/**
 * @ClassName: FirstController
 * @Auther: zhangyingqi
 * @Date: 2018/8/23 17:53
 * @Description: 测试页面跳转
 */
@Controller
@RequestMapping(value="/first")
public class FirstController {
 
    @RequestMapping(value="/view")
    public String view(HttpServletRequest request){
        return "/demoPage/firstPage";
    }
}

2.添加测试页面 firstPage.html

<!DOCTYPE html>
<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
   <div>Hello World!</div>
</body>
</html>

3.目录结构

4.到这里启动后就能访问到测试页面了,后面我需要加入统一日志和统一返回格式处理,都是在真实开发环境下必须的,所以我也列出来

在com.springboot.demo.base.controller包下新建BaseController.java,用来提供日志接口以及返回model的固定参数格式

package com.springboot.demo.base.controller;
 
import com.springboot.demo.base.utils.StateParameter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ui.ModelMap;
 
public abstract class BaseController{
 
   protected final String success = StateParameter.SUCCESS;
   protected final String  fail = StateParameter.FAULT;
 
   protected final Logger logger = LoggerFactory.getLogger(this.getClass());
 
   public ModelMap getModelMap(String status,Object data,String msg){
      ModelMap modelMap=new ModelMap();
      modelMap.put("status", status);
      modelMap.put("data", data);
      modelMap.put("msg", msg);
      return modelMap;
      
   }
 
}

在com.springboot.demo.base.utils包下新建StateParameter.java

package com.springboot.demo.base.utils;
 
public class StateParameter {
   public final static String SUCCESS="1";
   public final  static String  FAULT="0";
   public final static String DATA="data";
   public final static String STATE="state";
   
}

目录结构如图:

5.添加简单日志记录,修改控制层代码,加入logger日志记录,添加back方法返回json数据,返回getModelMap传入状态值一般页面js接收用来判断操作成功或失败,data参数下方为null,一般传入想返回的数据内容如对象等,最后一个参数msg为提示信息。

@Controller
@RequestMapping(value="/first")
public class FirstController extends BaseController{
 
    @RequestMapping(value="/view")
    public String view(HttpServletRequest request){
        logger.info("进入测试页面");
        return "/demoPage/firstPage";
    }
 
    @RequestMapping(value="/back", method = RequestMethod.POST)
    @ResponseBody
    public ModelMap back(HttpServletRequest request){
        logger.info("进入json测试页面");
        return getModelMap(StateParameter.SUCCESS, null, "请求成功");
    }
 
}

打开浏览器输入:localhost:8080/first/view 测试页面正常跳转

打开RESTClient浏览器插件测试json数据返回正常(如没有插件可更改请求为get接收,直接在浏览器请求back路径即可返回json数据),输入 http://localhost:8080/first/back 返回我们设定的 msg:请求成功

 

查看控制台输出日志,关于Springboot项目结合AOP和logback日志持久化入库可以查看我的这篇文章。

全文完,2018/8/23

写博文不易,转载请注明出处。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot项目实战,附源码 的相关文章

随机推荐

  • Mixed Reality Toolkit-Unity 开发系列—Input 模块

    在 Mixed Reality Toolkit Unity 开发系列 Sharing 模块 中 我们首次开讲 HoloLens 开发神器 微软原生开发包 Mixed Reality Toolkit Unity 简称 MRTK 并介绍了 Sh
  • 如何拿到半数面试公司Offer——我的Python求职之路

    从八月底开始找工作 短短的一星期多一些 面试了9家公司 拿到5份Offer 可能是因为我所面试的公司都是些创业性的公司吧 不过还是感触良多 因为学习Python的时间还很短 没想到还算比较容易的找到了工作 就把这些天的面试经验和大家分享一下
  • c++ 链表的创建与链表常见操作

    c 链表的创建与链表常见操作 一 链表定义 struct 下面的结构体定义了C 语言中的一种常见的链表节点 包括数据 指针和两种种不同类型的构造函数 struct ListNode int val 存储数据 ListNode next ne
  • java集合框架(一)——框架结构及基础接口

    java util包是一个重要的包 包含许多类和接口 它还包括java的一个功能强大的子系统 集合框架 集合框架是一个复杂接 口和类的层 提供了管理对象组的优化技术 使用集合框架的目的有几个 首先这种框架必须是高性能的 基础集合 动态数组
  • Java String6,7,8,9区别 以及 有哪些方式可以提高性能

    String 对象在jdk不同版本中的实现 String对象是 Java 中使用最频繁的对象之一 所以 Java 公司也在不断的对String对象的实现进行优化 以便提升String对象的性能 看下面这张图 一起了解一下String对象的优
  • 每日一个Python基础练习题

    题目 有四个数字 1 2 3 4 能组成多少个互不相同且无重复数字的三位数 各是多少 可填在百位 十位 个位的数字都是1 2 3 4 组成所有的排列后再去 掉不满足条件的排列 代码 a 100 b 10 c r 1 for a in ran
  • 朗润国际期货技术分析——日内交易图表类型

    一张图表胜过千言万语 你以前听说过这句话 对吗 在日内交易员的世界里 一张图表往往比千言万语更有价值 它不仅告诉我们过去发生了什么 而且告诉我们一个市场在未来可能会做什么 它将继续走高还是走低 它是否处于一个区间 也许一个重大的方向变化或反
  • 2D/3D人体姿态估计 (2D/3D Human Pose Estimation)

    1 基本概念 算法改进入口 网络设计 特征流 损失函数 数据集的重要性 只要有一个好的 针对性的数据集 问题都可以解决 过集成新一代AutoML技术 可降低算法试错成本 人体姿态估计 Human Pose Estimation 是指图像或视
  • 在C语言中,“>>=”;“<<=”;“&=”;“

    C语言中 gt gt 的意思是 右移后赋值 示例 x 8 1000 x gt gt 3 结果为 0001 C语言中 lt lt 的意思是 左移后赋值 示例 x 1 0001 x lt lt 3 结果为 1000 C语言中 的意思是 按位与后
  • pycharm 代码上传到gitee仓库里

    目录 一 准备 二 1 新建仓库 2 commit和push 一 准备 1 在pycharm中安装插件 github git 2 在本地安装git 二 1 新建仓库 首先在pycharm中打开自己的本地项目 如果没有配置过 主界面应该是这样
  • 2023年数学建模B组:利用AHP层次分析法解决实际问题(Matlab)

    目录 利用AHP层次分析法解决实际问题 Matlab实现 介绍 案例背景 步骤1 建立层次结构模型
  • Flutter酷炫的路由动画效果

    现在Flutter的路由效果已经非常不错了 能满足大部分App的需求 但是谁不希望自己的App更酷更炫那 下面介绍几个酷炫的路由动画 其实路由动画的原理很简单 就是重写并继承PageRouterBuilder这个类里的transitions
  • 详解JS前端异步文件加载篇之Async与Defer区别

    目录 同步 异步及推迟的概念 async和defer解决文件加载阻塞问题 在了解async和defer的区别之前 我们需要先了解同步 异步和推迟的概念 同步 异步及推迟的概念 假如现在有一条非常狭隘的胡同 里面有两个人挨着走 那么现在请问后
  • Java集合的两种遍历方式

    Java集合共有两种遍历方式 增强for循环 foreach 迭代器 Main方法 public static void main String args 创建集合 Collection collection new ArrayList 添
  • XXL-JOB分布式任务调度平台配置详解

    XXL JOB是一个分布式任务调度平台 其核心设计目标是开发迅速 学习简单 轻量级 易扩展 个人建议 对于需要定时调度任务开箱即用的小伙伴来说 完全可以学习参考下 本文主要介绍了Xxl Job分布式任务调度框架的配置信息详解 以及路由策略
  • git clone下新项目后运行报错‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

    报错 vue cli service 不是内部或外部命令 也不是可运行的程序 或批处理文件 因为项目里还没有node modules这个包 需要运行npm install 运行后没有报错但是有个警告 npm WARN read shrink
  • MySQL导入导出数据mysqldump,mysql,select into file,load data

    研发人员往往需要从数据库中导出数据 或者将数据导入到数据库中 一些客户端工具提供了简单方便的功能 可以让他们不用使用命令进行操作 但是客户端工具可能会受到环境的限制而不能使用 所以 研发人员有必要掌握一些常用的命令来进行操作数据 MySQL
  • 残差神经网络的研究

    目录 一 ResNet残差神经网络 1 1 提出 1 2 作用 1 3 应用场景 1 4 残差单元的结构 1 4 1 残差网络得名的原因 1 4 2 残差网络可以有效缓解退化现象的原因 1 4 3 数学原理 二 附录 2 1 残差神经网络可
  • GD32F303调试小记(一)之USART(接收中断、接收空闲中断+DMA、发送DMA)

    前言 之前写了GD32F103调试小记 二 之USART 接收中断 接收空闲中断 DMA 发送DMA 一文 这次我们来看看GD32F303的USART是如何配置的 结合这两篇文章 相信大家GD32的USART配置流程会十分熟悉 DMA 能大
  • SpringBoot项目实战,附源码

    SpringBoot2 0笔记 一 SpringBoot基本操作 环境搭建及项目创建 有demo 二 SpringBoot基本操作 使用IDEA打war包发布及测试 三 SpringBoot基本操作 SpringBoot整合SpringDa