Введение в эту статью
- Зачем использовать SpringBoot
- Как построить окружение
- среда разработки
- Импорт проекта быстрого старта
- Подготовка перед интеграцией
- Интеграция Mybatis
- Интегрировать Swagger2
- Конфигурация с несколькими средами
- Конфигурация журнала в нескольких средах
- Общая конфигурация
Зачем использовать SpringBoot
Преимущество SpringBoot по сравнению с традиционной инфраструктурой SSM заключается в том, что он предоставляет конфигурацию шаблона по умолчанию, что упрощает начальный процесс создания приложений Spring.Если вы не хотите, чтобы вас беспокоило множество файлов конфигурации xml, вы можете вместо этого использовать SpringBoot.
Как построить окружение
В этой статье будут интегрированы фреймворки Mybatis и Swagger2 на основе шаблона проекта Quick Start, официально предоставленного Spring, и объяснено создание плагинов кода генератором mybatis одним щелчком, журналирование, создание документов одним щелчком и методы конфигурации с несколькими средами. и, наконец, ввести аннотацию получения пользовательской конфигурации, глобальную обработку исключений и другие вещи, которые часто используются.
среда разработки
Я использую IDEA в качестве инструмента разработки. Когда IDEA загружается, проект быстрого запуска, который по умолчанию интегрирует SpringBoot, может быть создан напрямую. Если вы используете Eclipse, вы можете рассмотреть возможность установки подключаемого модуля SpringBoot или непосредственно изздесьНастройте и загрузите проект быстрого запуска SpringBoot. Следует отметить, что для построения этой среды выбрана среда быстрого запуска Spring Boot 2.0. Spring Boot 2.0 требует, чтобы версия jdk была 1.8 или выше.
Импорт проекта быстрого старта
Независимо от того, импортируется ли он IDEA или загружается в реальности, конфигурацию проекта быстрого запуска необходимо инициализировать.Если используется IDEA, выберите Spring Initializr при создании нового проекта.Основная конфигурация выглядит следующим образом.
IDEA создает новый проект SpringBoot — введите имя проекта/пакета
IDEA New SpringBoot Project — выберите пакет зависимостей
После нажатия кнопки "Далее" и "Готово" IDEA показывает, что проект шаблона загружается. После завершения загрузки зависимости пакета будут загружены в соответствии с pom.xml. После загрузки зависимостей проект шаблона будет успешно создан. Если вы настройте и загрузите проект быстрого запуска непосредственно с официального сайта, см. следующий рисунок
Загрузите проект быстрого запуска SpringBoot напрямую — конфигурация проекта
Введите и выберите Web, Mysql, Mybatis в поле «Поиск зависимостей», чтобы добавить зависимости, нажмите «Создать проект», чтобы загрузить проект быстрого запуска, а затем выберите импорт проекта Maven в IDE.После импорта проекта вы можете увидеть его структура каталогов, как показано ниже
Быстрый старт проекта — структура проекта
Вам нужно обратить внимание на часть, обведенную красным прямоугольником.Первый класс java сверху вниз — это функция входа, используемая для запуска проекта, второй файл с суффиксом свойств — это файл конфигурации проекта, а третий - это пакет зависимостей проекта и выполнение конфигурации плагина.
Подготовка перед интеграцией
Измените .properties на .yml
По сравнению со свойствами, yml более рационален, и многие официальные демонстрации представлены в виде конфигурации yml.Здесь мы используем форму yml вместо свойств.По сравнению с формой свойств есть два основных отличия:
- Описание ключа разделено от оригинального «.» на древовидную форму.
- Для всех ключей должен следовать пробел, иначе запускаемый проект сообщит об ошибке синтаксического анализа конфигурации
# properties式语法描述
spring.datasource.name = mysql
spring.datasource.url = jdbc:mysql://localhost:3306/db?characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = 123
# yml式语法描述
spring:
datasource:
name: mysql
url: jdbc:mysql://localhost:3306/db?characterEncoding=utf-8
username: root
password: 123
Требуемые зависимости конфигурации
После успешного создания проекта быстрого запуска мы наблюдаем зависимости в его файле pom.xml, как показано ниже, включая выбранные нами Web, Mybatis и Mysql.
<!-- spring web mvc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
Однако, когда мы используем инфраструктуру ORM, мы обычно используем ее с пулом соединений с базой данных и плагинами подкачки.Здесь я выбираю druid и pagehelper Али, плагин подкачки, и нам также нужно интегрировать структуру построения автоматизации документов swagger2. , поэтому добавляются следующие четыре зависимости.
<!-- 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
<!-- alibaba的druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!-- alibaba的json格式化对象 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.31</version>
</dependency>
<!-- 自动生成API文档 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.5.0</version>
</dependency>
Интеграция Mybatis
Конфигурация Mybatis в основном включает в себя пул соединений с базой данных druid, подключаемый модуль подкачки pagehelper, подключаемый модуль обратной генерации кода mybatis-generator и сопоставитель, конфигурацию сканирования pojo.
Настроить пул соединений с базой данных друидов
Добавьте следующую конфигурацию в файл application.yml
spring:
datasource:
# 如果存在多个数据源,监控的时候可以通过名字来区分开来
name: mysql
# 连接数据库的url
url: jdbc:mysql://localhost:3306/db?characterEncoding=utf-8
# 连接数据库的账号
username: root
# 连接数据库的密码
password: 123
# 使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
# 扩展插件
# 监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall
filters: stat
# 最大连接池数量
maxActive: 20
# 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
initialSize: 1
# 获取连接时最大等待时间,单位毫秒
maxWait: 60000
# 最小连接池数量
minIdle: 1
timeBetweenEvictionRunsMillis: 60000
# 连接保持空闲而不被驱逐的最长时间
minEvictableIdleTimeMillis: 300000
# 用来检测连接是否有效的sql,要求是一个查询语句
# 如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用
validationQuery: select count(1) from 'table'
# 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效
testWhileIdle: true
# 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
testOnBorrow: false
# 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
testOnReturn: false
# 是否缓存preparedStatement,即PSCache
poolPreparedStatements: false
# 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true
maxOpenPreparedStatements: -1
Настройте плагин пагинации pagehelper
# pagehelper分页插件
pagehelper:
# 数据库的方言
helperDialect: mysql
# 启用合理化,如果pageNum < 1会查询第一页,如果pageNum > pages会查询最后一页
reasonable: true
Настройка и работа плагина обратной генерации кода mybatis-generator
Использование плагина mybatis-generator в основном делится на следующие три шага.
- Добавьте плагин mybatis-generator в pom.xml.
<build>
<plugins>
<!-- 将Spring Boot应用打包为可执行的jar或war文件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- mybatis generator 自动生成代码插件 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<!-- 扫描resources/generator目录下的generatorConfig.xml配置 -->
<configurationFile>
${basedir}/src/main/resources/generator/generatorConfig.xml
</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>
</plugins>
</build>
2. Создайте файл конфигурации генерации обратного кода generateConfig.xml
Ссылаясь на местоположение сканирования в конфигурации плагина pom.xml, создайте папку генератора в каталоге ресурсов и создайте файл конфигурации generateConfig.xml во вновь созданной папке.Подробная информация о конфигурации файла приведена ниже.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- 运行方式:mvaen运行命令 mybatis-generator:generate -e -->
<!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
<properties resource="generator/generator.properties"/>
<classPathEntry location="${classPathEntry}"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<!--数据库链接URL,用户名、密码 -->
<jdbcConnection
driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/${db}?characterEncoding=utf-8"
userId="${userId}"
password="${password}">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<javaModelGenerator targetPackage="${pojoTargetPackage}" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成映射文件的包名和位置-->
<sqlMapGenerator targetPackage="${mapperTargetPackage}" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="${daoTargetPackage}" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成的表 tableName是数据库中的表名或视图名 schema是数据库名称-->
<table tableName="%" schema="${db}"/>
</context>
</generatorConfiguration>
Для создания шаблона конфигурации generateConfig.xml элементы конфигурации с большей изменчивостью извлекаются отдельно в виде файла конфигурации generateConfig.xml, а затем конфигурация этого файла считывается через тег свойств.Преимущество этого в том, что когда больше Когда повторно используя этот xml, вам нужно только обратить внимание на небольшое количество элементов конфигурации. Создайте файл generate.properties на том же уровне, что и generateConfig.xml. Теперь вам нужно только настроить файл generate.properties. Содержание конфигурации выглядит следующим образом.
# 请手动配置以下选项
# 数据库驱动:选择你的本地硬盘上面的数据库驱动包
classPathEntry = D:/CJH/maven-repository/mysql/mysql-connector-java/5.1.30/mysql-connector-java-5.1.30.jar
# 数据库名称、用户名、密码
db = db
userId = root
password = 123
# 生成pojo的包名位置 在src/main/java目录下
pojoTargetPackage = com.spring.demo.springbootexample.mybatis.po
# 生成DAO的包名位置 在src/main/java目录下
daoTargetPackage = com.spring.demo.springbootexample.mybatis.mapper
# 生成Mapper的包名位置 位于src/main/resources目录下
mapperTargetPackage = mapper
- Запустите плагин mybatis-generator для создания Dao, Model и Mapping.
# 打开命令行cd到项目pom.xml同级目录运行以下命令
mvn mybatis-generator:generate -e
конфигурация пакета сканирования mybatis
На данный момент объект и класс сопоставления, соответствующие указанной базе данных, были сгенерированы, но их нельзя использовать напрямую.Вам необходимо настроить адрес сканирования mybatis, прежде чем вызывать его в обычном режиме.
- Настройте mapper.xml и адрес пакета pojo в application.yml.
mybatis:
# mapper.xml包地址
mapper-locations: classpath:mapper/*.xml
# pojo生成包地址
type-aliases-package: com.spring.demo.springbootexample.mybatis.po
- Включить аннотацию сканирования Mapper в SpringBootExampleApplication.java
@SpringBootApplication
@MapperScan("com.spring.demo.springbootexample.mybatis.mapper")
public class SpringBootExampleApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootExampleApplication.class, args);
}
}
Проверьте эффективность картографа
@Controller
public class TestController {
//替换成自己生成的mapper
@Autowired
UserMapper userMapper;
@RequestMapping("/test")
@ResponseBody
public Object test(){
//查询该表的所有数据
return userMapper.selectByExample(null);
}
}
Запустите основную функцию SpringBootExampleApplication.java.Если server.port специально не настроен в application.yml, то springboot будет использовать порт по умолчанию 8080 для запуска, и в случае успеха операции будет напечатан следующий журнал
Tomcat started on port(s): 8080 (http) with context path ''
Введите адрес в браузере, если все данные в возвращенной форме представляют собой успешную интеграцию mybatis.
http://localhost:8080/test
Интегрировать Swagger2
Swagger2 — это инструмент для быстрого создания документов.Он может автоматически генерировать интерфейсный документ в виде json в стиле Restful с помощью аннотаций и может создавать интерфейсные документы в виде веб-страниц HTML с помощью таких инструментов, как swagger-ui.Интеграция swagger2 является относительно простым, и вам необходимо с ним ознакомиться. Интеграция, аннотация и использование разделены на следующие четыре шага.
- Создать файл SwaggerConfig
@Configuration
public class SwaggerConfig {
// 接口版本号
private final String version = "1.0";
// 接口大标题
private final String title = "SpringBoot示例工程";
// 具体的描述
private final String description = "API文档自动生成示例";
// 服务说明url
private final String termsOfServiceUrl = "http://www.kingeid.com";
// licence
private final String license = "MIT";
// licnce url
private final String licenseUrl = "https://mit-license.org/";
// 接口作者联系方式
private final Contact contact = new Contact("calebman", "https://github.com/calebman", "chenjianhui0428@gmail.com");
@Bean
public Docket buildDocket() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(buildApiInf())
.select().build();
}
private ApiInfo buildApiInf() {
return new ApiInfoBuilder().title(title).termsOfServiceUrl(termsOfServiceUrl).description(description)
.version(version).license(license).licenseUrl(licenseUrl).contact(contact).build();
}
}
- Включить аннотации Swagger2 в SpringBootExampleApplication.java
Добавьте аннотацию @EnableSwagger2 под аннотацией @SpringBootApplication.
- Общие примеры аннотаций
//Contorller中的注解示例
@Controller
@RequestMapping("/v1/product")
// 表示标识这个类是swagger的资源
@Api(value = "DocController", tags = {"restful api示例"})
public class DocController extends BaseController {
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
@ResponseBody
//表示一个http请求的操作
@ApiOperation(value = "修改指定产品", httpMethod = "PUT", produces = "application/json")
//@ApiImplicitParams用于方法,包含多个@ApiImplicitParam表示单独的请求参数
@ApiImplicitParams({@ApiImplicitParam(name = "id", value = "产品ID", required = true, paramType = "path")})
public WebResult update(@PathVariable("id") Integer id, @ModelAttribute Product product) {
logger.debug("修改指定产品接收产品id与产品信息=>%d,{}", id, product);
if (id == null || "".equals(id)) {
logger.debug("产品id不能为空");
return WebResult.error(ERRORDetail.RC_0101001);
}
return WebResult.success();
}
}
//Model中的注解示例
//表示对类进行说明,用于参数用实体类接收
@ApiModel(value = "产品信息")
public class Product {
//表示对model属性的说明或者数据操作更改
@ApiModelProperty(required = true, name = "name", value = "产品名称", dataType = "query")
private String name;
@ApiModelProperty(name = "type", value = "产品类型", dataType = "query")
private String type;
}
- Генерация документов в формате json
После успешной интеграции консоль проекта распечатает журнал с уровнем INFO.Часть перехвата выглядит следующим образом, указывая на то, что данные формата json API документа могут быть получены путем доступа к интерфейсу v2/api-docs приложение, а указанный адрес можно ввести в браузере, чтобы убедиться, что интеграция прошла успешно.
Mapped "{[/v2/api-docs],methods=[GET],produces=[application/json || application/hal+json]}"
http://localhost:8080/v2/api-docs
Конфигурация с несколькими средами
Множественность сред неизбежна в процессе разработки приложения. Предположим, у нас сейчас есть три разных среды для разработки, демонстрации и производства, и их конфигурации также различаются. Если настройка выполняется каждый раз в процессе упаковки, ошибки неизбежны. поддерживает запуск различных сред с помощью команд.environment, но файл конфигурации должен соответствовать формату application-{profile}.properties, профиль представляет собой идентификатор соответствующей среды, и при загрузке разные среды могут быть загружены с помощью разных команд.
application-dev.properties:开发环境
application-test.properties:演示环境
application-prod.properties:生产环境
# 运行演示环境命令
java -jar spring-boot-example-0.0.1-SNAPSHOT --spring.profiles.active=test
На основе текущего проекта для достижения мультисреды нам нужно создать три разных файла конфигурации среды, application-dev.yml, application-test.yml, application-prod.yml в каталоге того же уровня, что и application.yml, и установить та же общедоступная конфигурация, что и у druid. Большинство подключаемых модулей пейджинга , pagehelper и конфигурация сканирования пакетов mybatis размещаются в application.yml, а среда разработки по умолчанию настраивается в application.yml, тогда, если приложение запускается без --spring. profiles.active, он запустится в среде разработки по умолчанию, сильно меняющаяся конфигурация, например, пароль учетной записи базы данных, прописывается в файлы конфигурации разных сред.
spring:
profiles:
# 默认使用开发环境
active: dev
Настроенная здесь структура каталогов нашего проекта показана на следующем рисунке.
структура каталогов src/main/java
структура каталогов src/main/resources
На данный момент мы завершили интеграцию Mybatis, Swagger2 и нескольких сред, а затем настроили регистраторы в нескольких средах. Что касается регистраторов, мы всегда надеемся, что в процессе разработки проекта мы сможем предоставить как можно больше информации для обнаружения ошибок.Когда проект находится в демо- или онлайн-состоянии, чтобы печать журнала не влияла на производительность программы. , нам нужны только журналы предупреждений или ошибок, и нам нужно написать Enter в файл, затем следующим шагом будет реализация конфигурации журнала в нескольких средах на основе журнала.
Конфигурация журнала в нескольких средах
Создайте logback-spring.xml в том же каталоге, что и application.yml. Springboot рекомендует использовать logback-spring.xml вместо файла logback.xml. Конфигурация logback-spring.xml выглядит следующим образом.
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--
简要描述
日志格式 => %d{HH:mm:ss.SSS}(时间) [%-5level](日志级别) %logger{36}(logger名字最长36个字符,否则按照句点分割) - %msg%n(具体日志信息并且换行)
开发环境 => ${basepackage}包下控制台打印DEBUG级别及以上、其他包控制台打印INFO级别及以上
演示(测试)环境 => ${basepackage}包下控制台打印INFO级别及以上、其他包控制台以及文件打印WARN级别及以上
生产环境 => 控制台以及文件打印ERROR级别及以上
日志文件生成规则如下:
文件生成目录 => ${logdir}
当日的log文件名称 => ${appname}.log
其他时候的log文件名称 => ${appname}.%d{yyyy-MM-dd}.log
日志文件最大 => ${maxsize}
最多保留 => ${maxdays}天
-->
<!--自定义参数 -->
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<property name="maxsize" value="30MB" />
<!--只保留最近90天的日志-->
<property name="maxdays" value="90" />
<!--application.yml 传递参数 -->
<!--log文件生成目录-->
<springProperty scope="context" name="logdir" source="resources.logdir"/>
<!--应用名称-->
<springProperty scope="context" name="appname" source="resources.appname"/>
<!--项目基础包-->
<springProperty scope="context" name="basepackage" source="resources.basepackage"/>
<!--输出到控制台 ConsoleAppender-->
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<!--展示格式 layout-->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
<pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{36} - %msg%n</pattern>
</pattern>
</layout>
</appender>
<!--输出到文件 FileAppender-->
<appender name="fileLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--
日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
的日志改名为今天的日期。即,<File> 的日志都是当天的。
-->
<File>${logdir}/${appname}.log</File>
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>${logdir}/${appname}.%d{yyyy-MM-dd}.log</FileNamePattern>
<maxHistory>${maxdays}</maxHistory>
<totalSizeCap>${maxsize}</totalSizeCap>
</rollingPolicy>
<!--日志输出编码格式化-->
<encoder>
<charset>UTF-8</charset>
<pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 开发环境-->
<springProfile name="dev">
<root level="INFO">
<appender-ref ref="consoleLog"/>
</root>
<!--
additivity是子Logger 是否继承 父Logger 的 输出源(appender) 的标志位
在这里additivity配置为false代表如果${basepackage}中有INFO级别日志则子looger打印 root不打印
-->
<logger name="${basepackage}" level="DEBUG" additivity="false">
<appender-ref ref="consoleLog"/>
</logger>
</springProfile>
<!-- 演示(测试)环境-->
<springProfile name="test">
<root level="WARN">
<appender-ref ref="consoleLog"/>
<appender-ref ref="fileLog"/>
</root>
<logger name="${basepackage}" level="INFO" additivity="false">
<appender-ref ref="consoleLog"/>
<appender-ref ref="fileLog"/>
</logger>
</springProfile>
<!-- 生产环境 -->
<springProfile name="prod">
<root level="ERROR">
<appender-ref ref="consoleLog"/>
<appender-ref ref="fileLog"/>
</root>
</springProfile>
</configuration>
Информация о конфигурации application.yml указана в конфигурации журнала. В основном это три элемента: logdir, appname и basepackage. logdir — это адрес записи файла журнала, в который можно передать относительный путь. appname — это приложение имя. Это введено для передачи файла журнала. Должно быть выведено различие имени. Базовый пакет — это конфигурация фильтрации пакетов. Например, в среде разработки необходимо распечатать журнал выше уровня отладки, но если я хочу сделать DEBUG кроме написанного мной логгера не печатается, имя пакета этого проекта можно фильтровать.Используйте только DEBUG для печати, а имя пакета печатается на уровне INFO.Создайте эти три конфигурации в application.yml, и вы можно настраивать разные свойства в разных средах.
#应用配置
resources:
# log文件写入地址
logdir: logs/
# 应用名称
appname: spring-boot-example
# 日志打印的基础扫描包
basepackage: com.spring.demo.springbootexample
Используйте различные среды для запуска и проверки эффективности конфигурации регистратора.В среде разработки будут напечатаны четыре записи регистратора выше уровня DEBUG.В демонстрационной среде будут напечатаны и записаны в файл три записи выше уровня INFO. В производственной среде будет печататься только уровень ОШИБКА и выше одна запись и запись в файл
@RequestMapping("/logger")
@ResponseBody
public WebResult logger() {
logger.trace("日志输出 {}", "trace");
logger.debug("日志输出 {}", "debug");
logger.info("日志输出 {}", "info");
logger.warn("日志输出 {}", "warn");
logger.error("日志输出 {}", "error");
return "00";
}
Общая конфигурация
Загрузить пользовательскую конфигурацию
@Component
@PropertySource(value = {"classpath:application.yml"}, encoding = "utf-8")
public class Config {
@Value("${resources.midpHost}")
private String midpHost;
public String getMidpHost() {
return midpHost;
}
}
глобальный обработчик исключений
@ControllerAdvice
public class GlobalExceptionResolver {
Logger logger = LoggerFactory.getLogger(GlobalExceptionResolver.class);
@ExceptionHandler(value = Exception.class)
@ResponseBody
public WebResult exceptionHandle(HttpServletRequest req, Exception ex) {
ex.printStackTrace();
logger.error("未知异常", ex);
return WebResult.error(ERRORDetail.RC_0401001);
}
}