导图社区 SpringBoot
Spring Boot是Spring公司的一个顶级项目,和Spring Framework是一个级别的。 Spring框架在项目中作用是Spring整合各种其他技术,让其他技术使用更加方便。Spring Boot的启动器实际上就是一个依赖。这个依赖中包含了整个这个技术的相关jar包,还包含了这个技术的自动配置,以前绝大多数XML配置都不需要配置了。当然了,启动器中自动配置无法实现所有内容的自动配置,在使用Spring Boot时还需要进行少量的配置。
编辑于2020-05-08 22:26:05SpringBoot
1. SpringBoot简介
Spring Boot是Spring公司的一个顶级项目,和Spring Framework是一个级别的。 Spring Boot实际上是利用Spring Framework 4 自动配置特性完成。编写项目时不需要编写xml文件。发展到现在,Spring Boot已经具有很很大的生态圈,各种主流技术已经都提供了Spring Boot的启动器。
2. 基于SpringBoot的SpringMvc项目
配置依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.13.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
注意
在公司中可能会出现必须继承某个项目,如果Spring Boot用了继承就不能继承别的项目了。所以Spring Boot还提供了依赖的方式。 <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.1.13.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
新建启动类
/启动类 //可以自动扫描当前类所在包及子包的注解 //注意:此类要放入到包中 @SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class,args); } }
必须在包中新建这个类,不能直接放入到java文件夹。在com.bjsxt下新建自定义名称的类(规范:XXXXApplication)
新建控制器
3. SpringBoot配置文件
application.properties配置
properties的写法: spring.datasource.url=xxxx spring.datasource.username=mmmm
application.yml配置
application.yml
yml写法: spring: datasource: url: xxx username: mmmm
4. SpringBoot的项目结构
-- 项目名 --src --main --java java代码 --resource --public 公共资源。所有共享的内容。对外公开的内容。 --static 静态资源。图片、js、css。不会被服务器解析。 --js -- jquery.js 访问:http://ip:port/js/jquery.js 注意:该目录是SpringBoot可以直接识别的目录,会将其中的 静态资源编译到web项目中,并放到tomcat中使用。静态资源的 访问路径中无需声明static 例如:localhost:8080/a.png --templates thymeleaf页面所在目录。 --webapp 只有当页面使用jsp时才有。 --WEB-INF
5. SpringBoot整合MyBatis
依赖启动器
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.11</version> </dependency>
配置配置文件
在application.yml中添加 # mybatis 配置 spring: datasource: url: jdbc:mysql://127.0.0.1:3306/maven?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver # 加载MyBatis的mapper.xml mybatis: mapper-locations: classpath:mybatis/*.xml type-aliases-package: com.bjsxt.pojo #设置实体类包别名
添加注解
在启动类上添加注解,表示mapper接口所在位置 @SpringBootApplication @MapperScan("com.bjsxt.mapper") public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class,args); } }
在mapper上添加注解
如果不在MyApplication启动类上添加@MapperScan必须在UserMapper接口上添加@Mapper注解。 @Mapper public interface UserMapper {
如果不在MyApplication启动类上添加@MapperScan必须在UserMapper接口上添加@Mapper注解
6. SpringBoot整合Druid
Druid
Druid是由阿里巴巴推出的数据库连接池。它结合了C3P0、DBCP、PROXOOL等数据库连接池的优点。之所以从众多数据库连接池中脱颖而出,还有一个重要的原因就是它包含控制台。
代码实现
添加依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.13.RELEASE</version> </parent> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.11</version> </dependency> </dependencies>
编写配置文件
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/tingyu?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 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.163.1 # IP黑名单 (存在共同时,deny优先于allow) deny: 192.168.1.188 # 禁用HTML页面上的“Reset All”功能 reset-enable: false # 登录名 login-username: admin # 登录密码 login-password: 123456 mybatis: mapper-locations: classpath:mybatis/*.xml
spring.datasource.type是告诉程序使用druid连接池
7. SpringBoot整合PageHelper
添加依赖
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.12</version> </dependency>
编写代码
/pageNumber为当前页码 pageSize为页大小 PageHelper.startPage(pageNumber,pageSize); //查询全部 List<POJO> list = tbItemMapper.selectAll(); // 构造方法参数必须是查询全部的结果。否则无法知道给哪个sql后面拼接limit //PageInfo是分页查询所有查询结果封装的类,所有的结果都从这个类取 PageInfo<TbItem> pi = new PageInfo<>(list); System.out.println(pi.getList()); System.out.println(pi.getTotal());
8. SpringBoot整合logbick
<?xml version="1.0" encoding="UTF-8" ?> <configuration> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <property name="LOG_HOME" value="${catalina.base}/logs/" /> <!-- 控制台输出 --> <appender name="Stdout" class="ch.qos.logback.core.ConsoleAppender"> <!-- 日志输出编码 --> <layout class="ch.qos.logback.classic.PatternLayout"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n </pattern> </layout> </appender> <!-- 按照每天生成日志文件 --> <appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}/server.%d{yyyy-MM-dd}.log</FileNamePattern> <MaxHistory>30</MaxHistory> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n </pattern> </layout> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!-- 日志输出级别 --> <root level="info"> <appender-ref ref="Stdout" /> <appender-ref ref="RollingFile" /> </root> <logger name="com.bjsxt.mapper" level="DEBUG"></logger> <!--日志异步到数据库 --> <!-- <appender name="DB" class="ch.qos.logback.classic.db.DBAppender"> 日志异步到数据库 <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource"> 连接池 <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource"> <driverClass>com.mysql.jdbc.Driver</driverClass> <url>jdbc:mysql://127.0.0.1:3306/databaseName</url> <user>root</user> <password>root</password> </dataSource> </connectionSource> </appender> --> </configuration>
9. SpringBoot整合jsp
添加依赖
<dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency>
在 yml配置文件中配置视图解析器参数

在控制类中声明单元方法请求转发jsp资源

10. SpringBoot整合Thymeleaf
Thymeleaf简介
Thymeleaf视图显示技术。是Spring Boot官方推荐使用的视图显示技术。 Thymeleaf就是HTML页面,在HTML页面中嵌入Thymeleaf语法标签(HTML标签的属性),效果和JSTL等效。 Thymeleaf在Spring Boot项目中放入到resources/templates中。这个文件夹中的内容是无法通过浏览器URL直接访问的(和WEB-INF效果一样),所有Thymeleaf页面必须先走控制器。
步骤
在pom.xml中添加Thymeleaf启动器
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
Thymeleaf语法
为了有提示,修改html页面中<html>标签为 <html xmlns:th="http://www.thymeleaf.org" >
th:text属性
<!--直接向标签内部填充内容,清空原有内容 --> <span th:text="jqk"></span> <!-- 从作用于中获取name输入到标签内部 --> <span th:text="${name}"></span> <!-- 获取session作用域内容--> <span th:text="${session.name}"></span>
th:value
<input type="text" th:value="${name}"/>
th:if
<span th:if="${name}!='张三'">会显示</span> 注意:判断条件中逻辑判断符号写在${}外面的
th:each
<table border="1" width="500"> <tr> <td>编号</td> <td>姓名</td> </tr> <tr th:each="u : ${list}"> <td th:text="${u.id}" ></td> <td th:text="${u.name}"></td> </tr> </table>
11. SpringBoot项目打包部署
12. SpringBoot开发者工具
13. SpringBoot整合Quartz
Quartz简介
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目。可以方便的继承在Java项目中完成任务调度功能。总体功能和java.util.Timer很像,但是要比Timer功能更加强大。且不像Scheduler执行一个固定的任务,在Quartz可以对任务进行操作,新增任务,删除任务等。
核心
1.1.1 Job 表示一个工作,要执行的具体内容。 1.1.1 JobDetail--完成一件怎样的事情 表示一个具体的可执行的调度任务。JobDetail除了包含Job还包含了任务调度和策略。 1.1.2 Trigger--什么时候去调用 触发器。配置调度参数,定义什么时候去调用。 1.1.3 Scheduler--结合上面两者什么时间完成XX事情 表示调度容器。Scheduler可以包含多个JobDetail和Trigger。
案例
[1] 依赖引入 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> 2、Job工作定义 public class MyJob implements Job { @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { System.out.println("执行了我的任务--时间为:"+new Date().toLocaleString()); } } 3、定义实现执行过程 @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = SchedApplication.class) public class JobTest { @Test public void testAdd() { //[A]创建job对象--完成一样怎样的事情 JobDetail jobDetail = JobBuilder.newJob(MyJob.class).build(); //[B]创建触发器对象 --什么时间去做这件事情 //每秒执行一次 永远执行 Trigger trigger=TriggerBuilder.newTrigger().withSchedule(SimpleScheduleBuilder.repeatSecondlyForever()).build(); //[C]Scheduler 对象 相当于结合在什么时间做什么事情 try { Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.scheduleJob(jobDetail,trigger); //启动 scheduler.start(); } catch (SchedulerException e) { e.printStackTrace(); } //为了看到执行过程所以加上了睡眠 try { Thread.sleep(20000); } catch (InterruptedException e) { e.printStackTrace(); } }}
14. SpringBoot中bean管理
Spring Boot 由于没有XML文件,所以所有的Bean管理都放入在一个配置类中实现。 配置类就是类上具有@Configuration的类。这个类就相当于之前的applicationContext.xml
创建同类型Bean的实现方式
1.1 新建配置类 com.bjsxt.config.MyConfig , 规范都是放入到config文件夹中。 注意: 配置类要有@Configuration 方法要有@Bean @Configuration public class MyConfig { //访问权限修饰符没有强制要求,一般是protected //返回值就是注入到Spring容器中实例类型。 // 方法名没有强制要求,相当于<bean >中id属性。 @Bean protected User jqk(){ User user = new User(); user.setId(1L); user.setName("张三"); return user; } //自定义bean名称 @Bean("nml") protected User abc(){ User user = new User(); user.setId(2L); user.setName("李四"); return user; } } 1.2 新建测试类 如果Spring容器中存在同类型的Bean通过Bean的名称获取到Bean对象。或结合@Qualifier使用 @SpringBootTest(classes = BeanApplication.class) @RunWith(SpringJUnit4ClassRunner.class) public class test { @Autowired @Qualifier("jqk") private User abc; @Test public void test(){ System.out.println(abc); } }
配置类中获取容器对象
在配置类的方法中通过方法参数让Spring容器把对象注入。 //自定义bean名称 @Bean("nml") protected User abc(){ User user = new User(); user.setId(2L); user.setName("李四"); return user; } @Bean //可以直接从方法参数中取到。 public People peo(User nml){ People p = new People(); p.setUser(nml); return p; }
15. SpringBoot整合拦截器