SpringBoot

1、SpringBoot优点


  • Create stand-alone Spring applications

  • 创建独立Spring应用

  • Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)

  • 内嵌web服务器

  • Provide opinionated 'starter' dependencies to simplify your build configuration

  • 自动starter依赖,简化构建配置

  • Automatically configure Spring and 3rd party libraries whenever possible

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

  • Provide production-ready features such as metrics, health checks, and externalized configuration

  • 提供生产级别的监控、健康检查及外部化配置

  • Absolutely no code generation and no requirement for XML configuration

  • 无代码生成、无需编写XML

2、SpringBoot2入门


2.1、配置好 maven

链接: http://t.csdn.cn/5AtlF

2.2、搭建boot

2.3、测试

2.3.1、引入依赖 (测试版)

  • 父项目:负责管理管理,控制版本

  • 子项目:不用设置版本号

<!--fu-->     
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.7.5</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>2.7.5</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.24</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <!--  配置文件处理器,配置文件进行绑定就会有提示,让有些注解生效-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        </dependencies>
    </dependencyManagement>
<!--zi-->
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--配置文件处理器,配置文件进行绑定就会有提示,让有些注解生效-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
        </dependency>
2.3.2、配置文件 (测试)

application.yml

server:
  # 配置tomcat的端口号 默认是8080
  port: 8080
2.3.3、创建HelloWorld测试
需求:浏览发送/hello请求,响应 Hello,Spring Boot 2
2.3.4、创建主程序 启动类
@SpringBootApplication
public class UserSpringBootApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserSpringBootApplication.class, args);
    }
}
2.3.5、编写业务 Controller层
@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String handle01(){
        return "Hello, Spring Boot 2!";
    }
}

2.4、配置文件值注入

//只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
//@ConfigurationProperties告诉springboot将本类中的所有属性和配置文件中相关的配置进行绑定
//prefix表示与配置文件中哪个下面的所有属性进行映射
@Component
//prefix里面的配置只能小写
@ConfigurationProperties(prefix ="userpo")
//不能起名User,否则会拿到 user.getName() 只会拿到电脑的用户名
@Data
public class UserPO {
    private  int age;
    private String name;
}
<!--  配置文件处理器,配置文件进行绑定就会有提示-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
        </dependency>

避免application.properties的配置太多可以新建配置文件来进行值的注入

即:userpro.properties 文件配置

UserPro.name=boot
UserPro.age=24
@PropertySource和@importResource(重点)

value是字符串数组可以同时支持多个配置文件用逗号隔开;

//只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
//@ConfigurationProperties告诉springboot将本类中的所有属性和配置文件中相关的配置进行绑定
//prefix表示与配置文件中哪个下面的所有属性进行映射
@Component
//prefix里面的配置只能小写
@ConfigurationProperties(prefix ="userpro")//重点
@PropertySource("classpath:user.properties")//重点
@Data
public class UserPro {
    private int age;
    private String name;
}
spring配置文件beans.xml
 <bean id="getUser" class="com.demo.boot.service.User"></bean>
@importResource:导入spring的配置文件.让配置文件生效;

我们编写的spring配置文件需要导入才能生效;

@importResource:标识在配置类上location也是一个字符串数组

@ImportResource(locations = {"classpath:beans.xml"})
@SpringBootApplication
public class UserBootApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserBootApplication.class, args);
    }
}

springBoot推荐的给容器添加组件的方式;推荐使用全注解的方式(使用配置类)

//表明这是配置类,springboot会扫描这个类,将它的组件加入容器
@Configuration
public class UserProConfig {
    @Autowired
   private UserPro userPro;
    //将方法的返回值加入到容器中,容器中的组件名默认为方法名

    @Bean
    public User getUser() {
        System.out.println("加入成功");
        System.out.println(userPro);
        return new User();
        
    }
}
结果: UserPro.name=bootUserPro.age=24

3、配置文件解析


3.1、配置文件

springBoot使用一个全局配置文件,配置文件名字是固定的;

  • application.properties;

  • application.yml

配置文件的作用:对springBoot的自动配置哪里不满意可以修改springBoot的自动配置;

application.yml

#自定义常量
#file:
  #COS访问域名
#  URL: https://chain-1313314084.cos.ap-shanghai.myqcloud.com/
  #图片上传路径
 # uploadURL: bilibili/userImages/
 # search: https://chain-1313314084.cos.ap-shanghai.myqcloud.com/
 # localURL: C:\Users\ASUS\Desktop\images\

server:
  # 配置tomcat的端口号 默认是8080
  port: 8080

spring:
  datasource:
  # //43.142.172.23 云端服务器
  #  url: jdbc:mysql://43.142.172.23:3306/boot?
     url: jdbc:mysql://ljdbc:mysql://localhost:3306/boot?
    serverTimezone=UTC&characterEncoding=UTF-8
    username: root
    password: 123456
  
  servlet:
    multipart:
      max-request-size: 500MB
      max-file-size: 500MB
      
  thymeleaf:
    cache: false
    encoding: UTF-8
    
  redis:
      #linux 安装Redis的主机 ip地址 192.168.159.130
    host:  192.168.159.130 
    port: 6379
    database: 0
    password: 123456
    timeout: 30000

mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.lanou.bilibili.domain

pagehelper:
  helperDialect: mysql
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql

3.2、YAML语法

1.格式

(空格):属性和值之间必须有空格;

1、大小写敏感

2、使用缩进表示层级关系

3、禁止使用tab缩进,只能使用空格键

4、缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。

5、使用#表示注释

6、字符串可以不用引号标注

2.写法
server:
  port: 8081

#值的写法
#字面量:数字,字符串,布尔
name:lisi

#对象:Map:
age : 12
name : huang

#行内写法:
{age:12,name:huang}

#list,数组 :
[a,b,c]
#或者
ch:
 - a
 - b
 - c

#对象里面嵌套对象:
Userpo:
  age: 15
  name: zhangsan
  son:
     age: 1
     name: lisi

#list嵌套list:
lang:
 -
  - Ruby
  - Perl
  - Python 
 - 
  - c
  - c++
  - java


#list嵌套map
man:
 -
  id: 1
  name: huang
 -
  id: 2
  name: liao

3.2.1、profile

profile为spring对不同环境提供不同功能的支持

1.使用application.{profile}.properties多文件配置
如:application.properties
application.dev.properties(开发环境)
application.prod.properties(生产环境)
spring.profiles.active=dev

激活开发环境

2.使用application.yml可以实现单文件多环境切换

YAML中—表示文档分块只需要使用active激活所需环境即可;

server:
  port: 8080
spring:
  profiles:
    active: dev
---
server:
  port: 8082
spring:
    profiles: dev

---
server:
  port: 8081

spring:
  profiles: prod

4、目录结构:


5、注解


@SpringBootApplication

@SpringBootApplication 注解表明该类是springBoot的主配置类,应运行该类的主方法启动SpringBoot应用

@SpringBootConfiguration

SpringBoot的配置类;
标注在一个类上,说明该类是一个springBoot的配置类;

@Configuration

配置类注解是spring的底层注解;
配置类也是一个组件;@Component

@EnableAutoConfiguration

@EnableAutoConfiguration:开启自动配置功能;
以前需要配置的东西,现在springBoot帮我们自动配置,通过这个注解开启自动配置

@AutoConfigurationPackage

自动配置包,将主配置类(@SpringBootApplication标注的类)的所在包下的所有子包内的所有组件全部加入到spring容器中;
@Import({AutoConfigurationImportSelector.class})
spring底层注解@import,给容器导入一个组件;导入的组件由AutoConfigurationImportSelector.class提供
AutoConfigurationImportSelector:决定导入哪些组件;
将所有需要导入的组件以全类名的方式返回(String【】);这些组件就会被添加到容器中;

6、web开发


6.1.模板引擎thymeleaf

1.依赖导入
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2.Thymeleaf相关配置

Thymeleaf 中已经有默认的配置了,我们不需要再对其做过多的配置,有一个需要注意一下,

Thymeleaf 默认是开启页面缓存的,所以在开发的时候,需要关闭这个页面缓存,配置如下。

spring.thymeleaf.cache= false #关闭缓存
3.thymeleaf的命名空间(加入有语法提示)
<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org"> 
    <html lang="en">
4、使用案例

后端

Spring Boot 中会自动识别模板目录(templates/)下的success.html

@Controller
public class HelloController {

    @RequestMapping("/success")
    public String success(Map<String,String>map) {
        map.put("hello","你好");
        return "success";
    }

前端

<div th:text="${hello}"></div>
5、注意:

使用thymeleaf不能在controller层使用 @RestController注解,方法上也不能使用 @RespondBody注解,该注解会以json格式将数据还回,这样模板引擎就不能进行解析,结果就会将success直接打印到浏览器;

7、日志系统


在开发中,我们经常使用 System.out.println() 来打印一些信息,但是这样不好,因为大量的使用 System.out 会增加资源的消耗。我们实际项目中使用的是 slf4j 的 logback 来输出日志,效率挺高的,

Spring Boot 提供了一套日志系统,logback 是最优的选择。

springboot项目的最佳实践就是采用slf4j+logback;

SLF4J,即简单 日志门面Simple Logging Facade for Java),不是具体的日志解决方案,它只 服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许 最终用户在部署其应用时使用其所希望的日志系统。
yaml配置

logging.config 是用来指定项目启动的时候,读取哪个配置文件,这里指定的是日志配置文件是

根路径下的 logback.xml 文件,关于日志的相关配置信息,都放在 logback.xml 文件中了。 logging.level 是用来指定具体的 mapper 中日志的输出级别,上面的配置表示 com.user.boot.dao 包下的所有 mapper

日志输出级别为 trace,会将操作数据库的 sql 打印出来开发 时设置成 trace 方便定位问题,在 生产环境上,将这个日志级别再设置成 error 级别即可

#日志配置
logging:
  config: classpath:config/logback.xml
  level:
    com.user.boot.dao: trace
logback.xml里的配置(开发环境)
<configuration>
    <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
    <property name="FILE_PATH" value="D:/logs/ssoService/ssoService.%d{yyyy-MM- dd}.%i.log"/>
    <property name="ERROR_FILE_PATH" value="D:/logs/ssoService/error/ssoServiceError.%d{yyyy-MM-dd}.%i.log"/>

        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder> <!-- 按照上面配置的LOG_PATTERN来打印日志 -->
                <pattern>${LOG_PATTERN}</pattern>
            </encoder>
        </appender>

        <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">

            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>
                <onMatch>DENY</onMatch>  <!-- 如果命中就禁止这条日志 -->
                <onMismatch>ACCEPT</onMismatch>  <!-- 如果没有命中就使用这条规则 -->
            </filter>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 按照上面配置的FILE_PATH路径来保存日志 -->
                <fileNamePattern>${FILE_PATH}</fileNamePattern> <!-- 日志保存15天 -->
                <maxHistory>15</maxHistory>
                <timeBasedFileNamingAndTriggeringPolicy
                        class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!-- 单个日志文件的最大,超过则新建日志文件存储 -->
                    <maxFileSize>10MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <encoder> <!-- 按照上面配置的LOG_PATTERN来打印日志 -->
                <pattern>${LOG_PATTERN}</pattern>
            </encoder>
        </appender>


        <!-- error日志 -->
        <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 过滤日志 -->
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>ERROR</level>
            </filter>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 按照上面配置的FILE_PATH路径来保存日志 -->
                <fileNamePattern>${ERROR_FILE_PATH}</fileNamePattern> <!-- 日志保存15天 -->
                <maxHistory>14</maxHistory>
                <timeBasedFileNamingAndTriggeringPolicy
                        class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!-- 单个日志文件的最大,超过则新建日志文件存储 -->
                    <maxFileSize>10MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <encoder> <!-- 按照上面配置的LOG_PATTERN来打印日志 -->
             
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值