1.SpringBoot配置文件:修改springboot配置的默认值 html
a) 配置文件名称:application.properties或application.ymljava
i. application.properties传统方式,不是很优美规范mysql
ii. application.yml: 冒号后面必须加上一个空格,且属性和值是大小写敏感的git
a) server:github
port: 8081spring
path: /hello
sql
b) 在yml配置文件配置对象的属性和值的写法:换行必定要缩进数据库
friends:express
lastName: zhangsan设计模式
age: 20
c) springboot读取配置
a) 使用@value标签读取
i. 配置文件配置
user:
name: ls
age: 18
ii. 绑定配置对象
@Component
public class User {
//@Value :从配置文件中取值 SPEL
@Value("${user.name}")
private String name = "zs";
@Value("${user.age}")
private Integer age = 18;
b) 使用@ConfigrationProperties
i. 配置文件配置
user:
name: ls
age: 18
ii. 绑定配置对象
@Component
@ConfigurationProperties(prefix = "person")
public class User {
//@Value :从配置文件中取值 SPEL
@Value("${user.name}")
private String name = "zs";
@Value("${user.age}")
private Integer age = 18;
2.多环境配置切换
a) spring:
profiles:
active: prod #激活环境名称
---
server:
port: 8082
spring:
profiles: dev #指定环境名称是属于哪个环境
---
server:
port: 8083
spring:
profiles: prod #指定是属于哪个环境,是否已经激活
a)
3.Springboot整合测试
a) 导入测试依赖包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
类上打注解
@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class) //这事一个Spring测试,要告诉它在哪儿加载Spring配置文件,其实告诉它应用类型就ok
classes = 配置类的字节码对象
4.Springboot的日志支持slf4j日志框架实现
日志级别:trance<debug<info<warn<error,springboot是默认是开启info级别
若是要修改springboot默认的日志级别,就在springboot的主配置文件里面去修改日志级别,注意:这里必定要加上你打印日志所在类的包名
#修改springboot的默认的日志级别
logging:
level:
cn://包名,须要输出的日志的包
itsource:trace //日志级别
#root: trace #根日志级别
a) slf4j日志框架实现了对其余日志框架封装
获取日志打印器
Logger logger = LoggerFactory.getLogger(Xxx.class); //
所在类的字节码对象
logger.error("这是error错误");
对日志文件进行封装,每次运行就会打印出这个日志信息
b) slf4j日志框架经过门面设计模式来设计,可是其余日志框架又不遵循slf4j的规范,因此就slf4j设计了一个适配器模式来适配其余日志框架.从新写了一个包来适配其余日志框架.
logging:
level:
cn:
itsource: trace
file: mylog.txt #在target平级生成一个日志文件叫mylog.txt文件
pattern:
file: %d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n # 指定文件中日志输出的格式
b) 日志指定配置,当配置知足不了咱们的需求时使用(logback-spring.xml),在springboot里面的日志框架是认识logback-spring.xml这个xml文件的.
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="true" scan="true" scanPeriod="1 seconds"> <!-- 日志格式 --> <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n"/> <!--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="trace" additivity="false"> <appender-ref ref="stdout"/> <appender-ref ref="file"/> </logger> </configuration>
5.模板引擎
a) 一些模板引擎: JSP、Velocity、Freemarker、Thymeleaf
b) Springboot推荐使用Thymeleaf模板引擎
i. 导入Thymeleaf包
<!--thymeleaf模板引擎包--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
ii. 定义一个类设置模板生成的位置
@ConfigurationProperties(prefix = "spring.thymeleaf") public class ThymeleafProperties { // 定义编码格式 private static final Charset DEFAULT_ENCODING = StandardCharsets.UTF_8; // 定义视图解析前缀 private static final String DEFAULT_PREFIX = "classpath:/templates/"; // 定义视图解析后缀 private static final String DEFAULT_SUFFIX = ".html"; } 将HTML页面放入classpath:/templates/, thymeleaf会对页面进行自动渲染
这里本人没有写完ThymeleafProperties,由于springboot自身封装了前缀和后缀,直接写一个模板,就会自动生成一个页面,跳转页面时直接跳转到页面文件名.
iii. 配置视图解析器
iv. Controller层
@Controller public class HelloController { @RequestMapping("/hello") public String hello(Model model){ //想页面 model.addAttribute("hello","yhptest"); //返回hello.HTML页面 return "hello"; } }
iv页面展现返回的数据
<html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>成功!</h1> <!--使用语法th:text 将div里面的文本内容设置为 --> <div th:text="${hello}">这是显示欢迎信息</div> </body> </html>
8.Springboot拦截器配置
1.自定义一个MyHanderAdapter 去实现(HanderInterceptor)
赋写preHeader方法
public class MyHandlerInterceptor implements HandlerInterceptor {
long start = System.currentTimeMillis();
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
start = System.currentTimeMillis();
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("Interceptor cost="+(System.currentTimeMillis()-start));
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
这里咱们须要实现HandlerInterceptor这个接口,这个接口包括三个方法,preHandle是请求执行前执行的,postHandler是请求结束执行的,但只有preHandle方法返回true的时候才会执行,afterCompletion是视图渲染完成后才执行,一样须要preHandle返回true,该方法一般用于清理资源等工做。除了实现上面的接口外,咱们还需对主配置类其进行配置:
1 @Configuration 2 3 public class InterceptorConfig extends WebMvcConfigurerAdapter { 4 5 注入咱们自定义的拦截器 6 @Autowired 7 8 private MyHandlerInterceptor myHandlerInterceptor; 9 10 @Override 11 12 public void addInterceptors(InterceptorRegistry registry) { 13 14 registry.addInterceptor(myHandlerInterceptor).addPathPatterns("/**");//拦截全部 15 16 super.addInterceptors(registry); 17 18 } 19 20 }
2.主配置类实现WebMvcConfigrater
赋写addInterceptor方法添加拦截器 // 添加拦截器 @Override public void addInterceptors(InterceptorRegistry registry) { // excludePathPatterns("/login"),放行/login路径,其余路径放行 registry.addInterceptor(myHealderConfigraterAdaper).excludePathPatterns("/login"); }
3.添加视图控制器
// 添加视图控制器 @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/mm").setViewName("hello2");//设置页面名称 }
9.springboot持久化
1.导入数据库驱动包和mybatis与springboot的整合包
(1) 2.手动配置DataSource:自定义配置类配置DataSource,在yml配置四大金刚.
在application.properties添加配置文件;
######################################################## ###datasource ######################################################## spring.datasource.url = jdbc:mysql://localhost:3306/ssm spring.datasource.username = root spring.datasource.password = root spring.datasource.driverClassName = com.mysql.jdbc.Driver spring.datasource.max-active=20 spring.datasource.max-idle=8 spring.datasource.min-idle=8 spring.datasource.initial-size=10
//配置别名
mybatis.type-aliases-package=包名,包名….
测试的时候必定要在配置类上配置@MapperScan("cn.itsource.springboot.mapper")扫描Mapper层
3.springboot自动配置DataSource
https://blog.csdn.net/tt50335971/article/details/85254730
4.springboot集成mybatis
<!-- mysql 数据库驱动. --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- spring-boot mybatis依赖: 请不要使用1.0.0版本,由于还不支持拦截器插件, 1.1.1 是博主写帖子时候的版本,你们使用最新版本便可 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency>
5事务实现
1.注解方式实现事务:配置类上@EnableTranscationManagment,在service层打上@Transcational标签
2.xml配置实现事务
c)导入aop的集成包
a)写一个xml配置文件
b)主配置类上使用注解导入xml配置文件
<!-- 配置事物管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- aop应用事务管理 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> //只读事务 <tx:method name="find*" propagation="SUPPORTS" read-only="true" /> <tx:method name="get*" read-only="true"/> <tx:method name="select*" read-only="true"/> <tx:method name="search*" read-only="true"/> <tx:method name="query*" read-only="true"/> //支持全部事物 <tx:method name="*" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut expression="execution(* cn.itsource.eloan.core.service..*.*(..))" id="coreServicePointcut"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="coreServicePointcut"/> </aop:config>
注意:必定要在主配置类上加@ImportResource("classpath:xml文件名 ")标签
10,pageHeler分页使用: PageHelper是mybatis一个插件,能够用它完成分页
1.导入他的依赖
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.0</version> </dependency>
2.不用写count和每页条数的SQL语句和limit语句,返回的page对象至关因而以前的PageList对象,封装了咱们以前写的count(数据总数)和ArrayList(每页的数据)
3.service层调用PageHelper去查询总条数和每页显示的数据数,查询的数据封装成Page对象, 返回这个Page对象.
public class testPageHelper { @Test public void testPageHelper() { //建立一个 spring 容器 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext*.xml"); //从 spring 容器中获取 TbItemMapper 代理对象 TbItemMapper tbItemMapper = applicationContext.getBean(TbItemMapper.class); //执行查询 TbItemExample example = new TbItemExample(); //分页处理 PageHelper.startPage(1, 10); //第一页 取10条 List<TbItem> list = tbItemMapper.selectByExample(example); for (TbItem tbItem : list) { System.out.println(tbItem.getId() + " "+ tbItem.getTitle()); } //取分页信息 PageInfo<TbItem> pageInfo = new PageInfo<>(list); System.out.println(pageInfo.getTotal()); } }
11.搭建一个完整springboot应用