SpringBoot的常用配置和学习

特点:​

  • 快速的搭建​
  • pom 以starter的形式,按组类聚了多条依赖,形成单条依赖,以父子继承的方式自动寻找对应的依赖版本​
  • 以“习惯优于配置”的方式,简化了配置文件,无web.xml​
  • bean的自动装配,全称注解开发​
  • 无外置的servlet容器,使用内置容器。​
  • 提供了方便的监测端点。​

区别:​

  • spring mvc :web框架中的一部分​
  • spring boot:web框架集大成者,垂直框架​
  • spring cloud:三维立体式框架集大成者​

restful规则​

  • 根据操作类型来确定请求类型​
    • 新增操作–post请求–getMappping​
    • 修改操作–put请求–PutMapping​
    • 删除操作–delete请求----DeleteMapping​
    • 查询操作—get请求------GetMapping​
    • 多条件查询 —post请求​
  • 以操作的模块名||实体对象名命名​
    • /api/user​
    • /api/users​
    • /api/user/{userId}​
    • /api/student/{classId}/studentNo

1.SpringBoot的配置文件

  • 父上下级配置:bootstrap.properties || bootstrap.yml
  • 全局配置文件:application.properties || application.yml
  • 其他配置文件:自定义
  • 优先级:
    • 相同位置时:properties 大于 yml
    • 不同位置时:(从上到下,优先级减小)
      • 外置:./config
      • 外置:.
      • 内置:resources/config
      • 内置:resources/config/*
      • 内置:resources

2.Log配置

1.pom导入jar—无需导入jar包
2.配置:全局配置+配置类
logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
	scan:程序运行时配置文件被修改,是否重新加载,true:重新加载;false:不重新加载;默认为 true;
	scanPeriod:监测配置文件被修改的时间间隔,默认为 1 分钟,默认单位包括:milliseconds、seconds、minutes 和 hours;
	debug:是否打印 logback 程序运行的日志信息,默认为false;
	格式:
		%d{HH:mm:ss.SSS}:时间格式化,14:06:49.812;
		%line:输出执行日志请求的行号;
		%thread:表示产生日志的线程名;
		%level:输出日志级别;
		%method:输出执行日志请求的方法名;
		%class:输出日志打印类的全限定名;
		%-4relative含义:“-”左对齐标志,接着是可选的最小宽度修饰符,十进制表示,relative 输出从程序启动到创建日志的时间,单位毫秒;
		%msg:表示应用程序打印的日志信息;
		%n:表示换行符;
		%logger{36}:class 的全名,数字代表限制最长的字符;
 -->
<configuration debug="false" scan="true" scanPeriod="30 seconds">
    
    <!-- 定义常量 -->
    <property name="env" value="dev" />
    <!-当前项目名-->
    <property name="project" value="j210302-springboot" />
    <property name="root" value="/log" />
    <property name="fileSize" value="50MB" />
    <property name="maxHistory" value="100" />
    <timestamp key="dateTime" datePattern="yyyy-MM-dd HH:mm:ss" />
    <property name="pattern" value="%d{${dateTime}} %-5level %logger{36} -- %msg%n" />
    
    <!-- 控制台打印 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder charset="utf-8">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>
    
    <!-- 输入到文件,按日期和文件大小 -->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder charset="utf-8">
            <pattern>${pattern}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${root}/${project}_${env}_%d.%i.log</fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>${fileSize}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>
    
    <!-- 指定第三方 jar 包或者自定义包的输出日志级别,additivity: false,不会打印两次 -->
    <Logger name="org.springframework" level="INFO" additivity="false">
    	<appender-ref ref="console"/>
    	<appender-ref ref="file"/>
    </Logger>
    
    <!-- Root Logger Level: TRACE < DEBUG < INFO < WARN < ERROR -->
    <!--例如选择level=DEBUG,则比DEBUG优先级高的都会打印-->
    <root level="INFO">
        <appender-ref ref="console" />
        <appender-ref ref="file" />  
    </root>
</configuration>

3.应用示例

 private final static Logger LOGGER= LoggerFactory.getLogger(TestController.class);

    /**
     * 127.0.0.1:8080/test/log ---- get
     * @return
     */
    @GetMapping("/log")
    @ResponseBody
    public String logTest(){
        LOGGER.trace("this is trace log.");
        LOGGER.debug("this is debug log.");
        LOGGER.info("this is info log.");
        LOGGER.warn("this is warn log.");
        LOGGER.error("this is error log.");
        return "This is log test.-------aaa";
    }

3.多环境配置

  • 多环境:码工开发(dev)—测试人员测试(staging)–生产环境上线(live)

  • 系统针对不同的环境会有不同的配置:例如 数据库,日志

  • spring boot 多环境配置:application-{环境占位符}.properties

    • 说明:环境占位符是自己设定的,可以随便设置,这里举的例子是日志在不同环境的不同级别输出
    • appliation-dev.properties
    • appliation-staging.properties
    • appliation-live.properties
  • 上面多环境配置的实例

    • 目录结构
      • image.png
  • application.properties(在启动配置文件中选择日志打印)

  • logback-live.xml & application-live.properties

  • logback-dev.xml & application-dev.properties

4.http && https 配置

http:超文本传输协议,使用 TCP 端口 80,默认情况下数据是明文传送的,可以通过抓包工具捕获到。

  • htttps:由 SSL + HTTP 构建的可进行加密传输、身份认证的网络协议,称之为安全的超文本传输协议,使用 TCP 端口 443,数据会用 PKI(公钥基础设施)中的公钥进行加密,这样抓包工具捕获到的数据包也没有办法看包中的内容,安全性大大提高,要解密数据的话就要用到 PKI 中的私钥;
  • 公匙,私匙
    • 公匙加密,私匙解密;
    • 私匙数字签名,公匙验证;
    • 它们是成对的,相互解密,举个栗子:两个用户想用双匙技术加密信息,A 将自己的公匙传给 B,B 用公匙加密信息后传给 A,A 用私匙解密信息
  • SSL证书
    • SSL 证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本,该证书需要向国际公认的证书认证机构(简称 CA,Certificate Authority)申请,CA 机构颁发的证书有 3 种类型;
    • 三种类型的SSL证书
      • 域名型 SSL 证书(DV SSL):信任等级普通,只需验证网站的真实性便可颁发证书保护网站;
      • 企业型 SSL 证书(OV SSL):信任等级强,须要验证企业的身份,审核严格,安全性更高;
      • 增强型 SSL 证书(EV SSL):信任等级最高,一般用于银行证券等金融机构,审核严格,安全性最高,同时可以激活绿色网址栏;
    • 获取方式:
      • 1.网上购买:阿里云、百度、腾讯等;
      • 2.Java 命令生成:
        • keytool -genkey -alias tomcat -keyalg RSA (cmd执行) ---- 创建别名为 tomcat 的一条证书,指定使用 RSA 算法,生成文件 C:\Users\用户名.keystore;
        • 注意:如果该目录已经有了 .keystore,创建不成功,删除后再次创建
步骤
  • pom导入jar --无需导入
  • 配置
    • 1.将.ketstore 证书拷贝到src\main\resources文件夹下面。
    • 2.全局配置application.properties
      • 指定证书的位置和密码
      • 说明:1和2的步骤使得web能够运行,但是只支持https,而不支持http了,如果想要http和https都支持,还需要下面的配置
      • 3.添加配置类 WebMvcConfig,为 Servlet 容器添加 Http 连接器
        • 目录结构
        • WebMvcConfig.java

5.热部署配置

  • 简介:在实际开发过程中,每次修改代码就得重启项目,对于一些大型应用来说,需要花费大量的时间成本,在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,我们采用 Devtools 工具包完成热部署,操作简单,每次变更代码自动重启项目
  • 步骤:
    • 1.pom 导入 jar
 <!--devtool-->
        <!--暂时不使用热部署-->
<!--        <dependency>-->
<!--            <groupId>org.springframework.boot</groupId>-->
<!--            <artifactId>spring-boot-devtools</artifactId>-->
<!--        </dependency>-->
  • 2.application.properties中配置
# dev tools
#热部署生效
spring.devtools.restart.enabled=true
#设置重启的目录
spring.devtools.restart.additional-paths=src/main/java
  • 3.应用:修改 Controller 中某接口返回内容,查看应用是否自动重启,调用接口,查看返回结果是否更新;

6.静态资源配置

  • 简介:查看 ResourceProperties(高版本 Spring Boot 查看 WebProperties ---- Resources) 可知
    • SpringBoot 默认静态资源路径为:private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { “classpath:/META-INF/resources/”, “classpath:/resources/”, “classpath:/static/”, “classpath:/public/” };
  • 添加本地文件夹为静态资源路径,启动项目后,可直接通过 Url 访问该文件夹中的内容;
    • 步骤
      • 目录结构
      • 1.pom.xml-无需导入jar包
      • 2.1application.properties
      • 2.2ResourceConfigBean.java
      • 2.3WebMvcConfig.java,实现 addResourceHandlers 方法
      • 3.应用
        • 在本地资源文件夹 D:\javaTestworkplace\upload 中准备测试图片:test.png;
        • 启动项目,访问该图片:http://127.0.0.1:端口号/upload/test.png || https://127.0.0.1:端口号/upload/test.png ;

7.跨域配置

  • 简介:协议、域名、端口其中之一不一样则是跨域请求;
  • 三种不同类型的跨域
    • 不同协议的跨域
    • 不同端口的跨域
    • 不同域名的跨域
  • 方式一:局部 Controller 或控制器方法上添加 @CrossOrigin 注解
  • 方式二:全局配置类
@Configuration
@AutoConfigureAfter({WebMvcAutoConfiguration.class})
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // spring boot 版本 2.4.2
        registry.addMapping("/**")
            .allowedOrigins("*")
            .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
            .maxAge(3600)
            .allowedOriginPatterns("*");
//          .allowCredentials(true);
    }
}

8.ORM–Mybatis

基本的增删改查

  • Rusult.java(返回的数据封装到该VO中)

  • dao—CityDao.java
  • service-CityService.java &CityServiceImpl.java
  • controller–TestCityController.java

  • dao—CityDao.java
  • service-CityService.java &CityServiceImpl.java
  • controller–TestCityController.java

  • dao—CityDao.java
  • service-CityService.java &CityServiceImpl.java
  • controller–TestCityController.java

查(返回单个对象)

  • dao—CityDao.java
  • service-CityService.java &CityServiceImpl.java
  • controller–TestCityController.java

查(返回对象集合)

  • dao—CityDao.java
  • service-CityService.java &CityServiceImpl.java
  • controller–TestCityController.java

查(一对多查询)

  • 提示:通过countryId查询Country,Country有个字段是private List cites,所以需要映射。
    • Country.java(pojo)
    • CountryDao.java
    • CountryService.java&CountryServiceImpl.java
    • TestCountryController.java

多条件分页查询(多条件查询使用@PostMapping)

  • 参数:currentPage,pageSize, orderBy,direction,keyword
  • SearchBean.java
  • dao—CityDao.java
  • service-CityService.java &CityServiceImpl.java
  • controller–TestCityController.java

批量插入多条数据

  • dao—CityDao.java
  • service-CityService.java &CityServiceImpl.java
  • controller–TestCityController.java

9.JPA**(JPA是一种规范,具体实现有Hibernate)**

Hibernate**(全ORM,不用自己写sql语句)**

pom导入jar

配置

  • application.properties

应用

自动生成表

  • 例子:在这个例子中 班级和学生是多对多的关系
    • AbstractEntity.java,下面的四个表的主键由这个类来生成
    • 四个表
      • 学生表(test_student)
      • 学生证表(test_card)
      • 学校表(test_school)
      • 班级表(test_clazz)
    • 说明:由于此时默认生成的表的字段顺序并没有按照我们java中定义变量的顺序来书写。所以我们查看PropertyContainer类会发现,它是有TreeMap这种无序的集合存放的,想要有序的集合,就得自己将所有的TreeMap修改为LinkedHashMap(有序的)
    • 将字段顺序和java中定义变量的顺序相同的步骤
      • 1.找到PropertyContainer类,在我们的项目中配置一个PropertyContainer,并且包名就为jar包中的类名org.hibernate.cfg.
      • 2.将里面的TreeMap全部替换为LinkedHashMap

关系(1对1,1对多,多对多)

接口链

增删改查接口

  • 基本的增删改查都不需要在dao层编写方法,只需要继承接口就行
  • 增和修改
    • service层
    • controller层
  • 删除
    • service层
    • controller层
  • 通过id查询单个对象
    • service层
    • controller层
  • 查询全部对象
    • service层
    • controller层

属性查询接口

  • 通过属性字段查询
    • 1.通过name和email查询
      • dao层
      • service层
      • controller层

多条件分页查询接口(还不如使用mybatis自己编写sql语句)

  • 公有部分:
    • SearchBean.java
      -
    • StudentController.java
      -
    • StudentService.java
      -
      - 方式一:
      - dao层:这种方式需要实现JpaSpecificationExecutor
      -
      - ServieceImpl层
      -
      - 方式二:
      - dao层:这种方式只需要继承JpaRepository
      -
      - ServiceImpl层
      -

SQL || HQL

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值