软件工程师成长日记JavawebSpring 学习

3-全!Web后端框架IDEA+Springboot2.0+Sp

2018-08-23  本文已影响505人  Guoyubo

第1节 前言

1 背景:

  2018.8需要为新公司的某项目中某部分逻辑独立出来当作独立服务器,为以后的分布式做准备。有些框架我也是第一次用,所以在此整理了我做的项目,并做出详细的讲解,此项目基本包含了现在web后端服务的最新框架(需要用到哪部分,直接去对应章节拿就行,当然你要是觉得好,要赏我,我也同意)。

github源码地址https://github.com/gyb123456/SpringBoot2.0

2 框架

  项目:前后端分离

  后端:Springboot2.0+Spring+Mybatis+Redis+Socket+Log4J+Maven

  前端:vue+node(编译后放在tomcat中运行)

3 运行环境

  开发电脑:win7

  JDK:1.8(Springboot2.0需jdk为1.8以上!!!

  Tomcat:8

        本机:用的maven的spring-boot-starter-tomcat插件

        正式服:docker的tomcat镜像跑的jenkins自动部署的war包

  开发工具:IDEA2018

  Maven:3.5

4 持续集成:jenkins+docker

开发、打包发布流程:

ok

5 调试工具

  http请求调试:postman工具

  socket调试:sockit工具

6 吐槽:

1 有些人写文章都不知道把图截全了的吗,有些人写文章就说加上这段代码,然后仅仅把代码部分截图出来,丫的,到底该把你代码放到哪里,鬼知道啊

2 还有啥来着


第2节 项目源码讲解

* 重点来了,在上代码讲解之前,如果上面说的你不太懂,比如docker是啥,那最好先查下

* 为了防止有很多人下载源码后不能导入项目或者各种奇怪问题,我在github已经将整个项目的内容全部上传了,这是本地项目文件目录结构如果运行不了,注意一定要保持配置环境啥的和我一样,比如jdk1.8,maven3.5

* 打开我的项目源码时,如果用的idea编辑器会发现service层的@Autowired注解会报红的,不影响运行。


1 项目目录结构:

本地文件结构
项目目录结构

第3节 配置

1 spring、SpringMVC配置

为啥用springboot呢?

1 还不是因为配置简单,免去配置application.xml文件,xml文件我看着难受,有点丑

2 也不用配置SpringMVC扫描注解的包,你创建项目时,选择spring 时,人家自动给你搞好了!我就问你,你能不去百度,直接对着xml文件,撸出来类似这样的东西吗?

如果能,那大神你没必要看我这文章了

你直接在Application启动类的平级目录建一个包,写controller、service、dao层就ok了项目一运行,浏览器上输入ctrl层地址就能访问了不像以前还要各种配置

注意:包要在Application启动类的平级目录,因为springboot默认会扫描Application启动类的平级目录的所有包和子包,被坑过才知道

如何新建springboot项目?看我这篇 IDEA新建springboot的Web项目


2 springboot多环境配置:

关于springboot的多环境配置和如何获取配置文件的值,我还专门写了一篇文章,相对这里会更详细: springboot多环境配置+如何获取配置文件的值

1 在application.properties文件平级新建这3个配置文件用来区分不同的开发环境,注意命名格式,原理是springboot会自动读取这种格式的文件,就不用你在再配置了,爽歪歪,很简单。

*application.properties里面就写通用的配置 

*application-dev.properties里面就写dev环境的配置

多环境配置

  2 在application.properties文件中用spring.profiles.active=dev来指定运行时的环境,但是企业级项目需要在源码相同的情况下,在maven编译打包时,根据maven命令传入的不同值进行动态打包,所以spring.profiles.active的值得是变量,用spring.profiles.active=@activatedProperties@解决

使用命令mvn clean package -Pdev就打包dev环境,我们需要根据这个值动态指定生效的配置文件,具体的看我源码,里面都写了注释的,大致内容如下:

  3 配置pom.xml文件,添加如下代码,具体见我的https://github.com/gyb123456/SpringBoot2.0/blob/master/pom.xml文件

多环境配置pom

这里我用的是spring-boot-maven-plugin插件,就怕你们看不懂,来个详细说明吧,苦口婆心!

#特别说明!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#mvn打包命令是用的spring-boot-maven-plugin插件

查看打包时的打印信息,你会发现打包时还是依赖maven-compiler-plugin插件(好像会自动去下载这个)

spring-boot打包命令是:

mvn clean install spring-boot:repackage -Pdev

#或者不用spring-boot,用的maven-compiler-plugin插件

mvn clean package -Pdev

#或者不指定打包环境,则默认打包dev的

mvn clean package

遇坑:

1如果你打包不了,设置relativePath的值,参考我的pom

2可以用finalName属性设置打包后war包的名字,参考我的pom

tips:

我平时直接用的idea工具右侧的编译,很方便,点一下就ok了,如下:

idea操作打包

4 mybatis、mysql 、redis配置 (注意配置后记得在pom中加上对应插件!!!)

本节第1步已经实现了通过浏览器能访问项目ctrl层我并没有做任何配置。实际开发肯定要连数据库的,下面是配置:

我本来把数据库、redis等配置放到application.properties里的,因为自己开发,但是后来要区分dev、prod、preview等环境,我现在做的测试项目,所有数据库连的是一样的,就写到application.properties里吧。

application.properties或 application-dev.properties文件里添加如下代码:

# Mybatis配置 

springboot会自动根据mybatis.的前缀去读取mybatis的配置:

#配置扫描的实体类路径

mybatis.typeAliasesPackage=com.demo.gyb.entity

#配置mapper路径,mapper是在resources目录下

mybatis.mapperLocations=classpath:mapper/**/*.xml

mybatis.dialect=MYSQL

#Mybatis就这样配好了,记得在pom中加上对应插件,插件见源码的pom

# mysql 配置 

springboot会自动加载spring.datasource.*相关配置,数据源就会自动注入到sqlSessionFactory中

spring.datasource.driverClassName=com.mysql.jdbc.Driver

spring.datasource.url=xxxxx

spring.datasource.username=xxxxx

spring.datasource.password=xxxxx

#mysql 就这样配好了,记得在pom中加上对应插件,插件见源码的pom

# redis配置 

springboot会自动读取spring.开头的属性

spring.redis.database=1

spring.redis.host=xxxxx

spring.redis.port=6379

spring.redis.password=xxxxx

spring.redis.pool.max-active=8

spring.redis.pool.max-wait=-1

spring.redis.pool.max-idle=8

spring.redis.pool.min-idle=0

spring.redis.timeout=1000

#jedis连接池

###############################

#最大等待时间

#spring.redis.jedis.pool.max-wait=1000ms

##最小空闲数量

#spring.redis.jedis.pool.min-idle=1

##最大空闲数量

#spring.redis.jedis.pool.max-idle=10

##最大连接数量

#spring.redis.jedis.pool.max-active=1000

#redis就这样配好了,记得在pom中加上对应插件,插件见源码的pom

为了防止乱码,需配置序列化,配置类如下,具体代码见github:

redis的详细使用(如RedisTemplate)见测试类:

说明:config包下全是配置类,具体功能打开源码查看


5 Log4j配置

在resources目录下新建文件log4j.properties,注意名字必须是这个,springboot会自动识别此文件,网上说springboot里推荐的名字是类似spring-log4j.properties,我试下来是不行的

具体配置log4j.properties里面已经也得很清楚了,自己看去,记得在pom中加上对应插件,插件见源码的pom

g

20180831更新bug

由于对log4j理解的加深,发现之前pom.xml里log4j部分的包不对

1 log4依赖的springboot的jar是 spring-boot-starter-log4

2 spring-boot-starter-web里是要去除springboot自身的日志jar的,之前去除的没写对

之前去除的是:

改成这样(github上已经更新了):

3 log4j.properties的配置也更新了,配置成只打印我需要的信息,如去除spring的、sql的、mybatis的,配制成只有报错时才打印,具体见github.

4 日志配置的文件路径改为电脑根目录了,比如windows系统你的项目在D盘,log就会在D:/log/下,Linux会在/log/目录下


6 pom文件配置

具体配置详见源码,tomcat用的是spring-boot-starter-tomcat插件,可以直接跑项目,不需要自己再配置tomcat了

在我电脑上用idea右侧自带的maven工具点击运行即可

也可执行maven命令: mvn clean spring-boot:run -Pprod

遇坑

1 在我电脑上用idea右侧的工具点击运行,或者部署啥的都没问题,放到jenkins服务器上执行自动打包,报错原因jenkins上的jdk和maven版本和我电脑上的不一致导致的,jenkins服务器最后改成jdk1.8,maven是3.3.9版本(3.5版本执行不了,坑爹)


7 socket

未完待续(20180820)

更新20180919----------------

差不多1个月过去了,得到不少赞,所以继续更新下socket部分内容,正好最近研究这个

首先

我项目的socket入口部分在listen包里,项目启动后listen监听器(使用@WebListener注解)会自动执行,进而开启socket连接(总是忍不住字体加粗,怕你们不注意踩坑。。。。但是排版又不好看了)

socket部分的项目结构如下:

看我项目源码之前可以先参考下这个socket文章,先入门

更深一步的可以看下socket线程的理解

我在UpdateZNettyServer类里面指定了socket的端口是7073,所以服务跑起来以后,在sokit调试工具上可以这么测试

至于代码部分,我这篇文章是富文本模式,不适合贴代码,所以直接看我的源码和那个参考网址就差不多了


8 docker

未完待续


上一篇下一篇

猜你喜欢

热点阅读