springboot增強

1.SpringBoot配置文件:修改springboot配置的默認值  html

a)  配置文件名稱:application.properties或application.ymljava

                 i.     application.properties傳統方式,不是很優美規範mysql

                ii.     application.yml: 冒號後面必須加上一個空格,且屬性和值是大小寫敏感的git

  1. 配置例子語法

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  #指定是屬於哪個環境,是否已經激活

  1. 自動配置的原理

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.     配置視圖解析器

  1. 直接在application.yml裏面配置前綴和後綴
    thymeleaf:
      prefix:
    classpath:/templates/
      suffix: .html

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

相關文章
相關標籤/搜索