关于SpringBoot框架,看这篇就够了。
作者:mmseoamin日期:2023-12-14

目录

是什么

有什么优点、解决了哪些问题

创建第一个以springboot项目

starter

核心配置文件application.yml或properties

application中的配置项

springboot的启动流程

自定义banner

整合日志打印

整合druid数据源

处理异常

常用的注解

Configuration

Import

conditional

ConfigruationProperties

基于springboot的SSM框架

基于springboot的SSMibatisPlus框架

springboot项目的打包及运行


是什么

        Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。-----摘自百度百科

小编的理解:

springboot是开发人员的福音,是所有通用框架的集大成者,这里举个生活中的例子说明一下:

用电器与插板的关系:

        我理解springboot就像是一个大插板,能插各种类型的用电器(用电器就是各种框架与中间件等),如果我们不为每个用电器进行个性化定制,springboot为每个插口都进行了通用性设置(比如插口默认是220V、默认能插几孔的插头),让开发人员在开发项目的时候以最少的配置、最少的时间去构建项目。

        此外,springcloud项目是基于springBoot扩展出来的概念,可以说没有springboot就没有springcloud,关于springboot的相关教程,后续小编会进行更新。

有什么优点、解决了哪些问题

我们来看官网的描述:

官网给出的特征:

        1. 直接嵌入Tomcat、Jetty或Undertow(无需部署WAR文件)

        2. 提供有见解的“starter”依赖项以简化构建配置

        3. 尽可能自动配置Spring和第三方库

        4. 提供生产就绪功能,如指标、运行状况检查和外部化配置

        5. 绝对没有代码生成,也不需要XML配置

小编的体验:

        1. 简化开发流程,可以无xml配置快速搭建项目。

        2. 简化开发流程,可以以starter快速导入项目所需要的依赖。

        3. 简化打包与运维流程,内部嵌套服务器,可以直接打包运行,无需依赖外部的应用服务器。

        4. 提供了配置类,可以与任何市面上流行的框架结合进行开发。

创建第一个以springboot项目

有两种方式可以搭建springboot项目:

        1. 可以通过官网快速的搭建你的第一个springboot项目。

        2. 可以通过idea快速搭建springboot项目,这里推荐idea创建的方式。

通过idea创建springboot项目:

1. 点击new-project,选择spring initializr,填写信息。

 2. 选择springboot的版本和依赖项,点击finish完成。

3. 修改maven的地址,改为本地安装地址,file-settings-输入maven

4. 创建controller、service层以及代码,开始helloworld之旅。

 

controller代码:

@RestController
public class HelloController {
    @Autowired
    HelloService helloService;
    @RequestMapping("hello")
    public String hello(){
        return helloService.hello();
    }
}

 service代码:

public interface HelloService {
    String hello();
}

service实现类代码:

@Service
public class HelloServiceImpl implements HelloService {
    @Override
    public String hello() {
        return "Hello World!";
    }
}

 5. 运行项目,在浏览器中访问接口。

6. 访问接口,这里我在application.properties中指定了项目的端口为8099

7. 访问接口信息如下:

starter

        在创建springboot项目的时候,我们勾选了依赖的项目,下面我们来看一下pom文件吧:

这个starter是什么呢?我们可以ctrl+鼠标左键点进去看看..... 

        可以看到,springboot的web-starter 依赖中直接引入了四个依赖,这可以大大节省我们去寻找各种框架的依赖和版本的时间,进行快速构建项目,而springboot提供的starter不仅仅只有web的,还有各种通用框架的,应有尽有,想想是不是就觉得很爽呢?

核心配置文件application.yml或properties

        在springboot中,为我们提供了一个核心配置文件,就是application,你可以把它命名为application.properties,也可以吧它命名为application.yml或者application.yaml,三种命名方式都代表它是springboot的核心配置文件。

application中的配置项

        application中有一些常用的配置项,例如配置数据库信息的:

spring.datasource.driver-class-name=
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=

        例如配置项目访问根路径的:

server.servlet.context-path=

         例如配置项目的端口、访问路径:

server.port=8099
#配置完毕后,需要访问时加上此项 例如:原来是http://localhost:8080
#现在是http://localhost:8080/springboot01
server.servlet.context-path=/springboot01

 更多配置内容可以访问地址获取(需要什么就ctrl+f搜索即可):

Common Application Properties

springboot的启动流程

这里推荐博主文章:9千字长文带你了解SpringBoot启动过程--史上最详细 SpringBoot启动流程-图文并茂_Fly丶X的博客-CSDN博客_springboot启动流程

自定义banner

启动时输出的banner可以进行自定义:

在resources下新增banner.txt文件,输入文件内容,文件内容可以通过网站生成后粘贴到文件中: https://www.bootschool.net/ascii

整合日志打印

直接在resources目录下增加文件logback.xml



    
    
    
    
        
        
            
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            
        
    
    
    
        
            
            ${LOG_HOME}/server.%d{yyyy-MM-dd}.log
            30
        
        
            
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            
        
        
        
            10MB
        
    
    
    
        
       
    
    
    
    

整合druid数据源

导入druid的依赖


    com.alibaba
    druid-spring-boot-starter
    1.1.10

 在application.yml中新增配置信息:

  spring: 
    datasource: 
      # 使用阿里的Druid连接池 
      type: com.alibaba.druid.pool.DruidDataSource 
      driver-class-name: com.mysql.cj.jdbc.Driver 
      # 填写你数据库的url、登录名、密码和数据库名 
      url: jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai 
      username: root 
      password: root 
    druid: 
      # 连接池的配置信息 
      # 初始化大小,最小,最大 
      initial-size: 5 
      min-idle: 5 
      maxActive: 20 
      # 配置获取连接等待超时的时间 
      maxWait: 60000 
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 
      timeBetweenEvictionRunsMillis: 60000 
      # 配置一个连接在池中最小生存的时间,单位是毫秒 
      minEvictableIdleTimeMillis: 300000 
      validationQuery: SELECT 1 
      testWhileIdle: true 
      testOnBorrow: false 
      testOnReturn: false 
      # 打开PSCache,并且指定每个连接上PSCache的大小 
      poolPreparedStatements: true 
      maxPoolPreparedStatementPerConnectionSize: 20 
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 
      filters: stat,wall,slf4j 
      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 
      connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 
      # 配置DruidStatFilter 
      web-stat-filter: 
        enabled: true 
        url-pattern: "/*" 
        exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*" 
      # 配置DruidStatViewServlet 
      stat-view-servlet: 
        url-pattern: "/druid/*" 
        # IP白名单(没有配置或者为空,则允许所有访问) 
        allow: 127.0.0.1,192.168.8.109 
        # IP黑名单 (存在共同时,deny优先于allow) 
        deny: 192.168.1.188 
        #  禁用HTML页面上的“Reset All”功能 
        reset-enable: false 
        # 登录名 
        login-username: admin 
        # 登录密码 
        login-password: 123456

处理异常

        后台接口发生异常时,会出现空白页面的提示,非常不友好,这时可以使用springboot的异常处理来配置错误信息页面。

使用方式如下: 

可以自定义异常处理类,指定哪些异常跳转到哪些页面

1. 新增Springboot的拦截器 :

@Component 
public class DemoInterceptor implements HandlerInterceptor { 
    @Override 
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 
        System.out.println("执行拦截器"); 
        return true; 
    } 
}

2. 配置拦截器

注意:类上有注解@Configuration。此类相当于SpringMVC配置文件。

addPathPattern(): 拦截哪些URL。 /** 拦截全部

excludePathPatterns(): 不拦截哪些URL。当和addPathPattern()冲突时,excludePathPatterns()生效。

 @Configuration 
 public class MyConfig implements WebMvcConfigurer { 
     @Autowired 
     private DemoInterceptor demoInterceptor; 
     //配置拦截器的映射 
     @Override 
     public void addInterceptors(InterceptorRegistry registry) { 
         registry.addInterceptor(demoInterceptor).addPathPatterns("/**").excludePathPatterns("/login"); 
     } 
 }

常用的注解

@SrpingBootApplication:

启动类上的核心注解,它包含三个注解:

  1. SpringBootConfiguration 跟configuration等同
  2. EnableAutoConfiguration 自动装配
  3. ComponentScan 包扫描

Configuration

@Configuration

       指定当前的类为springboot的配置类,可以在配置类中定义@Bean注解,注入bean对象,将bean对象交给springboot去管理。

Configuration(proxyBeanMethods=true)

proxyBeanMethods=true: 代表通过代理对象,依赖spring容器控制Bean的单例

proxyBeanMethods=false: 代表不会通过代理对象控制Bean的单例

Import

@Import: 加在类上,通过此注解可以引入其他类。

conditional

@Conditional:满足了conditional中的条件则进行组件注入

 

@ImportResource: 允许我们定义xml配置文件,在文件中配置bean,用法如下:

 

ConfigruationProperties

读取配置文件中的内容,以对象的形式注入特定的类中

@ ConfigruationProperties

基于springboot的SSM框架

1. 创建项目,可参考章节:创建第一个以springboot项目

2. 导入依赖



    org.slf4j
    slf4j-log4j12
    1.6.1



    org.mybatis.generator
    mybatis-generator-core
    1.3.2



    com.github.pagehelper
    pagehelper-spring-boot-starter
    1.4.1

3. 配置application.yml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
thymeleaf:
  prefix: classpath:/templates/html/
  suffix: .html
  cache: false
  model: HTML5
  encoding: UTF-8
mybatis:
  type-aliases-package: com.ssm.mapper
  mapper-locations: classpath:com/ssm/mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
server:
  port: 8099

 4. 新增文件generatorConfig.xml,需要修改文件中的路径。



    
    
        
            
            
        
        
            
        
        
        
        
            
        
        
        
            
            
            
            
        
        
        
            
            
        
        
        
            
            
        
        
        

5. 新增log4j.properties

log4j.rootLogger=debug,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=d:/lc.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d(yyyy-MM-dd HH:mm:ss)%1 %F %p %m%n

6. 在test包下新增java类:

 

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class GeneratorCode {
    public void generator() throws Exception {
        List warnings = new ArrayList();
        boolean overwrite = true;
        File configFile = new File("F:\\springbootall\\sp03\\ssm01\\target\\classes\\generatorConfig.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
                callback,warnings);
        myBatisGenerator.generate(null);
    }
    public static void main(String[] args) {
        GeneratorCode generatorSqlmap = new GeneratorCode();
        try {
            generatorSqlmap.generator();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

7. 运行java类就可以生成代码.

8. Controller类的代码如下:

 

@RequestMapping(value = "getAllGameUserList",method = RequestMethod.GET)
public Map getAllGameUsers(
        @RequestParam(value = "currentPage",required = false) int currentPage,
        @RequestParam(value = "pageSize",required = false) int pageSize,
        @RequestParam(value = "recordCount",required = false) int recordCount,
        @RequestParam(value = "usrLoginNm",required = false) String usrLoginNm,
        @RequestParam(value = "usrNm",required = false) String usrNm,
        @RequestParam(value = "usrCardNum",required = false) String usrCardNum,
        @RequestParam(value = "usrAddr",required = false) String usrAddr,
        @RequestParam(value = "usrBirDate",required = false) Date usrBirDate,
        @RequestParam(value = "usrHobby",required = false) String usrHobby,
        @RequestParam(value = "usrDetail",required = false) String usrDetail){
    Gameuser gameuser=new Gameuser();
    gameuser.setUsrLoginNm(usrLoginNm);
    gameuser.setUsrNm(usrNm);
    gameuser.setUsrCardNum(usrCardNum);
    gameuser.setUsrAddr(usrAddr);
    gameuser.setUsrBirDate(usrBirDate);
    gameuser.setUsrHobby(usrHobby);
    gameuser.setUsrDetail(usrDetail);
    logger.info("gameuser: "+gameuser.toString());
    PageInfo gameuserPage = gameUserService.getAllGameUsers(currentPage, pageSize, recordCount, gameuser);
    Map objectMap=new HashMap<>();
    objectMap.put("recordList",gameuserPage.getList());
    objectMap.put("totalCount",gameuserPage.getTotal());
    objectMap.put("currentPage",gameuserPage.getPageNum());
    objectMap.put("pageSize",gameuserPage.getPageSize());
    return objectMap;
}

9. ServiceImpl代码如下:

@Override
public PageInfo getAllGameUsers(int currentPage, int pageSize, int recordCount, Gameuser gameuser) {
    PageHelper.startPage(currentPage, pageSize);
    List allGameUserLists = gameuserMapper.getAllGameUserLists(gameuser);
    PageInfo gameuserPageInfo = new PageInfo<>(allGameUserLists);
    return gameuserPageInfo;
}

10. Mapperxml代码如下:


基于springboot的SSMibatisPlus框架

详见我的另一篇博客:MybatisPlus详细教程,看后不会你打我............_只为code醉的博客-CSDN博客

springboot项目的打包及运行

通过maven-install命令,对项目进行打包操作,打包后的jar包存放在target目录下:

直接放置在装有JDK的机器上,执行命令:

        java -jar jar包名称

即可运行项目。