新手教程系列——SpringBoot基础
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基础相关推荐
- OSG for Android新手教程系列(三)——HelloWorld,第一个示例
在上一篇教程中,我对OSG for Android的项目配置进行了讲解.在本篇教程中,我将通过一个最简单的示例,来讲解如何在Android项目中使用OSG.网上几乎所有的第一个示例,用的都是OSG库中 ...
- 【精】合集 zbrush 10种风格女性角色建模 新手教程,zbrush基础教程 案例讲解
[精]合集 zbrush女性角色建模 新手教程,zbrush基础教程 案例讲解 这里是游戏模型爱好者的聚集地, [戳我立即进入]企鹅建模圈子,提供3Dmax.Zbrush.Maya.次时代等游戏建模软 ...
- OSG for Android新手教程系列(四)——JNI与NDK的使用
上一篇教程中,我针对一个最简单的HelloWorld示例进行了详细讲解,从宏观上讲明了OSG for Android项目的开发方法.这里给出链接:http://blog.csdn.net/dongzh ...
- python split函数 空格_最易懂的Python新手教程:从基础语法到代码详解
导读:本文立足基础,讲解Python和PyCharm的安装,及Python最简单的语法基础和爬虫技术中所需的Python语法. 作者:罗攀 蒋仟 如需转载请联系华章科技 本文涉及的主要知识点如下: P ...
- CocosCreator新手教程——cc.Node基础常用接口(API)
CocosCreator开发笔记--cc.Node基础常用接口(API) 一.常用属性 cc.Class({extends: cc.Component,properties: {sprite: {de ...
- 从零开始实现自己的Kalimba——Cocos Creator新手教程系列(一)使用瓦片图Tiledmap设计游戏地图
瓦片图Tiledmap可能是很多2d游戏开发者的偏爱,本节就Cocos Creator如何使用瓦片图进行详细的讲解. Tiled地图编辑器的下载安装不再赘述.下面介绍如何使用地图编辑器. 创建新地图. ...
- Spring Boot教程系列 ImportNew
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Impo ...
- matlab 积分进阶教程,最适合小白的matlab教程系列_进阶系列二之微积分
微积分篇 更多文章参考 符号变量 极限问题 求导数 求导数----偏导数 积分--符号解 积分数值解 多重积分 级数求和 泰勒级数展开 常微分方程 更多文章参考 最适合小白的matlab教程系列_基础 ...
- 扩展卡尔曼滤波新手教程(二)----中文版
扩展卡尔曼滤波新手教程(二) 说明:本文内容翻译自外文网站The Extended Kalman Filter: An Interactive Tutorial for Non-Experts,仅供学 ...
最新文章
- [译]Godot系列教程一 - 场景与节点
- 【计算机视觉】EmguCV学习笔记(3)ROI区域图像叠加以及初级图像混合
- Hinton获2021迪克森科学奖:他改变了AI,改变了世界
- wp7——sqlite数据库操作 from:http://blog.csdn.net/wp_lijin/article/details/7370790
- 表迁移工具的选型-复制ibd的方法-传输表空间
- 【二叉树】【144. 二叉树的前序遍历】【中等】
- asp.net faq: 在html文件中,用js获取session
- Nginx安装环境配置
- 数据查询(1)-简单查询(芮)
- LeetCode 02.两数相加
- 持有至少百万美元钱包本周增至66,540,增长了150%
- 蓝桥杯 ADV-63 算法提高 利息计算
- 你我贷CTO冯炯:互联网金融的P2P+O2O怎么做?
- C11语言比C99,C11相比C99的变化
- 配置vhost、https、重定向
- 逆流而上的你,送给现在的你
- WPS自动生成目录。
- 为什么现在大多数服务器使用linux系统区别的一些总结
- 为什么使用阿里普惠体没效果
- Leetcode#183. Customers Who Never Order