SpringBoot基础

目录

  • SpringBoot基础
    • 1. 初始化项目
    • 2. 项目目录结构
    • 3. 配置文件
    • 4. 编写项目代码
    • 5. `@Value`的使用

1. 初始化项目

方法1:从SpringBoot官网下载初始化项目:https://start.spring.io/,选择自己需要添加的依赖,下载到本地即可。
方法2:从idea中新建:create new project —>Spring Initializr,然后选择自己需要的依赖即可。
方法3:手工搭建一个SpringBoot项目:新建maven工程—>手工在pom文件里写入基本的相关依赖。

  <!-- 依赖一个parent可以不用写版本 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.4.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 前端thymeleaf模板引擎依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>  <!-- 阿里的数据库连接池依赖 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.18</version> </dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency><!--热部署依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional> <!-- 这个需要为 true 热部署才有效 --><scope>runtime</scope></dependency></dependencies>

2. 项目目录结构

sprboot
│
└─src├─main/java/com/lkj/sprboot│       ├─config│       ├─controller│       ├─service│      ├─dao│      ├─pojo│     └─App.java└─main/resource├─mapper├─static├─templates├─outerproperties.properties└─application.yml

3. 配置文件

SpringBoot支持两种格式的配置文件:application.properties 、application.yml

SpringBoot会从四个位置读取配置文件,且配置文件的优先级依次降低,:

  • file:./config :项目的根目录的config

  • file:./ :项目的根目录

  • classpath:./config : resource/config文件夹目录

  • classpath:./ :resource文件夹目录

    注:上述四个位置中的所有配置文件都会被加载,但是高优先级的配置会覆盖低优先级的配置,并且多个配置文件中的配置会形成互补配置

配置项目启动端口

server:port: 8081  #在8081的端口上运行项目# 配置项目的上下文路径:localhost:8081/sprboot,不配置时默认为 /servlet:context-path: /sprboot 

Spring 基础配置

 spring:# 配置数据源,自动加载数据库连接池datasource:username: rootpassword: root# 时区为GMT+8,其中`+`需要转义为`%2B`url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8# thymeleaf模板引擎不使用缓存thymeleaf:cache: false# 高版本的springboot与之不一样,使用的是data:format:mvc:# controller的入参时间格式配置,对应格式的字符串才能转化为date对象date-format: yyyy-MM-dd# 返回结果有时间数据时配置的时间格式jackson:date-format: yyyy-MM-dd# 时区默认为格林尼治时间,+8是中国时区time-zone: GMT+8# 如果返回的结果字段为null就不返回给前端default-property-inclusion: non_null

多个环境下选择不同的配置文件

在多个环境下可能有多个版本的配置文件:application-dev.yml 、application-prod.yml 、application-test.yml,通过配置或者启动命令加载对应的配置文件。

(application.yml)# 选择使用哪个配置文件,就激活哪个文件# 也可以在启动jar包时添加参数:--spring.profiles.active=dev来指定要加载的配置文件,可以使用此命令搭建分别使用不同端口的项目集群spring:profiles:active: dev   # 表明使用application-dev.yml文件# 也可以使用文档块进行配置分割,使用 “---” 进行文档块的分界线# 使用时只需要将active的值改为对应的id即可---spring:profiles: prod  # 生产环境server:port: 8082servlet:context-path: /sprbootprod---spring:profiles: test  # 测试环境server:port: 8083servlet:context-path: /sprboottest

日志配置

SpringBoot默认使用的Logback作为日志的记录工具,使用slf4j作为日志门面接口。

logging:level:com.lkj.sprboot: debug  # 设置包级别的日志级别ROOT: debug   # 设置全局的日志级别org.springframework: error # 只打印spring包下的加载日志file: mylog.log #配置日志输出的文件名,也可以配置文件名的绝对路径。path: E://logs  #配置日志的路径。如果没有配置logging.file,Spring Boot 将默认使用spring.log作为文件名。

4. 编写项目代码

编写启动类


package com.lkj.sprboot;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.mybatis.spring.annotation.MapperScan;/**@MapperScan 扫描包中的dao接口在application.yml中需要指明mapper.xml文件的位置mybatis:configuration:map-underscore-to-camel-case: true   # 自动映射下划线为驼峰格式mapper-locations: classpath:mapper/*.xml**/
@SpringBootApplication
@MapperScan(value = {"com.lkj.dao"})
public class App {public static void main(String[] args) {SpringApplication.run(App.class,args);}
}

编写controller测试类


package com.lkj.sprboot.controller;import com.lkj.sprboot.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import java.utils.ArrayList;import java.util.Date;@Controller
public class HelloController {@RequestMapping("hello")@ResponseBodypublic String hello(){return "hello";}@RequestMapping("curDate")@ResponseBody// 入参为yyyy-MM-dd时根据application.yml的配置自动转换为日期格式public Date curDate(Date date){ return date;}@RequestMapping("index")public ModelAndView index(){ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("list", new ArrayList<Project>());modelAndView.setViewName("index");return modelAndView;}@RequestMapping("ajaxpost")@ResponseBodypublic User post(@RequestBody User user){ // 将json格式的数据封装成pojoSystem.out.println(user);return user;}
}

前端访问代码


// alljs.js文件// 通过jquery的异步请求发送json格式的数据$.ajax({url: "/ajaxpost",type: "POST",// 发送json格式的数据需要设置消息格式contentType: "application/json;charset=utf-8",// 发送json时需要发送字符串,否则会将json对象转换为form表单格式数据data: JSON.stringify({ "name" : "lili", "birthday" : "1997-03-09" }),// 返回结果时建议返回的数据格式dataType : "json",success :function(result){$("#na").html(result.name);$("#pa").html(result.age);}})

<!--前端index.html界面-->
<!DOCTYPE html>
<!-- 添加thymeleaf的命名空间 -->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Title</title><!-- 引入css文件 --><link rel="stylesheet" type="text/css" th:href="@{/css/bootstrap.min.css}"><link rel="stylesheet" type="text/css" th:href="@{/css/allcss.css}"><!-- 引入js脚本 --><script type="text/javascript" th:src="@{/js/jquery-3.4.1.min.js}"></script><script type="text/javascript" th:src="@{/js/alljs.js}"></script>
</head>
<body>
<div class="container center-vert"><div class="row center-block"><div class="col-lg-4 col-lg-offset-4"><table class="table table-striped"><tr ><td><label for="na">姓名:</label><span id="na"></span></td><td><label for="na">年龄:</label><span id="pa"></span></td></tr><tr th:each="item:${list}"><td>项目名:</td><td th:id="${item.id}"></td></tr></table></div></div>
</div>
</body>
</html>

在thymeleaf的模板中需要编写js脚本并且需要从model中获取值时可以使用 th:inline=“javascript” 内联js代码。


<script type="text/javascript" th:inline="javascript">// 获取每个project对应的名字[[${list}]].forEach(function(item){transferName(item.projectId,item.id);})// 转换projectid为projectnamefunction transferName(projectId,id){var td = $("#"+id+"");var formdata = new FormData();formdata.append("projectId",projectId);// 从后端查询项目名并修改table的数据$.ajax({url : '/getPN',type : 'post',data : formdata,dataType : 'json',contentType : false, processData : false,success : function(result) {if (result.code == 200) {//成功返回,设置项目名称td.html(result.projectName);} else {//状态失败alert("加载异常")}}})}</script>

5. @Value的使用

 application.yml中配置的变量值server:port: 8081address:beijingshagnhaijwt:name: lkjaddress:- beijing- shanghai

建立配置类从外部配置文件注入值 @PropertySource

package com.lkj.sprboot.config;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.PropertySource;import org.springframework.stereotype.Component;@Component// @PropertySource会将指定的配置文件中的变量注入到自己的属性中去,属性名要一一对应@PropertySource("outerproperties.properties") //加载外部配置public class OuterPropertiesConfig {@Value("${hello}")private String hello;public void setHello(String hello) {this.hello = hello;}public String getHello() {return hello;}}

建立配置类从application.yml中获取一组有前缀的值

 package com.lkj.sprboot.config;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Configuration;import org.springframework.stereotype.Component;import java.util.List;@Component// @ConfiturationProperties 会将配置文件中指定前缀的属性自动注入到相应的类属性中@ConfigurationProperties(prefix = "jwt")public class PropertiesConfig {private String name;private List<String> address;public void setName(String name) {this.name = name;}public void setAddress(List<String> address) {this.address = address;}public String getName() {return name;}public List<String> getAddress() {return address;}}

Spring Boot Configuration Annotation Processor not configured 问题解决

使用@ConfigurationProperties注解后,idea会报Spring Boot Configuration Annotation Processor not configured问题

原因:没有配置 Spring Boot配置注解执行器,注解执行器配置后,当定义的类中已经使用@ConfigurationProperties注解修饰后,在配置文件中对前缀进行赋值时,application.yml 可以提供该类字段的自动提示。pom文件中加入以下依赖解决:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>

从配置文件中直接读取值

@Value("${address}")private List<String> address;@Value("${server.port}")private Integer port;

新手教程系列——SpringBoot基础相关推荐

  1. OSG for Android新手教程系列(三)——HelloWorld,第一个示例

    在上一篇教程中,我对OSG for Android的项目配置进行了讲解.在本篇教程中,我将通过一个最简单的示例,来讲解如何在Android项目中使用OSG.网上几乎所有的第一个示例,用的都是OSG库中 ...

  2. 【精】合集 zbrush 10种风格女性角色建模 新手教程,zbrush基础教程 案例讲解

    [精]合集 zbrush女性角色建模 新手教程,zbrush基础教程 案例讲解 这里是游戏模型爱好者的聚集地, [戳我立即进入]企鹅建模圈子,提供3Dmax.Zbrush.Maya.次时代等游戏建模软 ...

  3. OSG for Android新手教程系列(四)——JNI与NDK的使用

    上一篇教程中,我针对一个最简单的HelloWorld示例进行了详细讲解,从宏观上讲明了OSG for Android项目的开发方法.这里给出链接:http://blog.csdn.net/dongzh ...

  4. python split函数 空格_最易懂的Python新手教程:从基础语法到代码详解

    导读:本文立足基础,讲解Python和PyCharm的安装,及Python最简单的语法基础和爬虫技术中所需的Python语法. 作者:罗攀 蒋仟 如需转载请联系华章科技 本文涉及的主要知识点如下: P ...

  5. CocosCreator新手教程——cc.Node基础常用接口(API)

    CocosCreator开发笔记--cc.Node基础常用接口(API) 一.常用属性 cc.Class({extends: cc.Component,properties: {sprite: {de ...

  6. 从零开始实现自己的Kalimba——Cocos Creator新手教程系列(一)使用瓦片图Tiledmap设计游戏地图

    瓦片图Tiledmap可能是很多2d游戏开发者的偏爱,本节就Cocos Creator如何使用瓦片图进行详细的讲解. Tiled地图编辑器的下载安装不再赘述.下面介绍如何使用地图编辑器. 创建新地图. ...

  7. Spring Boot教程系列 ImportNew

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Impo ...

  8. matlab 积分进阶教程,最适合小白的matlab教程系列_进阶系列二之微积分

    微积分篇 更多文章参考 符号变量 极限问题 求导数 求导数----偏导数 积分--符号解 积分数值解 多重积分 级数求和 泰勒级数展开 常微分方程 更多文章参考 最适合小白的matlab教程系列_基础 ...

  9. 扩展卡尔曼滤波新手教程(二)----中文版

    扩展卡尔曼滤波新手教程(二) 说明:本文内容翻译自外文网站The Extended Kalman Filter: An Interactive Tutorial for Non-Experts,仅供学 ...

最新文章

  1. [译]Godot系列教程一 - 场景与节点
  2. 【计算机视觉】EmguCV学习笔记(3)ROI区域图像叠加以及初级图像混合
  3. Hinton获2021迪克森科学奖:他改变了AI,改变了世界
  4. wp7——sqlite数据库操作 from:http://blog.csdn.net/wp_lijin/article/details/7370790
  5. 表迁移工具的选型-复制ibd的方法-传输表空间
  6. 【二叉树】【144. 二叉树的前序遍历】【中等】
  7. asp.net faq: 在html文件中,用js获取session
  8. Nginx安装环境配置
  9. 数据查询(1)-简单查询(芮)
  10. LeetCode 02.两数相加
  11. 持有至少百万美元钱包本周增至66,540,增长了150%
  12. 蓝桥杯 ADV-63 算法提高 利息计算
  13. 你我贷CTO冯炯:互联网金融的P2P+O2O怎么做?
  14. C11语言比C99,C11相比C99的变化
  15. 配置vhost、https、重定向
  16. 逆流而上的你,送给现在的你
  17. WPS自动生成目录。
  18. 为什么现在大多数服务器使用linux系统区别的一些总结
  19. 为什么使用阿里普惠体没效果
  20. Leetcode#183. Customers Who Never Order

热门文章

  1. 微信浏览器是什么内核,以及它的兼容性。
  2. popper跟随鼠标在容器内移动
  3. linux连接小米随身wifi密码忘记了,小米路由器app管理密码忘记了怎么办?
  4. 车型SUV、CRV和HRV、MPV是什么意思?
  5. 京东APP技术解密:移动端秒级配置触达平台-Switchquery
  6. 关于斐波那契与三角形
  7. vue-element-admin项目如何获取并且成功安装依赖
  8. Python基础 | Anaconda环境下第三方库的安装
  9. flash动画和传统动画的区别
  10. 一百人研发团队的难题:研发管理、绩效考核、组织文化和OKR