目录
vue+springboot练手demo(一)——环境搭建
vue+springboot练手demo(二)——查询功能的实现
vue+springboot练手demo(三)——删除功能的实现
vue+springboot练手demo(四)——新增和修改功能的实现
vue+springboot练手demo(五)——校验功能
vue+springboot练手demo(六)——Swagger、Druid监控和日志
本章内容可以放在搭建环境那一章,放在这里只是为了效果更明显。
Swagger
Swagger为当下比较火的restful接口文档,为了与时俱进我们也来在这个小demo中使用swagger
导入依赖
io.springfox
springfox-swagger2
2.7.0
io.springfox
springfox-swagger-ui
2.7.0
编写配置类
@Configuration
@EnableSwagger2
public class swagger2 {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.feng.employees.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
//页面标题
.title("职工信息管理系统")
//条款地址
.termsOfServiceUrl("http://feng.io/")
.contact("feng")
.version("1.0")
//描述
.description("API 描述")
.build();
}
}
至此Swagger变集成成功了。重新启动项目,访问:http://localhost:8080/swagger-ui.html即可查看接口文档。
监控
这里使用了两种监控一种为数据源监控采用的是Druid数据源监控方法;另一种为SpringBoot自身的监控。
Druid监控
由于在yml已经编写了相关的Druid的配置。
因此我们可以直接编写配置类来监控SQL的执行状态。
#创建一个DruidConfig类
@Configuration
public class DruidConfig {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Value("${spring.datasource.url}")
private String dbUrl;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.initialSize}")
private int initialSize;
@Value("${spring.datasource.minIdle}")
private int minIdle;
@Value("${spring.datasource.maxActive}")
private int maxActive;
@Value("${spring.datasource.maxWait}")
private int maxWait;
@Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
private int timeBetweenEvictionRunsMillis;
@Value("${spring.datasource.minEvictableIdleTimeMillis}")
private int minEvictableIdleTimeMillis;
@Value("${spring.datasource.validationQuery}")
private String validationQuery;
@Value("${spring.datasource.testWhileIdle}")
private boolean testWhileIdle;
@Value("${spring.datasource.testOnBorrow}")
private boolean testOnBorrow;
@Value("${spring.datasource.testOnReturn}")
private boolean testOnReturn;
@Value("${spring.datasource.poolPreparedStatements}")
private boolean poolPreparedStatements;
@Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")
private int maxPoolPreparedStatementPerConnectionSize;
@Value("${spring.datasource.filters}")
private String filters;
@Value("{spring.datasource.connectionProperties}")
private String connectionProperties;
//注册 Servlet 组件
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
/*servletRegistrationBean.addInitParameter("allow", "192.168.10.3"); //白名单IP*/
servletRegistrationBean.addInitParameter("loginUsername", "feng");
servletRegistrationBean.addInitParameter("loginPassword", "feng");
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean statFilter(){
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
//验证所有请求
filterRegistrationBean.addUrlPatterns("/*");
//对 *.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/* 不进行验证
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
@Bean
@Primary //主数据源
public DataSource dataSource(){
DruidDataSource datasource = new DruidDataSource();
datasource.setUrl(this.dbUrl);
datasource.setUsername(username);
datasource.setPassword(password);
datasource.setDriverClassName(driverClassName);
//configuration
datasource.setInitialSize(initialSize);
datasource.setMinIdle(minIdle);
datasource.setMaxActive(maxActive);
datasource.setMaxWait(maxWait);
datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
datasource.setValidationQuery(validationQuery);
datasource.setTestWhileIdle(testWhileIdle);
datasource.setTestOnBorrow(testOnBorrow);
datasource.setTestOnReturn(testOnReturn);
datasource.setPoolPreparedStatements(poolPreparedStatements);
datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
try {
datasource.setFilters(filters);
} catch (SQLException e) {
logger.error("druid configuration Exception", e);
}
datasource.setConnectionProperties(connectionProperties);
return datasource;
}
}
Druid的配置已经完成。重启项目,访问http://localhost:8080/druid/login.html即可来到Druid的登陆页面。
通过Servlet 组件中指定的用户名和密码登录网页。
当执行了一系列的增删改查后,我们查看主页中的SQL监控。
发现有对应的SQL语句信息。这就是Druid为我们提供的SQL监控。
日志
日志配置十分简单,只需要一个logback-spring.xml配置文件即可。
logback
debug
${CONSOLE_LOG_PATTERN}
UTF-8
${log.path}/web_debug.log
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
UTF-8
${log.path}/web-debug-%d{yyyy-MM-dd}.%i.log
100MB
15
debug
ACCEPT
DENY
${log.path}/web_info.log
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
UTF-8
${log.path}/web-info-%d{yyyy-MM-dd}.%i.log
100MB
15
info
ACCEPT
DENY
${log.path}/web_warn.log
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
UTF-8
${log.path}/web-warn-%d{yyyy-MM-dd}.%i.log
100MB
15
warn
ACCEPT
DENY
${log.path}/web_error.log
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
UTF-8
${log.path}/web-error-%d{yyyy-MM-dd}.%i.log
100MB
15
ERROR
ACCEPT
DENY
controller层,通过logger.info添加日志信息。
private final Logger logger = LoggerFactory.getLogger(getClass());
/**
* 获取时间
*/
public String GetDate(){
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return dateFormat.format(date);
}
public Msg GetAllEmps(Integer currentpage, String name) {
logger.info(GetDate()+":---------->查询所有员工");
....
}
//剩下的省略
启动项目,随意执行几个查询、修改操作,查看日志情况。
参考
Swagger:https://swagger.io/、https://www.jianshu.com/p/349e130e40d5
Druid:https://github.com/alibaba/druid、https://www.oschina.net/p/druid?hmsr=aladdin1e1