一、SpringBoot的特点:
- 1.使用配置注解,不需要xml;
- 2.快速搭建,开发;
- 3简化maven;
- 4方便开发
- 5内嵌tomcat配置简单
- 6内置健康检查、监控等
- 7自动配置,让配置更加简单
二、SpringBoot基本的使用:
1.项目的基本结构:
src
mian
java
包名
类名
resoucres
yml配置文件
templates临时文件、模板目录
static静态资源
2.打包单独运行:
1. 导入打包插件:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2.打包
3.运行jar包
java -jar 所要运行的项目.jar
4.热部署:
导入依赖包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
编译代码:
ctrl + F9
3.配置IDEA的自动编译功能
配置setting的自动编译
按 ctrl +shift + alt + / -> registry -> 如下
三.yml语法:
多个级之间用:分类,并且换行缩进 , 值不用换行 , 值前面有个空格
四.SpringBoot读取配置
一.使用@Value标签
配置文件
user:
username: ls
age: 99
password: 456
绑定配置的对象
@Component
public class User {
//@Value :从配置文件中取值 SPEL
@Value("${user.username}")
private String username = "zs";
@Value("${user.password}")
private String password = "123";
@Value("${user.age}")
private int age = 18;
. . . . . .
二.使用@ConfigurationProperties
配置文件
employee:
username: ls
password: 456
age: 99
绑定配置的对象
@Component
@ConfigurationProperties(prefix = "employee")
public class Employee {
private String username = "zs";
private String password = "123";
private int age = 18;
@ConfigurationProperties : 自动的根据前缀从配置中过滤出配置项目,然后根据当前对象的列名进行匹配,自动赋值
五.多环境配置
1.方式一
spring:
profiles:
active: test #激活(选择)环境test
spring:
profiles: dev #指定环境名字dev
server:
port: 9999
spring:
profiles: test #指定环境名字test
server:
port: 8888
注意:开在外部指定配置:java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
2.方式二
通过配置文件的名字来识别环境
application-dev.yml
server:
port: 9999
application-test.yml
server:
port: 8888
application.yml
spring:
profiles:
active: test
#根据文件名字配置 application-dev.properties
六.日志的使用:
1.基本使用
private Logger logger = LoggerFactory.getLogger(MySpringBootTest.class);
…
logger.error(“我是一个error日志…”);
logger.warn(“我是一个warn日志…”);
logger.info(“我是一个info日志…”);
logger.debug(“我是一个debug日志…”);
logger.trace(“我是一个trace日志…”);
基于Lombok打印
1.导入依赖
org.projectlombok lombok 1.16.10 provided2.安装Lombok的idea插件
3.打印日志
@RestController
@Slf4j
public class HelloController{
...
log.trace("全部信息...");
log.debug("调试信息...");
log.info("详细信息...");
log.warn("警告信息...");
log.error("错误信息...");
}
2.配置日志
#logging.level.cn.itsource=error
#logging.file=my.txt
#logging.file.max-size=1KB
#logging.pattern.console="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"
3.指定配置文件配置logback-spring.xml
<!--ConsoleAppender 用于在屏幕上输出日志-->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<!--定义控制台输出格式-->
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--打印到文件-->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/springboot.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>logs/springboot-%d{yyyyMMdd}-%i.log.gz</fileNamePattern>
<maxFileSize>1KB</maxFileSize>
<maxHistory>30</maxHistory>
<!--总上限大小-->
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
<!--定义控制台输出格式-->
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--root是默认的logger 这里设定输出级别是debug-->
<root level="info">
<!--定义了两个appender,日志会通过往这两个appender里面写-->
<appender-ref ref="stdout"/>
<appender-ref ref="file"/>
</root>
<!--如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况-->
<!--additivity表示要不要使用rootLogger配置的appender进行输出-->
<logger name="cn.itsource" level="error" additivity="false">
<appender-ref ref="stdout"/>
<appender-ref ref="file"/>
</logger>
</configuration>
七.SpringBoot集成Thymeleaf:
1.模板引擎的原理
2.jsp的原理
集成Thymeleaf
1.导入依赖
org.springframework.boot spring-boot-starter-thymeleaf 2.创建模板 resources/templates/hello.html成功!
<div th:text="${msg}">这是显示欢迎信息</div>
3.编写controller
@Controller
public class HelloController {
@RequestMapping("/index")
public String hello(Model model){
model.addAttribute(“msg”,“后面有人,认真听课” );
return “hello”;
}
}
4.编写主配置类
5.Thymeleaf的自动配置原理
@EnableAutoConfiguration 开启自动配置功能,通过一个AutoConfigurationImportSelector导入选择器去扫描 spring-boot-autoconfigure-2.0.5.RELEASE.jar 自动配置包下面的 spring.factories 文件中的很多很多的自动配置的类
而:ThymeleafAutoConfiguration 是的Thymeleaf的自动配置 ,在这个自动配置类里面通过一个ThymeleafProperties去读取配置文件中的配置(也有默认配置) ,来自动配置Thymeleaf,比如Thymeleaf的视图解析器的自动配置如下:
@Bean
@ConditionalOnMissingBean(name = “thymeleafViewResolver”)
public ThymeleafViewResolver thymeleafViewResolver() {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
…
return resolver;
}
6.Thymeleaf的语法
八.静态资源:
1.静态资源目录
resource/static
2.webjars
导入jquery依赖 ( http://www.webjars.org/)
org.webjars jquery 3.4.1 导入jquery的js3.首页
resources/index.html
4.图标
resources/favicon.ico
九.SpringBoot中的MVC配置:
1.配置拦截器
定义拦截器
@Component
public class MyHandlerInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle................:"+request.getRequestURI());
return super.preHandle(request, response, handler);
}
}
注册拦截器
@SpringBootApplication
public class ApplicationConfig implements WebMvcConfigurer {
@Autowired
private MyHandlerInterceptor myHandlerInterceptor;
/**
* 注册拦截器
* @param registry :拦截器的注册器
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myHandlerInterceptor).addPathPatterns("/**").excludePathPatterns("/login");
}
2.添加视图控制器
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/xx").setViewName(“hello2.html”);
}
当访问/xx 定位到 templates/hello2.html
十.集成DataSource:
1.导入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.20</version>
</dependency>
<!-- mysql 数据库驱动. -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
2.手动配置方式
手动配置四个属性
jdbc:
username: root
password: 123456
url: jdbc:mysql:///ssm
driver-class-name: com.mysql.jdbc.Driver
@Bean
@ConfigurationProperties(prefix = “jdbc”)
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
return dataSource ;
}
3.自动配置方式 - 重点
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql:///ssm
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSo
十一. 集成MyBatis:
1.导入依赖
org.mybatis.spring.boot mybatis-spring-boot-starter 1.1.1 2.配置Mybatismybatis:
mapper-locations: classpath:cn/itsource/mapper/*Mapper.xml
3.配置Mapper接口扫描包
@SpringBootApplication
@MapperScan(“cn.itsource.web.controller.mapper”)
public class ApplicationConfig {
…
}
十二.集成事务:
1.使用注解方式
开启事务管理器
@SpringBootApplication
@MapperScan(“cn.itsource.web.controller.mapper”)
@EnableTransactionManagement
public class ApplicationConfig{
…}
service打事务标签
@Transactional
@Service
public class EmployeeServiceImpl
2.使用xml方式配置
导入依赖
org.springframework.boot spring-boot-starter-aop 配置事务xml<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<aop:config>
<aop:pointcut expression="execution(* cn.itsource.web.controller.service..*.*(..))" id="coreServicePointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="coreServicePointcut"/>
</aop:config>
<!-- aop应用事务管理 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="select*" read-only="true"/>
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
导入xml配置
…
@ImportResource(“classpath:applicationContext-service.xml”)
public class ApplicationConfig
十三.PageHelper的使用:
1.导入依赖
com.github.pagehelper pagehelper-spring-boot-starter 1.2.3 2.编写查询语句 select id,username,realName from t_employee 注意:用了pagehelper之后 ,查询总条数的sql不用写 , limit 不用写 , 如上:3.查询的service
@Override
public Page selectPage() {
PageHelper.startPage(1,5 );
Page page = (Page) employeeMapper.selectPage();
return page;
}
PageHelper.startPage(1,5 ):设置当前页和每页条数
Page :是pagehelper自己封装的页面对象,如同我们以前的PageList ,里面有总条数,列表,总页数等等
4.获取结果
Page page = employeeService.selectPage();
System.out.println(“总条数:”+page.getTotal());
for (Employee employee : page.getResult()) {
System.out.println(employee);
}