蔡徐坤哈哈哈

springboot笔记

1,特性:

  • 去除xml配置
  • 全部使用注解开发
  • 内嵌入tomcat
  • 快速开发

2,创建项目

  • 创建maven项目

  • 引入依赖

    <parent>
            <artifactId>spring-boot-starter-parent</artifactId>
            <groupId>org.springframework.boot</groupId>
            <version>2.6.7</version>
        </parent>
    
        <!-- parent的作用是引入一些依赖,以后引入依赖的时候就不需要版本号了 -->
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
    <!-- web引入的目的是引入spring和spring-mvc -->
    
    
    
  • 引入这些依赖后就相当于引入了spring,springMVC,Tomcat等依赖

3,项目结构

  • controller:视图层(web页面即跳转)和接口(业务逻辑)
  • service:接口层(业务逻辑)
  • dao:数据库访问层

4,RestController注解

  • RestController注解规定了该类所有的URL映射都是返回JSON格式,由springMVC提供,协议为Http协议
  • 和Controller的区别:如果使用Controller注解,那么该类如果想返回JSON格式的数据,需要再加上@ResponseBody注解,使用@RestController则不需要这一句冗余的代码,如果不加@ResponseBody,那么controller注解的类的方法返回值会默认跳转到另一个页面,即返回一个视图路由信息
  • @ResponseBody:将数据传输类型变为JSON类型

5,启动方式

  • 给任意类加上@EnableAutoConfigration注解,然后添加main方法,main方法代码:

    public static void main(String[] args) {
            SpringApplication.run(HelloWorld.class, args);
        //两个参数,启动类的class和参数
        }
    //这种做法只能扫描到当前类的路由信息可以在类上添加@ComponentScan()注解,在参数中添加扫描的包路径即可
    
    
    
    //@EnableAutoConfiguration//启动类注解
    //@ComponentScan("com.springboot.service")//解析路由时扫描包的注解
    
  • 创建启动类,为启动类添加@SpringbootApplication注解,这个注解包含了@EnableAutoConfiguration和@ComponentScan注解,并且扫描包时在从同级目录开始寻找。代码:

    @SpringBootApplication
    public class App {
        public static void main(String[] args) {
            SpringApplication.run(App.class);
        }
    }
    

6,静态资源访问

  • 在项目中,图片,js代码,css代码常作为静态资源,使用时引入即可,这种资源放置方式为在resource目录下新建static目录,放置到static目录下即可通过ip:端口号/文件名 来访问: http://localhost:8080/img.png

7,配置文件

​ 两种方式

  • application.properties:

    user1.name =name22
    user.age = 22
    

    特点:冗余

  • application.yml

    user1:
      name: zhh
      age: 23
    

    配置方法:注解配置:

    @Value("${user1.name}")
    private String name;
    @Value("${user1.age}")
    private String age;
    

8,视图跳转

  • 导入freemarker依赖:

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-freemarker</artifactId>
            </dependency>
    
  • 建立controller目录用来返回视图跳转信息

  • 建立controller类:

    @Controller
    public class freemarkerIndexController {
        @RequestMapping("/freemarkerIndex")
        public String freemarkerIndex(Map<String,String> result, HttpServletRequest request){
            result.put("name","zhanghualong");//result用来存储信息,在视图中可以直接使用${var}形式来访问数据
            //${var}的值为result.get(var)
            return "freemarkerIndex";//这里的返回值为视图名,springboot会自动在resource/templates下寻找对应的.ftlh文件
        }
    }
    
  • 建立视图

    <html>
    <head>
        <title>Welcome!</title>
    </head>
    <body>
        ${name}
    </body>
    </html>
    

    注:这里使用了freemarker引擎,这个引擎的作用是将我们写好的视图文件和后端文件一并解析为html文件,比如视图中的${name},就是freemarker负责解析,几种常见语法:

    <#if sex==0>
        男
        <#elseif sex==1>
         女
            <else>
                其他
            </else>
    </#if>
    <#list userList as user>
        ${user}
    </#list>
        <!-- 注意:判断条件一定除了==其余一定要加括号比如<#if (age>17)></#if> -->
    
  • 向视图中传值的两个方式

    • 用参数传递:

      public String freemarkerIndex(Map<String,Object> result){}
      //此时result就会被传递到视图页面中
      
    • 用HttpServletRequest request传递

      public String freemarkerIndex(HttpServletRequest request){
          request.setAttribute("user1","bageyalu");
      }
      

9,配置文件自动注入和装配

  • 在.yml或者.properties问价中设置属性值,有两种方式可以引入实体类:

    • @Value注解:

      public class HelloWorld {
          @Value("${user1.name}")
          private String name;
          @Value("${user1.age}")
          private String age;
      }
      /* yml文件:
      
      	user1:
        		name: zhanghualong
        		age: 23
      
      */
      
    • 自动注入

      @Component//将这个类注解为一个bean对象,其他引用这个对象可以直接用Autowired注解自动装配这个对象
      @ConfigurationProperties(prefix = "user1")//参数为配置的类名
      @Data//这个注解为lombok注解,为这个类提供了get和set方法,有参构造和无参构造以及tostring方法等方法
      public class NiuMaEntity {
          private String name;
          private String age;
          private String add;
      }
      
  • 自动配置实例:

    @Component
    @ConfigurationProperties(prefix = "user1")
    @Data
    public class NiuMaEntity {
        private String name;
        private String age;
        private String add;
    }
    
    
    
    @RestController
    public class NiuMaController {
    
        @Autowired
        private NiuMaEntity niuMaEntity;
    
        @RequestMapping("/getNiuMa")
        public String getNiuMa(){
            return niuMaEntity.getName() +","+niuMaEntity.getAge()+","+niuMaEntity.getAdd();
        }
    
    
    }
    
    /*
      user1:
        name: zhl
        age: 22
        add: 兰州
    */
    /*@ConfigurationProperties(prefix = "user1")注解需要注入依赖
    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <optional>true</optional>
            </dependency>
    
    
    */
    

10,配置文件占位符

  • 在配置文件中,我们可以使用一些占位符来输出随机数等内容:如 r a n d o m . v a l u e 、 {random.value}、 random.value{random.int}、${random.long}

    r a n d o m . i n t ( 10 ) 、 {random.int(10)}、 random.int(10){random.int[1024,65536]},${app.name:默认值}

  • user1:
        name: zhl
      age: ${random.int(10)}
        add: 兰州
    
  

### 11,多个配置文件设置springboot访问路径:

​```yml
spring:
  profiles:
    active: pre

在application.yml中如此配置,则会自动寻找到命名为application-pre.yml的文件

12,修改springboot项目启动端口和添加访问路径

server:
    port: 8081
    servlet:
        context-path: /zhl

13,输出日志

  • springboot中共有三种日志,分别是info,sql和error,info用来输出系统级日志,error输出错误信息,sql记录数据库访问日志

  • 添加配置信息,在resource目录下新建目录log,在log中新建logback.xml,在此文件中输入以下代码:

    <configuration>
        <!--本文主要输出日志为控制台日志,系统日志,sql日志,异常日志-->
        <!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,,,, -->
        <!--控制台-->
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%d %p (%file:%line\)- %m%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
        <!--系统info级别日志-->
        <!--<File> 日志目录,没有会自动创建-->
        <!--<rollingPolicy>日志策略,每天简历一个日志文件,或者当天日志文件超过64MB时-->
        <!--encoder 日志编码及输出格式-->
        <appender name="fileLog"
                  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <File>log/file/fileLog.log</File>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>log/file/fileLog.log.%d.%i</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <!-- or whenever the file size reaches 64 MB -->
                    <maxFileSize>64 MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <encoder>
                <pattern>
                    %d %p (%file:%line\)- %m%n
                </pattern>
                <charset>UTF-8</charset>
                <!-- 此处设置字符集 -->
            </encoder>
        </appender>
    
        <!--sql日志-->
        <appender name="sqlFile"
                  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <File>log/sql/sqlFile.log</File>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>log/sql/sqlFile.log.%d.%i</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <!-- or whenever the file size reaches 64 MB -->
                    <maxFileSize>64 MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <!--对记录事件进行格式化。负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。-->
            <encoder>
                <!--用来设置日志的输入格式-->
                <pattern>
                    %d %p (%file:%line\)- %m%n
                </pattern>
                <charset>UTF-8</charset>
                <!-- 此处设置字符集 -->
            </encoder>
        </appender>
    
    
        <!--异常日志-->
        <appender name="errorFile"
                  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <File>log/error/errorFile.log</File>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>log/error/errorFile.%d.log.%i</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <!-- or whenever the file size reaches 64 MB -->
                    <maxFileSize>64 MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <!--对记录事件进行格式化。负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。-->
            <encoder>
                <!--用来设置日志的输入格式-->
                <pattern>
                    %d %p (%file:%line\)- %m%n
                </pattern>
                <charset>UTF-8</charset>
                <!-- 此处设置字符集 -->
            </encoder>
            <!--
                日志都在这里 过滤出 error
                使用 try {}catch (Exception e){} 的话异常无法写入日志,可以在catch里用logger.error()方法手动写入日志
                -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
        <!--  日志输出级别 -->
        <!--All\DEBUG\INFO\WARN\ERROR\FATAL\OFF-->
        <!--打印info级别日志,分别在控制台,fileLog,errorFile输出
            异常日志在上面由过滤器过滤出ERROR日志打印
        -->
        <root level="INFO">
            <appender-ref ref="fileLog" />
            <appender-ref ref="console" />
            <appender-ref ref="errorFile" />
        </root>
    
        <!--打印sql至sqlFile文件日志-->
        <logger name="com.dolphin.mapper" level="DEBUG" additivity="false">
            <appender-ref ref="console" />
            <appender-ref ref="sqlFile" />
        </logger>
    </configuration>
    
  • 在yml文件中配置日志访问路径:

    logging:
        config: classpath:log/logback.xml
    
  • 日志会自动存储到当前项目路径/log下,有filelog,errorlog,sqllog三个文件夹

  • 需要输出日志的类上添加@Slf4j注解,即可在类中调用log.info(),log.error(),log.debug()等方法:

    log.info("user+{}",niuMaEntity.toString());//花括号代表变量,都好后写变量值即可
    

14,创建定时任务

@Component
public class ScheduledTasks {
    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
    @Scheduled(fixedRate = 5000)//fixedRate参数可以设置执行间隔,单位为秒,也可以使用cron参数,详见https://www.bejson.com/othertools/cron/
    public void reportCurrentTime() {
        System.out.println("现在时间:" + dateFormat.format(new Date()));
    }
}

15,全局捕获异常:

  • 建立捕获异常的类,并在类上添加@ControllerAdvice注解,表明这个类是全局捕获异常的类

    @ControllerAdvice
    public class MayiktExceptionHandler {
    
        /**
         * 拦截运行异常出现的错误~~~
         *
         * @return
         */
        @ExceptionHandler(RuntimeException.class)//注解意义为对所有在运行的类捕获异常
        @ResponseBody//注解返回格式,加ResponseBody就是返回json格式,不加就是返回视图路由信息
        public Map<Object, Object> exceptionHandler() {
            Map<Object, Object> map = new HashMap<>();
            map.put("error", "500");
            map.put("msg", "系统出现错误~");
            return map;
        }
    }
    

16,打包应用程序

  • 先用mvn程序将程序打包

    mvn clean package//在当前路径下即可
    
  • 用java -jar 包名运行

  • 注:打包前需要在pom文件中加入如下代码指明程序的入口类,不然在运行时会报一个未能识别主清单的错误。

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>com.mayikt.App</mainClass>
                    <excludes>
                        <exclude>
                            <groupId>junit</groupId>
                            <artifactId>junit</artifactId>
                        </exclude>
                        <exclude>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-starter-test</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值