继之前的springboot(一)入门篇 ,本次主要讲springboot的一些其他特性,springboot内容很多,后续会持续更新.
- 多数据源
- log4j日志
- aop面向切面编程
- 缓存
- 定时任务
- 异步任务
- 自定义参数
- 多环境的配置
- 修改端口号,修改项目名
1.多数据源
首先需要先分包
image.png
然后在application.properties下面进行配置
image.png看效果图一
Image.png效果图二
image.png2.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.png9.修改端口号,修改项目名
只需要在application.properties中加入如下代码
server.port=8888
server.context-path=/sunjian
port是端口,context-path是项目名字
springboot-jsp-0.0.0-SNAPSHOT 密码是6d9m
springboot(三)多数据源分布式事务
关注我的公众号,都是满满的干货!
网友评论