springboot进阶
文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、整合数据库连接池 druid
阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html)
团队出品,为监控而生的数据库连接池
druid数据库连接池是最好的数据库连接池
1、添加连接池pom
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
2.修改配置
application.properties
spring.datasource.druid.url=jdbc:mysql://localhost:3306/tab_account
spring.datasource.druid.username=root
spring.datasource.druid.password=root
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=20
spring.datasource.druid.min-idle=10
spring.datasource.druid.max-wait=10
#是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。
#在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。
#spring.datasource.druid.pool-prepared-statements=true
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
#配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=300000
#配置扩展插件:监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall
spring.datasource.druid.filters=stat,wall
#spring.datasource.druid.filter.stat.log-slow-sql=true
#spring.datasource.druid.filter.stat.slow-sql-millis=2000
# 合并多个DruidDataSource的监控数据
spring.datasource.druid.use-global-data-source-stat=true
#配置应用访问端口号
server.port=18888
##工程名 可以不设置默认 配置项目名称(上下文访问路径)/
server.servlet.context-path=/bu
##mybatis实体别名配置
mybatis.type-aliases-package=com.aaa.springboot_mybatis_demo_20211213.entity
##mapper文件扫描
mybatis.mapper-locations=classpath:mapper/*.xml
3.创建一个DruidConfig监控配置:
package com. XXX.XXX.controller;
@Configuration
public class DruidConfig {
@Bean //<bean id=druidServlet class=org.springframework.boot.web.servlet.ServletRegistrationBean>
public ServletRegistrationBean druidServlet() {
// 现在要进行druid监控的配置处理操作
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(
new StatViewServlet(), "/druid/*");
// 白名单,多个用逗号分割, 如果allow没有配置或者为空,则允许所有访问
servletRegistrationBean.addInitParameter("allow", "127.0.0.1,192.168.41.115,192.168.41.23");
// 黑名单,多个用逗号分割 (共同存在时,deny优先于allow)
servletRegistrationBean.addInitParameter("deny", "192.168.41.116");
// 控制台管理用户名
servletRegistrationBean.addInitParameter("loginUsername", "admin");
// 控制台管理密码
servletRegistrationBean.addInitParameter("loginPassword", "tiger");
// 是否可以重置数据源,禁用HTML页面上的“Reset All”功能
servletRegistrationBean.addInitParameter("resetEnable", "false");
return servletRegistrationBean ;
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean() ;
filterRegistrationBean.setFilter(new WebStatFilter());
//filterRegistrationBean.setFilter(new CharEncodingFilter());
//所有请求进行监控处理
filterRegistrationBean.addUrlPatterns("/*");
//添加不需要忽略的格式信息
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.css,/druid/*");
return filterRegistrationBean ;
}
@Bean
//@PropertySource("")
@ConfigurationProperties(prefix = "spring.datasource.druid")
public DataSource druidDataSource() {
return new DruidDataSource();
}
}
访问 http://127.0.0.1:9999/druid/login.html

二、日志
1.常用日志
-
Log4j
是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、数据库等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。 Log4j有7种不同的log级别,按照等级从低到高依次为:TRACE、DEBUG、INFO、WARN、ERROR、FATAL、OFF。如果配置为OFF级别,表示关闭log。 Log4j支持两种格式的配置文件:properties和xml。包含三个主要的组件:Logger、appender、Layout。
Spring Boot1.4以及之后的版本已经不支持log4j,log4j也很久没有更新了,现在已经有很多其他的日志框架对Log4j进行了改良,比如说SLF4J、Logback等
详细
3. SLF4J
SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,而是通过Facade Pattern提供一些Java logging API,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
- Logback
Logback,一个“可靠、通用、快速而又灵活的Java日志框架”,logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK Logging。
springboot默认使用了logback配置. - Apache Commons Logging
Apache Commons Logging ,之前叫 Jakarta Commons Logging(JCL)提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于具体的日志实现工具。它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具。用户被假定已熟悉某种日志实现工具的更高级别的细节。JCL提供的接口,对其它一些日志工具,包括Log4J, Avalon LogKit, and JDK 1.4+等,进行了简单的包装,此接口更接近于Log4J和LogKit的实现。
2.springboot。properties配置日志
代码如下(示例):
# 日志配置
#配置日志文件的路径
logging.file.path=d:/springboot-log
#配置日志文件名,如果该属性不配置,默认文件名为spring.log
# windows下:path和name不可以同时配置,通知配置只有name起效##logging.file.name=springboot.log
logging.file.name=cc.log
#配置日志级别
logging.level.root=info
##日志级别 trace < debug < info < warn < error < fatal
#定制控制台日志输出格式
# %d{HH:mm:ss.SSS}——日志输出时间
# %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
# %-5level——日志级别,并且使用5个字符靠左对齐
# %logger- ——日志输出者的名字
# %msg——日志消息
# %n——平台的换行符
logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss.SSS} [%thread] %-5level %logger- %msg%n
#定制文件日志输出格式
logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n
#mybatis配置日志
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
3.springboot的logback配置
配置日志不需要导入jar,日志包在父项目中已经引入
resources下创建logback.xml或者logback-spring.xml,复制配置进去
<?xml version="1.0" encoding="UTF-8" ?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="D:/projects/a/b/log" /><!-- 没有他会自己创建-->
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n </pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/springbootdemo%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!--myibatis log configure-->
<logger name="com.apache.ibatis" level="DEBUG"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<!-- 日志输出级别
trace<debug<info<warn<error<fatal
级别之间是包含的关系,意思是如果你设置日志级别是trace,则大于等于这个级别的日志都会输出。
trace: 是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出。
debug: 调试么,我一般就只用这个作为最低级别,trace压根不用。是在没办法就用eclipse或者idea的debug功能就好了么。
info: 输出一下你感兴趣的或者重要的信息,这个用的最多了。
warn: 有些信息不是错误信息,但是也要给程序员的一些提示,类似于eclipse中代码的验证不是有error 和warn(不算错误但是也请注意,比如以下depressed的方法)。
error: 错误信息。用的也比较多。
fatal: 级别比较高了。重大错误,这种级别你可以直接停止程序了,是不应该出现的错误么!不用那么紧张,其实就是一个程度的问题。
-->
<root level="debug">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
<!--日志异步到数据库 -->
<!--<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">-->
<!--<!–日志异步到数据库 –>-->
<!--<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">-->
<!--<!–连接池 –>-->
<!--<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">-->
<!--<driverClass>com.mysql.jdbc.Driver</driverClass>-->
<!--<url>jdbc:mysql://127.0.0.1:3306/databaseName</url>-->
<!--<user>root</user>-->
<!--<password>root</password>-->
<!--</dataSource>-->
<!--</connectionSource>-->
<!--</appender>-->
</configuration>
三、 springboot整合swagger
简介:
借助Swagger开源和专业工具集,为用户,团队和企业简化API开发。了解Swagger如何帮助您大规模设计和记录API。 Swagger工具的强大功能始于OpenAPI规范— RESTful API设计的行业标准
就是后端开发测试的好工具 而且 开源免费 好用 不过必须是result风格的
1.加依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
2.代码
package com.aaa.springboot_mybatis_demo_20211213.configur;
import io.swagger.annotations.ApiOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
/**
* @author zhangyifan
* @version 8.0
* @description:
* @date 2021/12/14 9:30
*/
@Configuration
public class SwaggerConfiguration {
/**
* 创建一个docket
* @return
*/
@Bean
public Docket docket( ) {
return new Docket(DocumentationType.SWAGGER_2)
//构造注入 可以 apiInfo() 下面要加@Bean
.apiInfo(apiInfo())
//.enable(false) //swagger不能访问
.select()
//配置扫描这个类头是有这个类注释的类
.apis(RequestHandlerSelectors.withClassAnnotation(ApiOperation.class))
//配置要扫描接口的方式
//.apis(RequestHandlerSelectors.basePackage("com.aaa.sbm.controller"))
//路径过滤
.paths(PathSelectors.any())
.build();
}
/**
* apiInfo
* @return
*/
@Bean
public ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Spring Boot中使用Swagger2构建RESTful APIs")
.description("更多请关注http://www.baidu.com")
.termsOfServiceUrl("http://www.baidu.com")
.contact(new Contact("张工","http://www.baidu.com","15836784326@163.com"))//联系人 作者信息
.version("1.0")
.build();
}
}
3.开启swagger
@EnableSwagger2

4.可以选择的配置

方法
@ApiOperation("")
参数:
@ApiParam("")
5.测试 直接访问
http://localhost:8888/swagger-ui.html


浙公网安备 33010602011771号