SpringBoot快速入门+示图+代码
微服务与springboot
微服务
一个项目可以由多个小型服务构成(微服务)
SpringBoot
a.快速开发微服务模块
b.简化j2ee开发
c.整个Spring技术栈的整合(整合SpringMvc Spring)
d.整个j2ee技术的整合(整合mybatis redis)
第一个SpringBoot程序
目录结构
目录结构resource:
static:静态资源(js css 图片 音频 视频)
template:模板文件(模板引擎freemarker,thymeleaf;默认不支持jsp)。
application.properties:配置文件。
springboot内置了tomcat,并且不需要打成war包在执行。
可以在application.properties中对端口号等服务信息进行配置。
springboot将各个应用/三方框架设置成了一个个‘场景’stater,要用哪个只需要引入哪个场景即可(springboot会自动注入需要的依赖)。
- 主配置类
package com.bwl.base; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * 配置类:扫描本包及其子包 * @author zhaopan * */ @SpringBootApplication //springboot的主配置类 public class SpringPro1Application { public static void main(String[] args) { SpringApplication.run(SpringPro1Application.class, args); } }
- controller
package com.bwl.base.contruller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller //是一个控制器 @ResponseBody //返回值以json的形式 public class UserController { @RequestMapping("/test") public String test() { return "你好"; } }
-
默认端口:8080
-
applicadtion.properties中配置端口:
server.port=8888
- 测试结果
自动装配源码解读
自动装配原理
配置文件及yml使用
application.yml
- 实体类User.java
package com.bwl.base.entity; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component //将此javabean放入到spring容器 @ConfigurationProperties(prefix = "user") //yml中配置属性 public class User { private String name; private int id; private Date date; //集合 private Map<String,String> map; //集合 private List<String> list; //数组 private String[] skills; //对象类型 private Pet pet; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public Map<String, String> getMap() { return map; } public void setMap(Map<String, String> map) { this.map = map; } public List<String> getList() { return list; } public void setList(List<String> list) { this.list = list; } public String[] getSkills() { return skills; } public void setSkills(String[] skills) { this.skills = skills; } public Pet getPet() { return pet; } public void setPet(Pet pet) { this.pet = pet; } @Override public String toString() { return "User [name=" + name + ", id=" + id + ", date=" + date + ", map=" + map + ", list=" + list + ", skills=" + Arrays.toString(skills) + ", pet=" + pet + "]"; } }
- User类中的Pet类Pet.java
package com.bwl.base.entity; public class Pet { private String name; private String age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } @Override public String toString() { return "Pet [name=" + name + ", age=" + age + "]"; } }
- application.yml
server: port: 8888 user: name: zs id: 1 date: 2020/12/12 map: {province: 陕西省,city: 西安市, zone: 莲湖区} list: - 足球 - 唱歌 - 敲代码 skills: - HTML - java - spring pet: name: 哈士奇 age: 23
- 单元测试SpringPro1ApplicationTests.java
package com.bwl.base; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import com.bwl.base.entity.User; @SpringBootTest class SpringPro1ApplicationTests { @Autowired User user; @Test void contextLoads() { System.out.println(user); } }
- 结果
application.yml中 ‘ ’ 和 “ ” 问题
- 加 ‘ ’ 和 “ ”
server: port: 8888 user: name: zs id: 1 date: 2020/12/12 map: {province: "陕西省",city: '西安市', zone: 莲湖区} list: - 足球 - 唱歌 - 敲代码 skills: - HTML - java - spring pet: name: 哈士奇 age: 23
- 结果同上
application.yml中 ‘ ’ 和 “ ” ,\n 问题
server: port: 8888 user: name: zs id: 1 date: 2020/12/12 map: {province: "陕\n西省",city: '西安\n市', zone: 莲\n湖区} list: - 足球 - 唱歌 - 敲代码 skills: - HTML - java - spring pet: name: 哈士奇 age: 23
- 结果
只加 ‘ ’ 和 “ ” :等于没加。
**加了 ‘ ’ 和 “ ” ,\n:对于 ‘ ’和不加,\n失效;对于 " " :\n换行。 **
application.yml中另一种写法
server: port: 8888 user: name: zs id: 1 date: 2020/12/12 map: province: 陕西省 city: 西安市 zone: 未央区 # {province: "陕\n西省",city: '西安\n市', zone: 莲\n湖区} 行内写法 list: [足球1,唱歌1,敲代码1] # - 足球 # - 唱歌 # - 敲代码 skills: [HTML1,java1,spring1] # - HTML # - java # - spring pet: name: 哈士奇 age: 23
application.yml中对象的另一种写法
server: port: 8888 user: name: zs id: 1 date: 2020/12/12 map: province: 陕西省 city: 西安市 zone: 未央区 # {province: "陕\n西省",city: '西安\n市', zone: 莲\n湖区} list: [足球1,唱歌1,敲代码1] # - 足球 # - 唱歌 # - 敲代码 skills: [HTML1,java1,spring1] # - HTML # - java # - spring pet: {name: 哈士奇11,age: 1} #行内写法 # name: 哈士奇 # age: 23
[ ]可以删除。
{ }不可以删除。
application.properties中配置
user.name=zs user.id=1
yaml注值方式
@ConfigurationProperties和@Value区别
说明
松散语法:userName等价与user-name
SpEL(SpringEL):@Value("${user.userName}")
JSR303数据校验:实体类上加@Validate(开启数据校验),属性上加:如@Email
@PropertySource
springboot默认加载application.properties和application.yml
在实体类上加 @PropertySource(value={“classpath:conf.properties”});注意:这种方式只能加载.properties文件,不能加载.yml文件
@ImportResource和配置
@ImportResource
说明:在springboot中不需要配置如…等(默认已经配置)。
如果配置了,怎么办?
在主配置类上加:@ImportResource(locations={“classpath:spring.xml”})
不推荐手写配置文件
推荐使用注解配置
package com.bwl.base.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.bwl.base.dao.UserDao; import com.bwl.base.serviceimpl.UserServiceImpl; /** * 配置类 * xml中配置 * <bean id="" class=""> * * * </bean> * @author zhaopan * */ @Configuration //配置类 纳入spring容器 public class AppConfig { @Bean public UserServiceImpl testConfig() {// <bean id=方法名 //测试中: .getBean("方法名"); UserServiceImpl us=new UserServiceImpl();//<property name="ud" ref="userDao"></property> UserDao ud=new UserDao();// us.setUd(ud);// return us;// class="....UserServiceImpl"></bean> //<bean id="userDao" class=".....UserDao"></bean> } }
配置
.xml配置和注解配置图例
- 注解配置代码
package com.bwl.base.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.bwl.base.dao.UserDao; import com.bwl.base.serviceimpl.UserServiceImpl; /** * 配置类 * xml中配置 * <bean id="" class=""> * * * </bean> * @author zhaopan * */ @Configuration //配置类 纳入spring容器 public class AppConfig { @Bean public UserServiceImpl testConfig() {// <bean id=方法名 //测试中: .getBean("方法名"); UserServiceImpl us=new UserServiceImpl();//<property name="ud" ref="userDao"></property> UserDao ud=new UserDao();// us.setUd(ud);// return us;// class="....UserServiceImpl"></bean> //<bean id="userDao" class=".....UserDao"></bean> } }
- 随机占位符
yml中用法:
user: age: ${random.int}
.properties中用法:
user.age=${random.int}
多环境设置及环境切换
- 图示
多环境切换方式1
- springboot默认读取application.properties文件
默认读取:application.properties
server.port=8888
开发环境:application-dev.properties
server.po rt=8882
测试环境:applicatin-test.properties
server.port=8883
如果想使用开发环境,则在application.properties中添加:spring.profiles.active=dev。
如果想使用测试环境,也是如此:spring.profiles.active=dev
server.port=8888spring.profiles.active=dev #spring.profiles.active=dev
多环境切换方式2
application.yml
server: port: 8888 #指定环境 spring: profiles: active: dev #active: test --- server: port: 8882 spring: profiles: dev --- server: port: 8883 spring: profiles: test
动态指定切换环境
- 运行参数指定
i.sts:Run Configuration - Argument - program Argument 输入:–spring.profiles.active=dev
- 命令行方式
ii.先打成jar包–dos命令:java -jar …jar --spring.profiles.active=dev
在虚拟机中指定
iii.Run Configuration - Argument -VM:-Dspring.profiles.active=dev
配置文件位置
两种配置文件
springboot默认读取的配置文件是application.properties和application.yml。
application.properties优先级高,如果冲突,application.properties生效,不冲突则互补。
配置文件的位置
application.properties和application.yml可以存在以下4个路径:
(1)项目的根目录/config
(2)项目的根目录
(3)src/java/source/config
(4)src/java/source
如果某项配置冲突,则优先级从上往下。如果不冲突,则互补结合使用
外部配置及加载顺序
场景1
- 场景1:项目已经成为jar包,已经实施,此时需要修改配置(大量改),只需引入外部配置文件(补救)。
在项目Run configuration,arguments:
–spring.config.location=D:/application=文件的路径+文件名(带后缀)
注意:如果同一个配置同时存在与内部配置文件和外部配置文件,则外部>内部
pro.jar 运行
外部配置文件
通过命令行 调用外部配置文件
java -jar 项目.jar --spring.config.location=外部配置文件路径+文件名(带后缀)
场景2
- 场景2:项目已经成为jar包,已经实施,此时需要修改配置(少量改),通过运行参数(补救)
在项目Run configuration,arguments:–server.port=8881
优先级总结:命令参数(调用外部的配置文件>运行参数)>内部文件(.properties>yml):见官网
SpringBoot日志处理
日志框架
- 日志框架:JCL, JUL, jboss-logging,logback,log4j,log4j2,slf4j。
- springboot默认选用slf4j,logback。
- springboot默认配置好了日志,直接使用。
- 日志级别:TRANCE<DEBUG<INFO<WARN<ERROR<FATAL<OFF(见LoggingLevel.java)。
- springboot默认级别是INFO。
- 自定义指定时,在配置文件中加:logging.level.配置类包名=级别
- 日志信息输出到文件,在配置文件中加:logging.file=文件名.log(项目根目录)或logging.file=目录+文件名+log 或 logging.path=D:/log/(默认文件名是spring.log)
日志显示格式
- a.输出到控制台
logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
%d:日期时间
%thread:线程名
%-5level:日志级别,-5表示从左显示5个字符宽度
%logger:日志长度
%msg:日志消息
%n:换行
- b.日志输出到文件
logging.pattern.file=%d{yyyy/MM/dd-HH:mm:ss}** [%thread] **%-5level ** %logger- ** %msg ** %n
处理Web静态资源
处理静态资源
概述:动态web工程项目,将jquery,bootstrap…放到webapp目录下。
在springboot中,直接以jar的形式将这些静态资源引入pom.xml中
欢迎页:在static中:index.html是欢迎页
网站logo图片固定名字:favicon.ico
做法:只需将图片放到静态资源目录下。
指定静态资源目录
spring.resources.static-locations=classpath:/res/,classpath:/pub/
特别说明:指定之后,原来约定的静态资源目录无效
Configuration源码
引入thymeleaf引擎
Thymeleaf使用入门
Thymeleaf使用示例
整合外置tomcat开发
- spring-boot快速入门实践代码
- spring boot快速入门搭建输出hello world
- 1、Spring Boot快速入门
- Spring Boot 快速入门
- 笔记70 Spring Boot快速入门(八)(重要)
- SpringBoot [ 1.快速入门 ]
- Springboot快速入门笔记
- PHP快速入门java系列:快速搭建一个spring boot项目输出Hello Word(三)
- springboot快速入门
- SpringBoot教程 | 第一篇:快速入门
- Spring Boot快速入门
- Spring Boot + MyBatis 快速入门
- Spring Boot学习笔记1:快速入门
- spring boot 快速入门链接
- Spring Boot快速入门
- Spring Boot 2.0 的快速入门(图文教程)
- Spring Boot RabbitMQ快速入门 (2)
- Spring Boot 快速入门
- Spring Boot快速入门
- Spring Boot快速入门