SpringBoot框架

一、SpringBoot简介

1.1 SpringBoot是什么

随着动态语言的流行(Ruby、Groovy、Scala、Node.js),Java的开发显得格外的笨重:繁多的配置、低下的开发效率、复杂的部署流程以及第三方技术集成难度大。在上述环境下, Springboot应运而生。它使用“约定优于配置"(项目中存在大量的配置,此外还内置一个习惯性的配置,让你无须手动进行配置)的理念让你的项目快速运行起来。使用SpringBoot很容 易创建一个独立运行(运行jar,内嵌servlet容器)、准生产级别的基于Spring框架的项目,使用SpringBoot你可以不用或者只需要很少的Spring配置。

1.2 SpringBoot的特点

  • 独立运行的Spring项目
    Spring Boot可以以jar包的形式独立运行,运行一个Spring Boot项目只需要通过java -jar xx.jar。

  • 内置Servlet容器
    Spring Boot可选择内嵌Tomcat、Jetty或者Undertow,这样无须以war包形式部署。

  • 提供starter简化maven配置(起步依赖)
    Spring提供了一系列的starter pom来简化maven依赖加载,例如:当你使用了spring-boot-starter-web时,会自动加入相关依赖,无需你手动一个一个的添加坐标依赖。(其实就是将具备某种功能的坐标打包在一起)

  • 自动配置Spring
    Spring Boot会根据在类路径中的jar包、类,为jar包里的类自动配置Bean,这样会极大地减少我们要使用的配置。当然,Spring Boot只是考虑了大多数的开发场景,并不是所有场景,若在实际开发中,我们需要自动配置bean,而Spring Boot没 有提供支持,则可以自定义自动配置。

  • 无代码生成和xml配置
    Spring Boot的神奇的不是借助于代码生成来实现的,而是通过条件注解来实现的,这是Spring 4.x提供的新特性, Spring 4.x提倡使用java配置和注解配置相结合,而Spring Boot不需要任何xml配置即可实现Sping Boot的所有配置。

1.3 SpringBoot的优缺点

  • 优点:
  1. 快速构建项目:省略了繁琐且重复的xml配置,分分钟构建一个web工程
  2. 对主流开发框架的无配置集成:提供了很多Starter 依赖包,开箱即用,无需多余配置;
  3. 项目可独立运行:无需外部依赖Servlet容器;
  4. 极大地提供了开发、部署效率;
  5. 监控简单:提供了actuator包,可以使用它来对你的应用进行监控。
  • 不足之处:
  1. 依赖太多:一个简单的SpringBoot应用都有好几十M只有;
  2. 缺少监控集成方案、安全管理方案:只提供基础监控,要实现生产级别的监控,监控方案需要自己动手解决;

二、SpringBoot的使用

2.1 创建SpringBoot项目

  • File --> New --> project --> Spring Initializr
    在这里插入图片描述
  • 设置项目名称等;
    在这里插入图片描述
  • 选择SpringBoot版本,以及选择相应模块;
    在这里插入图片描述
  • 项目名称及保存位置;
    在这里插入图片描述

2.2 SpringBoot的配置文件

2.2.1 pom文件

parent起步依赖

<!--所有的SpringBoot项目都必须继承spring-boot-starter-parent -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.10.RELEASE</version>
        <relativePath/>
    </parent>

web及test(测试)起步依赖

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

2.2.2 application.properties

# server configuration
server.port=8081
spring.application.name=exam-service
## eureka configuration
eureka.client.serviceUrl.defaultZone=http://localhost:8082/test/
eureka.instance.prefer-ip-address=true
eureka.instance.ip-address=127.0.0.1
eureka.instance.non-secure-port=8726
# aop configuration
spring.aop.auto=true
spring.aop.proxy-target-class=false
# db configuration
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_work?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
##Mybatis configuration
mybatis.type-aliases-package=com.bosssoft.core.rbac.pojo.entity
mybatis.mapper-locations=classpath:mapper/*.xml
# mapper configuration
mapper.mappers=com.bosssoft.hr.bes.exam.center.dao.ExamRecordDAO
mapper.identity=MYSQL
redis configuration
spring.redis.jedis.pool.max-idle=30
spring.redis.jedis.pool.max-active=10
spring.redis.jedis.pool.min-idle=30
spring.redis.jedis.pool.max-wait=10000
spring.cache.type=redis
spring.cache.cache-names=redisCache
spring.redis.host=58.22.61.222
spring.redis.port=27014
spring.redis.timeout=30000
spring.redis.database=3

2.2.2 application.yml

在 application.yml 文件 书写注意:

  1. 不同“等级” 用冒号隔开;
  2. 次等级的前面是空格,不能使用制表符(tab);
  3. 冒号之后如果有值,那么冒号和值之间至少有一个空格,不能紧贴着;
server:
  prot: 8888  #配置访问的端口
  servlet:
    context-path: /xxx  #配置访问时的项目名

spring:
  devtools:      
    restart:
      enabled: true  #这个好像是热加载,每次代码有改动就自动重启,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。
  datasource:
    url: jdbc:mysql://localhost:3306/xxx?useUnicode=true&characterEncoding=UTF-8&useSSL=true  #配置数据库的路径
    username: root  #数据库登录名
    password: root   #登陆密码
    type: com.alibaba.druid.pool.DruidDataSource  #这个可以看一下 https://blog.csdn.net/qq_27191423/article/details/79146855 
    driver-class-name: com.mysql.jdbc.Driver
    filters: stat
    maxActive: 20  #连接池的最大值,同一时间可以从池分配的最多连接数量,0时无限制
    initialSize: 1  #连接初始值,连接池启动时创建的连接数量的初始值
    maxWait: 60000
    minIdle: 1  #最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: select 'x'
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true   #是否对已备语句进行池管理(布尔值),是否对PreparedStatement进行缓存
    maxOpenPreparedStatements: 20

    jackson:
      date-format: yyyy-MM-dd HH:mm:ss
      time-zone: GMT+8

mybatis-plus:
  mapper-locations: classpath*:mapper/**/*Mapper.xml
  #实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.yudao.platform.entity.*
  global-config:
    #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
    id-type: 0
    #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
    field-strategy: 2
    #驼峰下划线转换
    db-column-underline: false
    #刷新mapper 调试神器
    refresh-mapper: true
    #数据库大写下划线转换
    #capital-mode: true
    # Sequence序列接口实现类配置
    #key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator
    #逻辑删除配置
    logic-delete-value: 1
    logic-not-delete-value: 0
    #自定义填充策略接口实现
    #meta-object-handler: com.baomidou.springboot.xxx
    #自定义SQL注入器
    # sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: false
    call-setters-on-nulls: true

3.4 SpringBoot的热部署

SpringBoot的热部署:无需手动重启SpringBoot应用。虽然平时开发web项目过程中,改动项目启重启总是报错;但springBoot对调试支持很好,修改之后可以实时生效。

  1. Setting --> Complier --> Build project automatically在这里插入图片描述

  2. 第一步完成后,发现热部署依旧无法实现,这是因为IDEA默认清空下不会自动编译,还需进行下面操作:

    • 按下ctrl + alt +shift + /
      在这里插入图片描述
    • 勾选如图所示内容在这里插入图片描述

3.3 SpringBoot的常用注解

  1. @SpringBootApplication : 用于启动类,开启包扫描、配置和自动配置的功能
@SpringBootApplication
public class Chapter1Application { 
	public static void main(String[] args) { 
		SpringApplication.run(Chapter1Application.class, args); 
	} 
}
  1. @RestController: @Controller+@ResponseBody 视图解析返回json数据

  2. @RequestMapping: 配置请求地址的URL映射

@RestController 
public class HelloController { 
	@RequestMapping("/hello")
	public String hello() { 
		return "Hello SpringBoot!"; 
	} 
}
  1. @Value("属性名"): 直接获取到配置文件里面的变量信息
@Value("${server.port}") 
private String serverPort; 

@Value("${sys.version}") 
private String version; 

RequestMapping("/port")
public String port() { 
	return "port is :"+serverPort + " and version is :" + version; 
}
  1. @GetMapping: @RequestMapping(method = RequestMethod.GET)的缩写,处理http的get请求 。 参数:@PathVariable— url中动态参数;@RequestParam ---request中获取值
@GetMapping("/hello/{id}") 
public String hello(@PathVariable(value="id") String id,
				 	@RequestParam(value="param1", required=true) String param1,
				 	@RequestParam(value="param2", required=false) String param2) { 
				 	
		return String.format("id is :%s, param1 is : %s , param2 is :%s", id,param1,param2);
		 
		}
  1. @PostMapping: @RequestMapping(method = RequestMethod.POST)的缩写,处理http的post请求
  2. @RequestBody: 主要用来处理Content-Type是application/json,application/xml的Json字符串。多用在Post类型请求中。 可以将请求中的JSON字符串绑定到相应的bean上,也可以绑定到绑定到字符串上。
$.ajax({ 
	url:"/login", type:"POST", 
	data:'{"userName":"admin","pwd","admin123"}', 
	content-type:"application/json charset=utf-8", 
	success:function(data){ 
		alert("request success ! "); 
	} 
}); 

@PostMapping("/login") 
public void login(@RequestBody String userNamePwd) { 
	System.out.println(userNamePwd+ " :" + userNamePwd); 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值