SpringBoot看这一篇就够了

SpringBoot学习-入门篇

spring的优点:

1.创建独立的spring应用

2.内嵌web服务器

3.自动start依赖,简化构建配置

4.自动配置Spring以及第三方功能

5.提供生产级别的监控,健康检查及外部化配置

6.无代码生成,无序编写Xml

spring缺点:

1.版本更新快
2.封装太深,原理复杂

微服务:

微服务是一种架构风格,将一个应用拆分为一组小型服务,每个服务独立部署和升级,服务器之间使用轻量级http交互,服务围绕业务功能拆分。去中心化,服务自治,服务可以使用不同的语言和不同的存储技术(不局限于语言),因此催生了分布式

分布式的困难:

  1. 远程调用

  2. 服务发现

  3. 负载均衡

  4. 服务容器

  5. 配置管理

  6. 服务监控

  7. 链路追踪

  8. 日志管理

分布式的解决:

Springboot + SpringColud

1.springBoot将应用分成了各种某块

2.springClound将各个某块互联互调起来

3.springCloundDataFlow将他们做成数据流

在这里插入图片描述
1.springBoot将应用分成了各种某块

2.springClound将各个某块互联互调起来

3.springCloundDataFlow将他们做成数据流

入门:

1.系统要求:

  • jdk java8 兼容 jdk java14
  • maben 3.3+
  • idea 2019.1.2

查看自己的java 版本号: java - version

查看自己 maven的版本号: mvn -v

2:创建springboot的两种方式:

方式一:
在这里插入图片描述
方式二:
1.在xml文件配置:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
        <relativePath/>
</parent>
 <!--启动器-->
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
</dependency>

2.在一个类上添加:@SpringBootApplication
在这里插入图片描述
3.编写一个controller,进行访问

注意:

  • 是运行有@SpringBootApplication注解的类
  • 默认的访问端口号是8080

修改端口号:
通过创建application.properties文件。
在这里插入图片描述
自动装配原理:

1.springBoot先加载所有的自动装配类127个,例如:xxxAtuoConfigratuion
2.每个自动:配置类按照条件进行生效,默认都会绑定配置文件指定的值
,所有的值都是从xxxProperties里面拿( xxxProperties和配置文件进行了绑定)
3.生效的配置类就会给容器中装配很多组件
4.只要容器中有这些组件,相当于这些功能就有了
5.定制化配置
5.1用户直接自己@Bean替换底层的组件
5.2用户看这个组件是获取的配置文件是什么值

xxAutoConfiguration(导入所有的自动配置类)–>组件(按需加载了所有的组件)—>xxxProperties里面拿值(组件从我们properties中拿值)----》application.properties(Properties的绑定的值就是我们Application中的值)

*SpringBoot核心功能

3:配置文件:

1.1properties
键值对(key = value)的形式
在这里插入图片描述

1.2yaml
简介:
YAML 是 “YAML Ain’t Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。

基本语法:

  1. 大小写敏感
  2. key : value 的格式,中间有空格
  3. 所经不允许用tab,只允许用空格
  4. #'表示注释

在这里插入图片描述
注意:当没有用空格隔开时会,这一行会变绿
在这里插入图片描述
常用的一些写法:

# properties表达式 k-v
# yaml 普通的表达式 key-value
server:
  port: 8081

# 对象
student:
  name: xx
  age: 12

# 数组行内写法
student1: {name: kk,age: 23}

#数组:
pets:
  - cat
  - dog
  - big

# 数组行内写法:
pets1: [cat,dog,pig]


#给Person赋值
person:
  #也可也使用el表达式
  name: ${random.uuid}
  age: 13
  happy: true
  #注意日期格式必须年月日
  birthday: 2019/9/20
  hello: happy
  #map是一个键值对,是一个对象
  maps: {k1: v1,k2: v2}
  #list集合
  lists:
    - code
    - music
  #类
  dog:
    name: ${person.hello:hello}_旺财
    age: 12

4:Web开发

1.简单功能分析:

1.1静态资源目录
只要静态资源放在类路径下: called /static (or /public or /resources or / META-INF/resources
访问 : 当前项目根路径/ + 静态资源名

原理:静态映射/**
请求进来,先去找contorller 看能不能处理。不能处理的所有请求又都交给静态资源处理器来处理,也不能处理就报404错误

所以,当静态资源名和controller访问名相同时,显示的内容是controller中处理的结果

1.2修改默认的静态资源路径:

spring:
  mvc:
    #静态资源的访问路径的前缀
    static-path-pattern: /res/**
  resources:
    #修改默认的静态资源路径
    static-locations: [classpath:/haha/]

#禁用所有的静态资源
  resources:
    add-mappings: false

当前项目 + static-path-pattern的值+ 静态资源名

1.3文件加载的顺序:从上到下

1.file:./config/项目下的config包中的文件
2:file:…/项目下的文件
3.classpath:/config/resouce包下的config包下的文件
4.classpath:/resouce包下的文件

注意:resource下的所有文件默认都是根目录下的(相当于是classpath下的)

1.4欢迎页面支持

  • 默认是静态资源中的 index.html
  • cntroller能处理/index请求
    —要想修改的话,可以通过配置静态资源路径
    —但是不可以配置静态资源的访问前缀。否则index.html不能被默认访问
    在这里插入图片描述

1.5自定义Favicon
直接将图片名为Favicon.jpg放入静态资源下面
注意:这一段配置会导致 Favicon失效

在这里插入图片描述

1.6静态资源配置原理

  • spring启动默认加载 xxxAutoConfigration类(自动配置类)
  • springMVC的自动配置类 WebMvcAutoConfigration,要生效,下面的条件要满足
@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class,
		ValidationAutoConfiguration.class })

WebMvcAutoConfigration 类的位置

在这里插入图片描述 下的在这里插入图片描述(这里面包括了所有的自动配置类) 下的 在这里插入图片描述

下的 Web --> Sevlet

  • 给容器配了什么
	@Configuration(proxyBeanMethods = false)
	@Import(EnableWebMvcConfiguration.class)
	@EnableConfigurationProperties({ WebMvcProperties.class,
			org.springframework.boot.autoconfigure.web.ResourceProperties.class, WebProperties.class })
	@Order(0)
  • 配置文件的相关属性和xxx进行了绑定。WebMvcProperties.class= spring.mvc,.ResourceProperties.class=spring.resources

拓展:
1.当一个配置类只有一个有参构造器的时候:

	//有参构造器所有参数的值都会从容器中确定
	//ResourceProperties resourceProperties;获取和spring.resources绑定的所有的值的对象
	//WebMvcProperties mvcProperties 获取和spring.mvc绑定的所有的值的对象
	//ListableBeanFactory beanFactory Spring的beanFactory
	//HttpMessageConverters 找到所有的HttpMessageConverters
	//ResourceHandlerRegistrationCustomizer 找到 资源处理器的自定义器。=========
	//DispatcherServletPath  
	//ServletRegistrationBean   给应用注册Servlet、Filter....
	public WebMvcAutoConfigurationAdapter(ResourceProperties resourceProperties, WebMvcProperties mvcProperties,
				ListableBeanFactory beanFactory, ObjectProvider<HttpMessageConverters> messageConvertersProvider,
				ObjectProvider<ResourceHandlerRegistrationCustomizer> resourceHandlerRegistrationCustomizerProvider,
				ObjectProvider<DispatcherServletPath> dispatcherServletPath,
				ObjectProvider<ServletRegistrationBean<?>> servletRegistrations) {
			this.resourceProperties = resourceProperties;
			this.mvcProperties = mvcProperties;
			this.beanFactory = beanFactory;
			this.messageConvertersProvider = messageConvertersProvider;
			this.resourceHandlerRegistrationCustomizer = resourceHandlerRegistrationCustomizerProvider.getIfAvailable();
			this.dispatcherServletPath = dispatcherServletPath;
			this.servletRegistrations = servletRegistrations;
		}

2.资源处理器的默认配置规则

@Override
		protected void addResourceHandlers(ResourceHandlerRegistry registry) {
			super.addResourceHandlers(registry);
			if (!this.resourceProperties.isAddMappings()) {
				logger.debug("Default resource handling disabled");
				return;
			}
			ServletContext servletContext = getServletContext();
			addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
			addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
				registration.addResourceLocations(this.resourceProperties.getStaticLocations());
				if (servletContext != null) {
					registration.addResourceLocations(new ServletContextResource(servletContext, SERVLET_LOCATION));
				}
			});
		}

取消静态资源

spring:
#  mvc:
#    static-path-pattern: /res/**

  resources:
    add-mappings: false   禁用所有静态资源规则

静态资源默认的四个值

	private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/",
				"classpath:/resources/", "classpath:/static/", "classpath:/public/" };

3.欢迎页面的处理规则

@Bean
		public WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext,
				FormattingConversionService mvcConversionService, ResourceUrlProvider mvcResourceUrlProvider) {
			WelcomePageHandlerMapping welcomePageHandlerMapping = new WelcomePageHandlerMapping(
					new TemplateAvailabilityProviders(applicationContext), applicationContext, getWelcomePage(),
					this.mvcProperties.getStaticPathPattern());
			welcomePageHandlerMapping.setInterceptors(getInterceptors(mvcConversionService, mvcResourceUrlProvider));
			welcomePageHandlerMapping.setCorsConfigurations(getCorsConfigurations());
			return welcomePageHandlerMapping;
		}

SpringBoot 整合 Swagger3

第一步:
导入swagger3的maven坐标

  		 <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
       	 </dependency>

第二步:
在主程序类上开启 @EnableOpenApi 注解


@SpringBootApplication
@EnableOpenApi
@MapperScan("com.baidu.mapper")
public class SpringBootStarter {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootStarter.class, args);
    }
}

第三步:
配置Config

@Configuration
public class SwaggerConfig implements WebMvcConfigurer {
    @Bean
    public Docket createRestApi() {

        return new Docket(DocumentationType.OAS_30)

                .apiInfo(apiInfo())

                .select()

                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))

                .paths(PathSelectors.any())

                .build();

    }


    private ApiInfo apiInfo() {

        return new ApiInfoBuilder()

                .title("Swagger3接口文档")

                .description("更多请咨询服务开发者XXX")

                .contact(new Contact("作者", "作者地址", "作者邮箱"))

                .version("1.0")

                .build();

    }


}

第四步:
在对应的接口配置注解,这里只有一部分

    @PostMapping("login")
    // 这个接口的作用
    @ApiOperation("登录接口")
    // 解释参数类型
    @ApiImplicitParams({
            @ApiImplicitParam(name = "username", value = "账号",dataType = "string",example = "xiaoming"),
            @ApiImplicitParam(name = "password", value = "密码",dataType = "string",example = "123456")
    })
    // 响应结果提示
    @ApiResponses({
            @ApiResponse(code = 200,message = "登陆成功"),
            @ApiResponse(code = 201,message = "用户名或密码错误"),
            @ApiResponse(code = 404,message = "请求路径错误")
    })
    public CR login(@RequestBody LoginUserReq user) {
        String username = user.getUsername();
        String password = user.getPassword();

        if (ObjectUtils.isEmpty(username) || ObjectUtils.isEmpty(password)) {
            return CR.error("用户名或者密码错误");
        }
        T_user dbUser = t_userService.queryUserByUsername(username);
        if(ObjectUtils.isEmpty(dbUser)){
            return CR.error("用户名或者密码错误");
        }

        if (!dbUser.getPassword().equals(user.getPassword())) {
            return CR.error("用户名或者密码错误");
        }
        return CR.ok("登陆成功");
    }

第五步:
访问地址: http://localhost:8888/swagger-ui/
注意: 根据自的端口号来访问

访问结果:
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值