# 一、 内容目录如下:
1. java环境搭建(初识java),
2. springboot2.x快速入门(搭建、开发、部署,从0-1),
3. springboot2.x整合常用业务场景(API开发、数据持久化、nosql、日志、异常、多环境配置等场景)
# 二、 程序目录(常用业务场景)
1. HelloController: API编写 及 常用注解
2. ConfigXXXController: 多环境配置 及 读取配置
3. ExceptionController: 异常处理(自定义异常及异常捕获)
4. LogController: SpringBoot2.x 整合Logback框架(日志处理)
5. MybatisController: SpringBoot2.x 整合Mybatis 3.X(数据持久化)
5.1 MybatisController: SpringBoot2.x 整合Mybatis 事务处理
5.2 MybatisController: Mybatis PageHelper 分页查询(PageHelper 原理也是过滤器)
5.3 UpdateLogInterceptor: 基于 Mybatis Interceptor(过滤器) 实现操作日志的记录
6. ThyemeleafControoler: SpringBoot2.x 整合 Thymeleaf3.0(模板引擎)
7. RedisController: SpringBoot2.x 整合 Redis4.X (分布式缓存)
7.1 RedisClient: (Redis工具类) RedisAspect(Spring AOP 增加项目前缀)
7.2 JsonUtils: Json字符串序列化与反序列化工具类
8. TimeTakesAspect: 利用AOP 在controller api中添加程序运行耗时
9. SpringBoot2.x 整合 Actuator监控
10. SpringBoot2.x 整合 SpringBoot-Admin 2.1
11. SpringBoot2.x 整合单元测试
```
# 三、 其他Java 基础学习文档
博客地址: https://blog.csdn.net/shuai_wy/article/category/7388774
todo: 接口路由未以 Restful格式标准命名,请留意,有时间会更新一下。
2019/2/19: 更新Mybatis PageHelper 分页, 更新Mybatis interceptor 过滤器记录用户更新日志
old record: 新增节点: 新增AOP记录controller api 耗时
- 执行DOC中的sql文件,mybatis 相关的DEMO 便可正常运行
- 打开porm.xml 文件中 注释掉的监控依赖,监控DEMO 便可正常运行
官方文档(十五分钟快速入门SpringBoot):https://spring.io/guides/gs/spring-boot/
(JDK + IDEA + maven + tomcat)
与C#环境对比如下:
- JDK:jre( ≈ .net CLR,java运行环境,包含了常用的基本的类库(net,util,sql,io,javax.servlet)+ jvm) + java工具(javac编译,jar打包,javadoc文档,java运行编译后的代码)
- IDEA: ≈ Visual studio
- maven : ≈ nuget
- tomcat or resin or Jetty: IIS
补充:java语法与C#非常相近,转换成本较低,C#语法基本上就是在java语法的基础上包了一层层语法糖
补充(java编译器和java解释器、JVM):
参考博客: https://www.cnblogs.com/chengdabelief/p/6576320.html
JVM:JVM有自己完善的硬件架构,如处理器、堆栈(Stack)、寄存器等,还具有相应的指令系统(字节码就是一种指令格式)。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需要生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM是Java平台无关的基础。JVM负责运行字节码:JVM把每一条要执行的字节码交给解释器,翻译成对应的机器码,然后由解释器执行。JVM解释执行字节码文件就是JVM操作Java解释器进行解释执行字节码文件的过程。
SpringBoot 轻量级框架,相对于SpringMVC,仅需要较少的配置,并升级了常用的注解(更加轻便),通过SpringBoot 我们可以更加专注于业务,而不是架构。
-
使用官网构建工具自动创建web应用(快速创建)
-
使用 IDEA 创建(手动创建)
-
目录文件结构讲解
src/main/java:存放代码
src/main/resources
static: 存放静态文件,比如 css、js、image, (访问方式 http://localhost:8080/js/main.js)
templates:存放静态页面jsp,html,tpl
config:存放配置文件,application.properties
resources:
- 开发 "SpringBoot HelloWorld" (编写API常用注解介绍)
- IDEA RUN (F5, IDEA 可以直接将使用Vs快捷键)
- jar启动方式(用的较少,一般spirng boot是使用war进行部署的)
- mvn install 生成jar包
- java -jar xxx.jar (jar包方式)
- war包方式启动
- 修改porm.xml,改成war方式
- 修改启动类,extends SpringBootServletInitializer,并override方法
- mvn clean && mvn install 打包
- 将war包放至 tomcat webapps下
- tomcat/bin startup.bat,
- 访问localhost:8080/**项目名/**路径 (注意项目名,tomcat下可以部署多个项目的)
引入jar包后,不用重新启动,IDEA环境下rebuild则可以启动生效
- Controller上面配置
@PropertySource({"classpath":resource.property})
- 增加属性
@Value("{xxxx}")
private String xx;
- 配置实体集ServerSettings 需添加注解
@Component
@PropertySource({"classpath:/config/config.properties","classpath:/config/server.properties"})
@ConfigurationProperties(prefix = "ask")
- @Component:会扫描到它
- @PropertySource:注入来源,之所以用大括号,是因为数组形式,可以注入多个文件
- @ConfigurationProperties: 添加前缀,注意添加前缀之后,注入bean的方式,属性名称和配置文件里面的key一一对应,就不用加@Value 这个注解; 如果不一样,就要加 @value("${XXX}",xxx表示全名比如: ask.search)
- resource
- applicaition.properties
- applicaiton-dev.properties
- applicaiton-pro.properties
在 applicaiton.properties 选择要激活的文件,如:使用测试配置文件
// 激活测试配置
spring.profiles.active=dev
所以, 需要区分环境的配置,可以放置 application-{profile}.properties中,通用配置可以放到 applicaition.properties中。
也可以在运行的时候,执行如下命令: java -jar xxx.jar --spring.profile.active=dev java -jar xxx.jar --spring.profile.active=prod
实现目标: 我们在程序中,ConfigMavenProfile Demo中使用了 @PropertySource({"classpath:/config/api.properties"})了, Resource/config 目录下,有两个环境 dev/prod, 我们需要将激活的环境配置文件copy 到 config目录下, 我们将使用以下步骤实现。
- porm.xml 文件中配置多个profile
<!--Maven Profiles 多环境配置 start-->
<profiles>
<!--开发环境-->
<profile>
<id>dev</id>
<!--定义配置打包目录属性-->
<properties>
<profiles.active>dev</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--生产环境-->
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
</properties>
</profile>
</profiles>
- 使用文件copy插件
- 配置 maven copy 插件,使用我们选择激活的路径—— src/main/resources/config/${profiles.active}, copy 至 ${project.build.outputDirectory}/config/ 路径下。
补充: 可能有同学对 ${profiles.active} 不知道是什么意思,${profiles.active} 是我们在 标签下定义的常量
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- 文件拷贝 -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.outputDirectory}/config/</outputDirectory>
<resources>
<resource>
<directory>src/main/resources/config/${profiles.active}</directory>
<filtering>false</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<!--<filters>-->
<!--<filter>src/main/resources/config/${profiles.active}/config.properties</filter>-->
<!--<filter>src/main/resources/config/${profiles.active}/server.properties</filter>-->
<!--</filters>-->
<!--Maven Profiles 多环境配置 start-->
<resources>
<resource>
<directory>src/main/resources</directory>
<!-- 资源根目录排除各环境的配置,使用单独的资源目录来指定 -->
<excludes>
<exclude>config/**</exclude>
</excludes>
</resource>
</resources>
</build>
<!--Maven Profiles 多环境配置 end-->
- package 打包指定 profile mvn package –P prod
- 增加异常处理类 ExceptionHandler
添加 @RestControllerAdvice 注解 或 ControllerAdvice注解
- 在异常处理类中,增加异常处理方法
在方法上添加 @ExceptionHandler(value=CustomerException.class)注解 详见 CustomerExceptionHandler类及自定义CustomerException类(继承Excption,扔出异常时使用)
-
常用处理java的日志组件 slf4j,log4j,logback,common-logging 等
-
logback介绍:基于Log4j基础上大量改良,不能单独使用,推荐配合日志框架SLF4J来使用 logback当前分成三个模块:logback-core,logback-classic和logback-access; logback-core是其它两个模块的基础模块
-
配置文件:classpath:logback-spring.xml
-
调用语法
private Logger logger = LoggerFactory.getLogger(this.getClass());
logger.error("this is a error");
- logback-spring.xml 支持多环境配置 参考博文: https://blog.csdn.net/qianyiyiding/article/details/76565810
<springProfile name="production">
<root level="DEBUG">
<!--<appender-ref ref="FILEERROR"/>-->
<!--<appender-ref ref="FILEWARN"/>-->
<!--<appender-ref ref="FILEINFO"/>-->
<!--<appender-ref ref="DBAPPENDER"/>-->
<appender-ref ref="STDOUT"/>
</root>
</springProfile>
<springProfile name="dev">
<root level="DEBUG">
<!--<appender-ref ref="FILEERROR"/>-->
<!--<appender-ref ref="FILEWARN"/>-->
<!--<appender-ref ref="FILEINFO"/>-->
<!--<appender-ref ref="DBAPPENDER"/>-->
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
TODO:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
# SpringBoot2.x 整合thymeleaf
#开发时关闭缓存,不然没法看到实时页面
spring.thymeleaf.cache=false
spring.thymeleaf.mode=HTML5
#前缀
spring.thymeleaf.prefix=classpath:/templates/
#编码
spring.thymeleaf.encoding=UTF-8
#类型
#spring.thymeleaf.content-type=text/html
#名称的后缀
spring.thymeleaf.suffix=.html
@GetMapping("/hello_page")
public Object helloPage() {
return "/templates/customerError";
}
- 页面
<h3 th:text="${hello}">hello</h3>
- 控制器
@GetMapping("/hello_data_page")
public Object helloPage(ModelMap modelMap) {
modelMap.addAttribute("hello","hello SpringBoot2.x !");
return "tl/hello_data_page";
}
-
介绍什么是actuator 官方介绍: Spring Boot包含许多附加功能,可帮助您在将应用程序投入生产时监视和管理应用程序。 可以选择使用HTTP端点或JMX来管理和监控您的应用程序,自动应用于审计,健康和指标收集;
一句话:springboot提供用于监控和管理生产环境的模块 官方文档:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#production-ready
-
加入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- 加入上述依赖后,访问几个url 同时可以在配置中,添加配置,限定可访问内容
/actuator/health
/actuator/info
/actuator