SpringBoot(2)

SpringBoot

1 JPA框架

这是 SpringCore 中的一个项目,致力于简化对数据库的访问,增强了 ORM 的操作。对于JPA(Java persisten API),全称为 Java 持久化 API,是 JAVAEE 中的一套规范 API。它推出的目的是对 ORM 框架进行大统一,它提供一套接口,让厂商们(如 hibernate)对 JPA提供实现。JPA 与 hibernate 的关系就像 JDBC 与 Mysql 驱动、Oracle 驱动一样的关系,只是它更加高度抽象,可以称之为 ORM 框架的接口。
传统企业喜欢用hibernate,实现了jpa接口,互联网不喜欢用(不够灵活)

1.1 Springboot-data-jpa
  1. 添加依赖:
<!--spring-boot-starter-data-jpa -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>
<!-- mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
  1. 配置数据源application.yml
# 配置数据源
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 1234
    url: jdbc:mysql://localhost:3306/jpa?useUnicode=true&characterEncoding=utf8
    type: com.zaxxer.hikari.HikariDataSource
  jpa:
    database: mysql
    hibernate:
      ddl-auto: update
    show-sql: true
    properties:
      hibernate:
        format_sql: true
  1. 生成pojo类
    Project Structure–Modules-- +一个GPA
    先连接数据库,然后生成实体类:
    在这里插入图片描述
    在这里插入图片描述
  2. dao层
public interface MemberDao extends JpaRepository<Member,Integer> {
    Member findByMemberName(String memberName);
    Member findByMemberNameAndMemberAge(String memberName,Integer memberAge);
    List<Member> findByMemberNameLike(String memberName);
}

确实很神奇,注意属性名字不能打错了findByMemberName,错了就报错…

  1. 测试
@SpringBootTest
class MyfirstApplicationTests {
	@Autowired
    private MemberDao memberDao;
	@Test
    public void test02() {
        Member tom = memberDao.findByMemberName("tom");
        System.out.println("tom:"+tom);
        Member tom1 = memberDao.findByMemberNameAndMemberAge("tom", 13);
        System.out.println("tom1:"+tom1);
        List<Member> tom2 = memberDao.findByMemberNameLike("tom");
        System.out.println("tom2:"+tom2);
    }
}

2 整合mybatis

mybatis plus

  1. 导入依赖:mybatis-spring-boot-starter

  2. 配置数据源和mybatis相关
    在这里插入图片描述

  3. dao层
    启动类加入mapper自动扫描
    在这里插入图片描述
    或者在对应的mapper接口上加上@Mapper接口也行
    在这里插入图片描述
    useGeneratedKeys: 设置是否使用 JDBC 的 getGenereatedKeys 方法获取主键并赋值到 keyProperty 设置的领域模型属性中。
    keyProperty:pojo 中的属性名
    keyColumn:数据库中对应的字段名

  4. service层
    在对应的service加上事务注解:
    @Transactional(rollbackFor = Exception.class)
    在业务层放是因为一个业务要么成功要么全部失败

  5. test测试
    @Autowried
    private MemberDao md;
    在这里插入图片描述

https://blog.csdn.net/caoxuekun/article/details/76944001

3 SpringBoot定时任务

常用的定时任务

  1. java自带的java.util.Timer类
    timer:配置麻烦,时间延后问题
    timertask:不推荐
  2. Quartz框架(基于Timer):配置简单,XML或者注解
  3. SpringBoot使用注解方式开启定时任务
    1)启动类里面@EnableScheduing开启定时任务,自动扫描
    2)定时任务业务类,加注解@Component 被容器扫描
    3)定时执行的方法加上注解 @Scheduled(fixedRate=2000)定期执行一次

简单的定时任务,2s刷新一次:
在这里插入图片描述

3.1 定时任务配置
cron

cron定时任务表达式 @Scheduled(cron="*/5 * * * * *"):每隔5s执行一次,最多只能有6个 *

@Scheduled(cron=“5 * * * * *”):每分钟的第5秒
在线工具:http://tool.lu/crontab/

在这里插入图片描述

fixedRate

定时多久执行一次(上一次开始执行时间点后 xx 秒再次执行;)

fixedDelay

上一次执行结束时间点后 xx 秒再次执行

fixedRateString/fixedDelayString

字符串形式的配置

4 SpringBoot 异步任务

同步和异步任务区别:
同步,依次执行,

异步使用场景:
适用于处理log、发送邮件、短信等
下单接口–>查库存 100,余额校验 150,是否有优惠券等

4.1 简单异步任务

1.启动类@EnableAsync开启功能,自动扫描
2.业务类
@Component
@Async 表示异步任务(ajax默认true异步)
在这里插入图片描述
task02…
3.controller层使用:
在这里插入图片描述
说明异步任务不影响主线程的执行时间,适合日志处理,短信,报表等

4.2 带返回值的异步任务

有些业务场景需要异步任务给返回值,比如余额查询
需要增加Future< String>返回值(java.util.concurrent.Future)
在这里插入图片描述
在这里插入图片描述

5 SpringBoot整合日志

常用处理java 日志组件 slf4j,log4j,logback(官方推荐),common-logging等。
在这里插入图片描述
path:D:\logs

5.1 Logback

基于Log4j 基础上大量改革,不能单独使用,推荐配合日志框架SLF4J 来使用。logback 分成三个模块:logback-core, logback-classic 和 logback-access; lockback-core是其他两个模块的基础模块。

核心对象:
Logger:日志记录器
Appender:指定日志的输出的目的地,目的地可以是控制台,文件
Layout:日志布局,格式化日志信息的输出

日志级别说明:
debug < info < warn < error

Log4j配置示例:

### 设置###
log4j.rootLogger = debug,stdout,D,E
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出 DEBUG 级别以上的日志到=D://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出 ERROR 级别以上的日志到=D://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
5.2 整合

在resources 下面创建日志文件logback-spring.xml,官方推荐 -spring.xml 结尾,默认加载配置顺序 logback-spring.xml,logback-spring.groovy,logback.xml,or logback.groovy
配置文件内容:

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender name="consoleApp" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
</pattern>
</layout>
</appender>
<appender name="fileInfoApp" 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>
<encoder>
<pattern>
%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
</pattern>
</encoder>
<!-- 滚动策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 路径 -->
<fileNamePattern>app_log/log/app.info.%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<appender name="fileErrorApp" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter><encoder>
<pattern>
%date{yyyy-MM-dd HH:mm:ss.SSS} %----5level[%thread]%logger{56}.%method:%L -%msg%n
</pattern>
</encoder>
<!-- 设置滚动策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 路径 -->
<fileNamePattern>app_log/log/app.err.%d.log</fileNamePattern>
<!-- 控制保留的归档文件的最大数量,超出数量就删除旧文件,假设设置每个月滚动,
且<maxHistory> 是 1,则只保存最近 1 个月的文件,删除之前的旧文件 -->
<MaxHistory>1</MaxHistory>
</rollingPolicy>
</appender>
<root level="INFO">
<appender-ref ref="consoleApp"/>
<appender-ref ref="fileInfoApp"/>
<appender-ref ref="fileErrorApp"/>
</root>
</configuration>
5.3 利用AOP进行日志记录
  1. 依赖:spring-boot-starter-aop

  2. advice—>MyAdvice.java
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值