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應用