天天看點

springboot(二)進階篇1.多資料源2.log4j日志3.aop面向切面程式設計4.緩存5.定時任務6.異步任務7.自定義參數8.多環境的配置9.修改端口号,修改項目名

繼之前的 springboot(一)入門篇 ,本次主要講springboot的一些其他特性,springboot内容很多,後續會持續更新.

  • 多資料源
  • log4j日志
  • aop面向切面程式設計
  • 緩存
  • 定時任務
  • 異步任務
  • 自定義參數
  • 多環境的配置
  • 修改端口号,修改項目名

1.多資料源

首先需要先分包

image.png

然後在application.properties下面進行配置

看效果圖一

Image.png

效果圖二

2.log4j日志

在resources下面建立log4j.properties

#log4j.rootLogger=CONSOLE,info,error,DEBUG
log4j.rootLogger=info,error,CONSOLE,DEBUG
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender     
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout     
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n     
log4j.logger.info=info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.layout=org.apache.log4j.PatternLayout     
log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n  
log4j.appender.info.datePattern='.'yyyy-MM-dd
log4j.appender.info.Threshold = info   
log4j.appender.info.append=true   
#log4j.appender.info.File=/home/admin/pms-api-services/logs/info/api_services_info
log4j.appender.info.File=/Users/dddd/Documents/testspace/pms-api-services/logs/info/api_services_info
log4j.logger.error=error  
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.layout=org.apache.log4j.PatternLayout     
log4j.appender.error.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n  
log4j.appender.error.datePattern='.'yyyy-MM-dd
log4j.appender.error.Threshold = error   
log4j.appender.error.append=true   
#log4j.appender.error.File=/home/admin/pms-api-services/logs/error/api_services_error
log4j.appender.error.File=/Users/dddd/Documents/testspace/pms-api-services/logs/error/api_services_error
log4j.logger.DEBUG=DEBUG
log4j.appender.DEBUG=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DEBUG.layout=org.apache.log4j.PatternLayout     
log4j.appender.DEBUG.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n  
log4j.appender.DEBUG.datePattern='.'yyyy-MM-dd
log4j.appender.DEBUG.Threshold = DEBUG   
log4j.appender.DEBUG.append=true   
#log4j.appender.DEBUG.File=/home/admin/pms-api-services/logs/debug/api_services_debug
log4j.appender.DEBUG.File=/Users/dddd/Documents/testspace/pms-api-services/logs/debug/api_services_debug
           

使用api

private static Logger log = Logger.getLogger(IndexController.class);
           

3.aop面向切面程式設計

建立WebLogAspect.java,面向切面程式設計意思是在某個包被執行之前通路或者執行之後通路,見以下代碼

package com.sunjian.app;

import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

@Component
@Aspect
public class WebLogAspect {

    private Logger logger = LoggerFactory.getLogger(getClass());

    @Pointcut("execution(public * com.sunjian.controller..*.*(..))")
    public void webLog() {
    }

    @Before("webLog()")
    public void doBefore(JoinPoint joinPoint) throws Throwable {
        // 接收到請求,記錄請求内容
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        // 記錄下請求内容
        logger.info("URL : " + request.getRequestURL().toString());
        logger.info("HTTP_METHOD : " + request.getMethod());
        logger.info("IP : " + request.getRemoteAddr());
        Enumeration<String> enu = request.getParameterNames();
        while (enu.hasMoreElements()) {
            String name = (String) enu.nextElement();
            logger.info("name:{},value:{}", name, request.getParameter(name));
        }
    }

    @AfterReturning(returning = "ret", pointcut = "webLog()")
    public void doAfterReturning(Object ret) throws Throwable {
        // 處理完請求,傳回内容
        logger.info("RESPONSE : " + ret);
    }

}
           

4.緩存

首先需要在resources下建立ehcache.xml,不用像springmvc還得去加載這xml,springboot約定大于配置,ehcache.xml是預設的檔案名,boot會自動加載

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
    updateCheck="false">
    <diskStore path="java.io.tmpdir/Tmp_EhCache" />

    <!-- 預設配置 -->
    <defaultCache maxElementsInMemory="5000" eternal="false"
        timeToIdleSeconds="120" timeToLiveSeconds="120"
        memoryStoreEvictionPolicy="LRU" overflowToDisk="false" />

    <cache name="baseCache" maxElementsInMemory="10000"
        maxElementsOnDisk="100000" />

</ehcache>
           

緩存使用需要在mapper的接口上加上下面圈紅線的地方即可。

以下是效果圖

然後通過調用http://localhost:8888/sunjian/remo   就可以删除緩存
           

5.定時任務

建立ScheduledTasks.java

package com.sunjian.app;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class ScheduledTasks {

    @Scheduled(fixedRate = 1000)//每隔1秒鐘執行一次
    public void add() {
      System.out.println("我正在執行.."+System.currentTimeMillis());
    }

}
           

注意:還需要在啟動類App上加上@EnableScheduling//開啟定時任務注解才行,否則定時任務不會被執行

6.異步任務

異步任務隻需要在方法上加上@Async,該方法就像被套了層new Thread()就是異步的了

@Async
    public void sedSms() {
        System.out.println("##sedSms##開始執行..  2");
        for (int i = 0; i < 5; i++) {
            try {
                Thread.sleep(1000);
            } catch (Exception e) {
                // TODO: handle exception
            }
            System.out.println("i:" + i);
        }
        System.out.println("##sedSms##結束執行..  3");
    }
           

7.自定義參數

在application.properties下定義了一個name=china

那麼在一個類下面,可以定義

@Value("${name}")
private String name;
           

這樣這個name就被指派了,值為china

8.多環境的配置

在工作中有碰到3種環境,生産環境,開發環境,測試環境,我平時一般都用開發環境,也就是dev,具體操作就是生成3個檔案分别是application-prd.properties,application-pre.properties和application-dev.properties ,然後在application.properties中加入spring.profiles.active=prd等,這樣就可以手動的去切換要使用的環境

9.修改端口号,修改項目名

隻需要在application.properties中加入如下代碼

server.port=8888
server.context-path=/sunjian
           

port是端口,context-path是項目名字

springboot-jsp-0.0.0-SNAPSHOT

密碼是6d9m

springboot(三)多資料源分布式事務

關注我的公衆号,都是滿滿的幹貨!

孫堅.gif