zoukankan      html  css  js  c++  java
  • 如何快速搭建springboot项目?

    1.情景展示

    在工作中,公司通常都会有自己已经搭建好的框架来供我们使用,一般情况下,是不需要自己搭建框架的;

    但是,工作之余,或者自己想搞搞小项目供自己研究等,如何快速搭建一个框架呢?

    2.场景分析

    对于框架,我们不需要知道底层代码是如何实现的,只需要知道如何更好地为我们提供方便就可以了,用框架的目的是为了便捷开发,如果是为了研究框架的话,不在本文的范围内;

    目前最方便的java开发框架是:springboot,就简单理解为对springMVC的进一步整合即可;

    下面,将以springboot为例,如何快速完成框架的搭建。

    3.解决方案

    通过spring官网,完成框架的搭建。

    springboot框架搭建官网:https://start.spring.io/

    选择项目类型,对项目名称,项目组等信息进行修改;

    添加,项目所需jar包依赖,一般需要有以下4个:

    点击“生成”按钮,即可自动将项目下载到本地。

    打开该文件,对其进行解压并将其拷贝到开发工具的工作空间下,比如:idea;

    打开idea--》File--》Open;

    找到刚才的项目路径,打开该项目;

    如果打开项目目录结构不能够完全展示的话,那就是idea的bug,关闭idea重新启动试试。

    由于现在项目使用的版本号是jdk11,如果idea里面没有配置jdk11,而且自己并不想重新配置的话,那就只能修改pom.xml当中java版本啦;

    等下面的进度条下载完对应的插件即可。

    如果只是搭建springMVC框架,也可以在spring官网快速完成:https://spring.io/

    4.扩展

    修改配置文件

    springboot默认配置文件是:src/main/resources/application.properties。

    配置数据源

    找到src/main/resources下的application.properties文件,这个是项目的核心配置文件;

    如果你习惯了使用yml文件,可以对其进行重命名。

    添加数据库配置

    数据库连接池配置

    查看代码
    ####spring配置####
    spring:
      ###数据库配置
      datasource:
        ##要使用的连接池实现的全称
        type: com.alibaba.druid.pool.DruidDataSource
        druid:
          #最大连接数
          max-active: 5000
          #初始化大小
          initial-size: 10
          #最小连接数
          min-idle: 1
          #获取连接等待超时时间(单位:毫秒)
          max-wait: 60000
          #间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
          time-between-eviction-runs-millis: 60000
          #一个连接在池中最小生存的时间,单位是毫秒
          min-evictable-idle-time-millis: 30000
          #启用游标缓存
          pool-prepared-statements: true
          #最大可打开的游标数
          max-pool-prepared-statement-per-connection-size: 20
          #配置监控统计拦截的filters,去掉后监控界面SQL无法进行统计,'wall'用于防火墙
          #值:config,stat,wall,log4j,
          filters: stat
          #检验连接是否有效的查询语句。如果数据库Driver支持ping()方法,则优先使用ping()方法进行检查,否则使用validationQuery查询进行检查。(Oracle jdbc Driver目前不支持ping方法)
          validation-query: SELECT 1 FROM DUAL
          #关闭自动重连
          connection-error-retry-attempts: 0
          break-after-acquire-failure: true

    所需依赖:

    查看代码
    <!--数据库连接池-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.22</version>
    </dependency>

    数据源配置

    查看代码
    ####spring配置####
    ####开发环境数据源配置
    spring:
      ###数据库配置
      datasource:
        ##数据库地址(默认端口号:3306)
        url: jdbc:mysql://192.168.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
        ##用户名
        username: root
        ##密码
        password: 123456
        ##JDBC驱动程序的全称
        driver-class-name: com.mysql.cj.jdbc.Driver

    mybatis配置

    查看代码
    ####mybatis配置####
    mybatis:
      ###mybatis配置文件
      #  config-location: classpath:myBatis-config.xml
      ###mapper映射xml文件所在路径(**代表文件夹)
      mapper-locations: classpath:mapper/**/*Mapper.xml
      ###pojo所在包,使用该注解,在mapper.xml用实体类接收时,可以不使用pojo全路径-替换
      type-aliases-package: com.example.upload.model
      configuration:
        ##如果查询语句中某些字段值是null的,则这个字段就无法返回,设置为true则可以
        call-setters-on-nulls: true

    日志配置

    查看代码
    ####日志配置
    logging:
      ###日志存放路径:log/sys.log
      file:
        ##路径(不同环境配置不同日志输出目录)(既可以使用相对路径,也可以使用绝对路径)
        ##部署到tomcat上:tomcat_home/logs/upload
        ##部署到java上:project_workspace/logs/upload
        path: ../logs/upload
        ##文件名
        name: sys
      ###日志级别:FATAL > ERROR > WARN > INFO > DEBUG > TRACE
      level:
        ##日志级别
        root: DEBUG
      ###控制台输出格式
      pattern:
        ##在yml中,这里需要加单引号'
        console: '%d [%t] %p (%file:%line\) - %m%n'

    关闭控制台输出:CONDITIONS EVALUATION REPORT日志的两种方式

    方式一:将日志级别改为INFO;

    因为CONDITIONS EVALUATION REPORT日志的级别为DEBUG。

    方式二:主动关闭该日志显示。

    查看代码
    ###关闭CONDITIONS EVALUATION REPORT日志
    devtools:
      restart:
        log-condition-evaluation-delta: false

    还需要配置logback-spring.xml

    查看代码
    
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <!--部署到tomcat上,日志不生效的原因是:
        logback.xml加载早于application.yml,所以,如果你在logback.xml使用了变量时,而恰好这个变量是写在application.properties时,那么就会获取不到。
        需将日志文件重命名为logback-spring.xml就可以解决啦-->
    
        <!--定义变量值的标签:name的值是变量的名称,通过${}来获取变量,source对应yml中的属性-->
        <!-- 和日志配置文件作映射(动态配置,从yml文件中获取这些属性) -->
        <!--使用<springProperty>,才可使用application.properties(或application.yml)中的值-->
        <!--注意:source对应的是yml配置文件中的属性,yml里对应的属性值必须是常量,不能是动态获取的,否则这里没法取到实际的值-->
        <springProperty scope="context" name="log_file_path" source="logging.file.path"/>
        <springProperty scope="context" name="log_file_name" source="logging.file.name"/>
        <springProperty scope="context" name="log_level" source="logging.level.root"/>
        <springProperty scope="context" name="log_pattern_console" source="logging.pattern.console"/>
    
        <!--输出到控制台:控制台输出策略-->
        <!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%i索引【从数字0开始递增】,%n换行符,, -->
        <!-- appender是configuration的子节点,是负责写日志的组件。 -->
        <!-- ConsoleAppender:把日志输出到控制台 -->
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>${log_pattern_console}</pattern>
                <!--<pattern>%d [%t] %p (%file:%line\) - %m%n</pattern>-->
                <!-- 不要使用UTF-8,否则以jar包运行该项目,springboot内置tomcat日志输出使用的是GBK,所以会导致中文乱码
                 TOMCAT_HOME/conf/logging.properties文件里的java.util.logging.ConsoleHandler.encoding = GBK-->
                <!--控制台设置日志输出格式UTF-8/GBK 如果不设置,则获取默认格式-->
                <!--<charset>UTF-8</charset>-->
            </encoder>
        </appender>
    
        <!--输出到文件:文件输出策略-->
        <!-- RollingFileAppender:滚动记录文件(用于切分日志文件),先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
        <!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是sys.log -->
        <!--             2.如果日期没有发生变化,但是当前日志的文件大小超过1KB时,对当前日志进行分割 重命名-->
        <appender name="file"
                  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 正在记录的日志文件的路径及文件名 -->
            <file>${log_file_path}/${log_file_name}.log</file>
            <!--<file>log/sys.log</file>-->
            <!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
            <!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责触发滚动 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
                <!-- 文件名:log/sys.2017-12-05.0.log -->
                <fileNamePattern>${log_file_path}/sys.%d.%i.log</fileNamePattern>
                <!--<fileNamePattern>${logPath}/xxx.%d{yyyy-MM-dd}.log.zip</fileNamePattern>-->
                <!-- 每产生一个日志文件,该日志文件的保存期限为10天 -->
                <maxHistory>15</maxHistory>
                <!--用来指定日志文件的上限大小,例如设置为1GB的话,那么到了这个值,就会删除旧的日志-->
                <totalSizeCap>2GB</totalSizeCap>
                <!--项目重启清空之前的日志文件-->
                <cleanHistoryOnStart>true</cleanHistoryOnStart>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <!-- 单个日志文件的最大容量,超过就会产生新的文件,默认值是10MB -->
                    <maxFileSize>5MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <encoder>
                <!-- pattern节点,用来设置日志的输入格式 -->
                <!--另外:部署到tomcat上,会自动将错误堆栈输出到日志文件中,但是,使用springboot启动,则不会将错误堆栈写到文件中-->
                <pattern>
                    %d [%t] %p (%file:%line\)- %m%n
                </pattern>
                <!-- 记录日志的编码 -->
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
        <!-- 设置日志对象的日志级别,默认值DEBUG,忽略大小写 -->
        <root level="${log_level}">
            <!--控制台(必须定义日志级别,控制台没有日志输出)-->
            <appender-ref ref="console"/>
            <!--日志输出文件(必须定义日志级别,不然日志无法写到文件中)-->
            <appender-ref ref="file"/>
        </root>
    
        <!--<logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>-->
        <!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->
        <!-- com.appley为根包,也就是只要是发生在这个根包下面的所有日志操作行为的权限都是DEBUG -->
        <!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE  -->
        <!--<logger name="com.xyh.bill.s.service" level="DEBUG" additivity="false">
            <appender-ref ref="syslog" />
        </logger>-->
    
        <!--去掉spring boot的ONDITIONS EVALUATION REPORT-->
        <!--addtivity:是否向上级logger传递打印信息。默认是true,如果不设置的话:就会打印两次,因为打印信息向上级传递,logger本身打印一次,root接到后又打印一次-->
        <logger name="org.springframework.boot.autoconfigure" level="ERROR" additivity="false">
            <appender-ref ref="console" />
        </logger>
        <!--mybatis打印执行结果集(解决只打印SQL不打印结果集的问题)-->
        <!--Mybatis中,打印SQL语句的日志级别是DEBUG,而打印SQL执行结果集的日志级别是TRACE-->
        <!--mapper类所在包名-->
        <logger name="com.example.upload.dao" level="TRACE" additivity="false">
            <appender-ref ref="console" />
        </logger>
    
    
    </configuration>

    使用springboot启动项目后,会在workspace/logs/upload目录下生成日志。

    说明:logback-spring.xml需要与application.xml平级。

    如果不配置logback-spring.xml并不影响项目的正常运行,日志也会存在;

    但是,我们会丧失对于日志的管理,没有了对日志的控制权,相当于项目没有了灵魂烙印。

    修改tomcat端口号

    ####spring内置Tomcat配置####
    ####只有使用springboot内置的Tomcat启动项目时,才会生效
    server:
      ###指定Tomcat端口号
      port: 8080

    修改tomcat请求地址的字符集

    查看代码
    ####spring内置Tomcat配置####
    ####只有使用springboot内置的Tomcat启动项目时,才会生效
    server:
      ###tomcat配置
      tomcat:
        #URI的解码字符集,默认为UTF-8
        uri-encoding: UTF-8
        #启动超时时间限制(3秒)
        connection-timeout: 3000ms

    修改项目的访问入口

    查看代码
    ####spring内置Tomcat配置####
    ####只有使用springboot内置的Tomcat启动项目时,才会生效
    server:
      ###tomcat的本质是servlet
      servlet:
        ##指定项目的访问名称(不配置的话默认为:/,也就是没有名字;配置的话必须以'/'开头,且不能以'/'结尾)
        context-path: /upload

    修改请求与响应数据的字符集

    查看代码
    ####spring内置Tomcat配置####
    ####只有使用springboot内置的Tomcat启动项目时,才会生效
    server:
      ###tomcat的本质是servlet
      servlet:
        ##请求与响应字符集
        encoding:
          charset: utf-8
          enabled: true
          force: true

    文件上传相关配置

    查看代码
    ####spring配置####
    ####开发环境数据源配置
    spring:
      ###文件上传大小限制
      servlet:
        multipart:
          #是否支持批量上传(默认值 true)
          enabled: true
          #上传文件最大为 1M(默认值 1M)
          max-file-size: 10MB
          #上传请求最大为 10M(默认值 10M)
          max-request-size: 10MB
          #文件大小阈值,当大于这个阈值时将写入到磁盘,否则存在内存中(默认值0,即:直接将文件写入磁盘)
          file-size-threshold: 0
          #判断是否要延迟解析文件(默认值false)
          resolve-lazily: false
          #存放上传文件的临时目录
          location:

    添加欢迎页

    springboot在启动的时候,会默认加载static目录下所有的资源,并将static/index.html当做项目的欢迎页。

    我们来到src/main/resources/static目录下,新建一个html文件,并将名称定为index;

    启动项目

    通过浏览器即可访问到该界面(如果没有配置欢迎页的话,访问结果为404)。

    写在最后

      哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

     相关推荐:

    本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/15778420.html

  • 相关阅读:
    python 模块和包以及他们的导入关系
    python time,random,os,sys,序列化模块
    python 可迭代对象,迭代器和生成器,lambda表达式
    python之拷贝(深浅)
    python 内置函数
    python 函数的递归
    python 装饰器
    python 函数基础知识整理
    @清晰掉 string.h之基础堵漏
    C和C++之间库的互相调用
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/15778420.html
Copyright © 2011-2022 走看看