您的位置:首页 > 编程语言 > Java开发

SpringBoot快速入门+示图+代码

2020-06-23 04:28 85 查看

微服务与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开发

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: