springboot(二)进阶篇

简介: 继之前的springboot(一)入门篇 ,本次主要讲springboot的一些其他特性,springboot内容很多,后续会持续更新.多数据源log4j日志aop面向切面编程缓存定时任务异步任务自定义参数多环境的配置修改端口号,修改项目名1.

继之前的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
目录
相关文章
|
XML Java 测试技术
SpringBoot入门篇 01、Springboot入门及配置(二)
SpringBoot入门篇 01、Springboot入门及配置(二)
|
4月前
|
前端开发 NoSQL Java
Springboot入门篇-springboot需要了解的核心概念
该内容是关于Spring Boot、Spring MVC和Spring的对比以及Spring Boot的核心特性。Spring Boot不是为了替代Spring和Spring MVC,而是简化其使用,通过自动配置和starters减少冗余配置。Spring Boot Starter是一组预配置的依赖集合,帮助开发者快速搭建应用。Spring Boot Starter Parent提供了统一的依赖管理和版本控制。此外,Spring Boot支持嵌入式web容器,如Tomcat,方便微服务部署。Spring Data提供了简化数据库交互的API,包括对JPA和MongoDB的支持。
34 0
|
12月前
|
前端开发 Java 中间件
SpringBoot进阶使用
SpringBoot进阶使用
71 0
SpringBoot进阶使用
|
XML 前端开发 JavaScript
SpringBoot入门到精通-SpringBoot入门(二)
SpringBoot入门到精通-SpringBoot入门
SpringBoot入门到精通-SpringBoot入门(二)
|
监控 Java 应用服务中间件
SpringBoot进阶
SpringBoot进阶
55 0
|
缓存 监控 NoSQL
SpringBoot进阶:掌握SpringBoot的高级特性
1. 使用Profiles进行环境配置 在开发、测试和生产环境中,我们的应用程序可能需要不同的配置。SpringBoot支持使用Profiles进行环境配置。通过创建不同的配置文件(如application-dev.yml、application-test.yml、application-prod.yml),我们可以为不同环境分别定义配置。通过设置spring.profiles.active属性来选择使用哪个配置文件:
317 0
|
开发框架 负载均衡 前端开发
SpringBoot入门篇 01、Springboot入门及配置(一)
SpringBoot入门篇 01、Springboot入门及配置(一)
|
XML 前端开发 JavaScript
SpringBoot入门篇 02、SpringBoot Web开发(一)
SpringBoot入门篇 02、SpringBoot Web开发(一)
|
缓存 JavaScript 前端开发
SpringBoot入门篇 02、SpringBoot Web开发
SpringBoot入门篇 02、SpringBoot Web开发
SpringBoot入门篇 02、SpringBoot Web开发
|
负载均衡 Dubbo 前端开发
SpringBoot学习路线大全之SpringBoot与分布式
本课程介绍在分布式系统中,国内常用的zookeeper+dubbo组合,以及Spring Boot推荐使用全栈的Spring,Spring Boot+Spring Cloud。
279 0
SpringBoot学习路线大全之SpringBoot与分布式