天天看点

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