SpringBoot的起步依赖
一般认为,SpringBoot 微框架从两个主要层面影响 Spring 社区的开发者们:
- 基于 Spring 框架的“约定优先于配置(COC)”理念以及最佳实践之路。
- 提供了针对日常企业应用研发各种场景的 spring-boot-starter 自动配置依赖模块,如此多“开箱即用”的依赖模块,使得开发各种场景的 Spring 应用更加快速和高效。
这些“开箱即用”的依赖模块都采用spring-boot-starter-作为命名的前缀,并皆位于org.springframework.boot 包或者命名空间下
spring-boot-starter-logging
在pom.xml中加入以下依赖则SpringBoot应用将自动使用logback作为应用日志框架:
<dependency>
<groupId> org.springframework.boot </groupId>
<artifactId> spring-boot-starter-logging </artifactId>
</dependency>
三级标题引入log4j2日志
SpringBoot内置了一套日志框架,由 SLF4j 与 LogBack组成。
- java.util.logging:是JDK在1.4版本中引入的Java原生日志框架
-Log4j:Apache的一个开源项目,可以控制日志信息输送的目的地是控制台、文件、GUI组件等,
可以控制每一条日志的输出格式,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应
用的代码。虽然已经停止维护了,但目前绝大部分企业都是用的log4j。 - LogBack:是Log4j的一个改良版本
- Log4j2:Log4j2已经不仅仅是Log4j的一个升级版本了,它从头到尾都被重写了
引入jar包
依赖:
<dependency>
<groupId> org.springframework.boot </groupId>
<artifactId> spring-boot-starter-logging </artifactId>
</dependency>
若使用log4j或者log4j2:
<dependency>
<groupId> org.springframework.boot </groupId>
<artifactId> spring-boot-starter-log4j </artifactId>
</dependency>
``
或者:
```java
<dependency>
<groupId> org.springframework.boot </groupId>
<artifactId> spring-boot-starter-log4j2 </artifactId>
</dependency>
注意:一定不要将这些完成同一目的的 spring-boot-starter 都加到依赖中
引入配置文件:
如果自定义了文件名,需要在application.yml中配置:
logging:
config: classpath:xxxx.xml
level:
cn.jay.repository: trace
- 默认名log4j2-spring.xml,就省下了在application.yml中配置
`
配置参数
1.日志级别:
机制:如果一条日志信息的级别大于等于配置文件的级别,就记录
trace:追踪,就是程序推进一下,可以写个trace输出
debug:调试,一般作为最低级别,trace基本不用。
info:输出重要的信息,使用较多
warn:警告,有些信息不是错误信息,但也要给程序员一些提示。
error:错误信息。用的也很多。
fatal:致命错误。
输出源:
CONSOLE(输出到控制台)
FILE(输出到文件)
格式:
SimpleLayout:以简单的形式显示
HTMLLayout:以HTML表格显示
PatternLayout:自定义形式显示
PatternLayout自定义日志布局:
%d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间,输出到毫秒的时间
%-5level : 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
%c : logger的名称(%logger)
%t : 输出当前线程名称
%p : 日志输出格式
%m : 日志内容,即 logger.info("message")
%n : 换行符
%C : Java类名(%F)
%L : 行号
%M : 方法名
%l : 输出语句所在的行数, 包括类名、方法名、文件名、行数
hostName : 本地机器名
hostAddress : 本地ip地址
spring-boot-starter-web与快速 Web 应用开发
依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
得到可执行的Web应用,没提供任何服务Web请求的Controller,所以任何路径返回SpringBoot默认的错误页面(whitelabel error page),加入下述代码:
@RestController
public class IndexController {
@RequestMapping("/")
public String index() {
return "hello, there";
}
}
重新运行 ,错误页面将被我们的 Controller 返回的消息所替代,一个简单的 Web 应用就这样完成了
注意:如果引入 spring-boot-start-web 后还想使用 log4j2,由于springboot默认是用logback的日志框
架的,所以需要排除logback,不然会出现jar依赖冲突的报错。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions><!-- 去掉springboot默认配置 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency> <!-- 引入log4j2依赖 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
在外部容器运行SpringBoot
实际部署中,运行tomcat或者weblogic这种外部j2ee容器部署应用
1.在src/main目录下创建webapp文件夹作为我们的WebRoot根目录,在其下创建WEB-INF/web.xml文件,保持空内容即可
<?xml version="1.0" encoding="utf-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
</web-app>
2.改造ApringApplication启动类,继承SpringBootServletInitializer类,并实现SpringApplicationBuilder方法
@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder
application) {
return application.sources(MyApplication.class);
}
public static void main(String[] args) {
lication.class);
}
}
3.在pom.xml文件中,project下面添加package标签
<packaging>war</packaging>
4.看情况,若编译的war较大,包含有内置的tomcat,为避免与外部容器冲突,需要将内置tomcat移除
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
5.按正常web项目部署
spring-boot-start-jdbc
若用 SpringBoot 为我们自动配置数据访问的基础设施,那么,我们需要直接或者间接地依赖spring-jdbc,一旦 spring-jdbc 位于我们 SpringBoot 应用的 classpath,即会触发数据访问相关的自动配置行为,最简单的做法就是把 spring-boot-starter-jdbc 加为应用的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>${springboot.version}</version>
</dependency>
连接mysql数据库,需要引入mysql驱动依赖
<!-- MySQL 连接驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
然后,需要配置数据源:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/chemistic?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
其中spring.datasource.url中chemistic为数据库库名
通过Lombok辅助
Lombok帮我们解决实体Bean中大量的Getter/Setter方法,以及toString,hashCode等方法,在运行过程中,帮助自动生成的,极大的减少了代码总量
依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
spring-boot-start-jpa
SpringData:其实SpringData就是Spring提供了一个操作数据的框架。而SpringData JPA只是
SpringData框架下的一个基于JPA标准操作数据的模块。
SpringData JPA:基于JPA的标准数据进行操作。简化操作持久层的代码。只需要编写接口就可以。
依赖:
<!--SpringData JPA的启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
创建实体类entity和Dao接口
entity实体类代码;
package com.example.springbootdemo1.entity;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Data
@Entity
@Table(name="student")
public class student {
@Id
@Column(name="sid")
private int id;
@Column(name = "gender")
private String gender;
@Column(name= "sname")
private String sname;
}
注意:@Entity 注解是注册实体类的,里面需要写上注册的名称,否则后面写hql的时候会报找不到映射
实体类。
如果在查询注解中设置 nativeQuery = true,则不会发生此异常
@Table 注解是绑定数据库表名。
@Column 注解绑定数据库表字段
每个实体类中都需要一个主键字段属性,用 @Id 主键标明
创建Dao接口:
public interface IStudentDao extends JpaRepository<Student, Integer> {
@Query(nativeQuery = true, value = "select * from student") List<Student>
findAll_bbb();
}
接口类继承 JpaRepository<实体类名称, 主键字段类型>
不需要写任何接口,JpaRepository 已经提供了一系列操作方法,可以直接使用
如果需要自定义方法,可以使用 @Query 注解来定义hql,如果设置 nativeQuery = true,则 values 值
就是原生sql。
注意:hql 是 hibernate 的对象操作语言,需要有 .hbm.xml 映射文件配合
定义 Service 接口与 ServiceImpl 实现类
测试