美文网首页计算机微刊
springboot(二)进阶篇

springboot(二)进阶篇

作者: zhuyuansj | 来源:发表于2017-10-07 02:54 被阅读21次

    继之前的springboot(一)入门篇 ,本次主要讲springboot的一些其他特性,springboot内容很多,后续会持续更新.

    • 多数据源
    • log4j日志
    • aop面向切面编程
    • 缓存
    • 定时任务
    • 异步任务
    • 自定义参数
    • 多环境的配置
    • 修改端口号,修改项目名

    1.多数据源

    首先需要先分包


    image.png

    然后在application.properties下面进行配置

    image.png

    看效果图一

    Image.png

    效果图二

    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的接口上加上下面圈红线的地方即可。

    image.png

    以下是效果图

    image.png Image.png
    然后通过调用http://localhost:8888/sunjian/remo   就可以删除缓存
    
    image.png

    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等,这样就可以手动的去切换要使用的环境

    image.png

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

    只需要在application.properties中加入如下代码

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

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

    springboot-jsp-0.0.0-SNAPSHOT 密码是6d9m

    springboot(三)多数据源分布式事务
    关注我的公众号,都是满满的干货!

    孙坚.gif

    相关文章

      网友评论

        本文标题:springboot(二)进阶篇

        本文链接:https://www.haomeiwen.com/subject/ixjdyxtx.html