多环境配置
SpringBoot的配置文件有两种,一种是properties文件,还有一种就是yml文件。
1.配置的优先级
(1)@TestPropertySource注解
(2)命令行参数
(3)Java系统属性(System.getProperties)
(4)操作系统环境变量
(5)只有在random.*里包含的属性会产生一个RandomValuePropertySource
(6)在打包的jar外的应用程序配置文件
(7)在打包的jar内的应用程序配置文件。
(8)在@Configuration类上的@PropertySource注解
(9)默认属性(使用SpringApplication.setDefaultProperties指定)
2. 配置目录的优先级
(1)当前目录下的一个/config目录 。
(2)当前目录
(3)一个classpath下的/config
(4)classpath根路径
spring:
profiles:
active: dev
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: Asia/Chongqing
--- #三个英文短横
spring:
profiles: dev #开发环境
server:
port: 8088
---
spring:
profiles: test #测试环境
server:
port: 8081
---
spring:
profiles: pro #生产环境
server:
port: 8080
日志
1.logback
(1)默认配置
# 日志文件名,比如:eva.log,或者是 /var/log/eva.log
logging.file=eva.log
# 日志级别配置,比如: logging.level.org.springframework=DEBUG
logging.level.*=info
logging.level.org.springframework=DEBUG
(2)引用外部配置文件
spring boot默认会加载classpath:logback-spring.xml或者classpath:logback-spring.groovy,如果要定义位置,可以:
logging.config=classpath:logback-eva.xml
注意:不要使用logback这个来命名,否则spring boot将不能完全实例化
(3)基于Spring boot的配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 文件输出格式 -->
<property name="PATTERN" value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |-%-5level [%thread] %c [%L] -| %msg%n" />
<!-- test文件路径 -->
<property name="TEST_FILE_PATH" value="d:/opt/eva/logs" />
<!-- pro文件路径 -->
<property name="PRO_FILE_PATH" value="/opt/eva/logs" />
<!-- 开发环境 -->
<springProfile name="dev">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${PATTERN}</pattern>
</encoder>
</appender>
<logger name="com.eva.learn" level="debug"/>
<root level="info">
<appender-ref ref="CONSOLE" />
</root>
</springProfile>
<!-- 测试环境 -->
<springProfile name="test">
<!-- 每天产生一个文件 -->
<appender name="TEST-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路径 -->
<file>${TEST_FILE_PATH}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名称 -->
<fileNamePattern>${TEST_FILE_PATH}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 文件最大保存历史数量 -->
<MaxHistory>100</MaxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${PATTERN}</pattern>
</layout>
</appender>
<root level="info">
<appender-ref ref="TEST-FILE" />
</root>
</springProfile>
<!-- 生产环境 -->
<springProfile name="prod">
<appender name="PROD_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${PRO_FILE_PATH}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${PRO_FILE_PATH}/warn.%d{yyyy-MM-dd}.log</fileNamePattern>
<MaxHistory>100</MaxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${PATTERN}</pattern>
</layout>
</appender>
<root level="warn">
<appender-ref ref="PROD_FILE" />
</root>
</springProfile>
</configuration>
2.log4j
去除logback的依赖包,添加log4j2的依赖包
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
<!-- 使用log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
应用自定义配置
# 应用自定义配置
logging.config=classpath:log4j2-dev.xml
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<properties>
<!-- 文件输出格式 -->
<property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} |-%-5level [%thread] %c [%L] -| %msg%n</property>
</properties>
<appenders>
<Console name="CONSOLE" target="system_out">
<PatternLayout pattern="${PATTERN}" />
</Console>
</appenders>
<loggers>
<logger name="com.roncoo.education" level="debug" />
<root level="info">
<appenderref ref="CONSOLE" />
</root>
</loggers>
</configuration>
异常处理
1.方法一
Spring Boot将所有的错误默认映射到/error,实现ErrorController
@Controller
@RequestMapping(value = "error")
public class BaseErrorController implements ErrorController {
private static final Logger logger = LoggerFactory.getLogger(BaseErrorController.class);
@Override
public String getErrorPath() {
logger.info("出错啦!进入自定义错误控制器");
return "error/error";
}
@RequestMapping
public String error() {
return getErrorPath();
}
}
2.方法二
添加自定义的错误页面
(1)html静态页面:在resources/public/error/下定义。如添加404页面:resources/public/error/404.html页面,中文注意页面编码。
(2)模板引擎页面:在templates/error/下定义。如添加5xx页面:templates/error/5xx.ftl
templates/error/这个优先级比resources/public/error/高。
3.方法三
使用注解@ControllerAdvice
@ControllerAdvice
public class ErrorExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(ErrorExceptionHandler.class);
/**
* 统一异常处理
*
* @param exception
* exception
* @return
*/
@ExceptionHandler({ RuntimeException.class })
@ResponseStatus(HttpStatus.OK)
public ModelAndView processException(RuntimeException exception) {
logger.info("自定义异常处理-RuntimeException");
ModelAndView m = new ModelAndView();
m.addObject("roncooException", exception.getMessage());
m.setViewName("error/500");
return m;
}
/**
* 统一异常处理
*
* @param exception
* exception
* @return
*/
@ExceptionHandler({ Exception.class })
@ResponseStatus(HttpStatus.OK)
public ModelAndView processException(Exception exception) {
logger.info("自定义异常处理-Exception");
ModelAndView m = new ModelAndView();
m.addObject("roncooException", exception.getMessage());
m.setViewName("error/500");
return m;
}
}
模板
1.返回页面视图还是JSON
(1)在使用thymeleaf的时候重复修改页面会有缓存,在application.properties中添加
spring.thymeleaf.cache=false
返回页面视图使用的注解是@Controller,返回JSON使用的注解是RestController。
在src/main/resources下static目录默认存放js、css等静态资源,templates存放的页面。
其中返回的页面类型缺省都是.html后缀。
持久层
JPA(Java persistence API)定义了一系列对象持久化的标准,JPA的主要实现有Hibernate、eclipseLinke和openJPA.
1.maven添加ojdbc6
由于oracle官方未授权,所以maven上无法直接下载ojdbc,需要自已下载,然后通过命令加载到本地maven库中。
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0 -Dpackaging=jar -Dfile=D:\lib\ojdbc6.jar
最后欢迎大家访问我的个人网站:1024s