3-全!Web后端框架IDEA+Springboot2.0+Spring+Mybatis+Redis+Socket(Netty)+Log4J+Maven+多环境配置

第1节 前言

1 背景:

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

github源码地址https://github.com/gyb123456/MySpringBootFrame

源码里面还有我这里没说的知识点,比如普通类如何获取spring的bean,调用里面的方法的(因为不能用自动注入@Autowire的方式)

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操作打包



3 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包下全是配置类,具体功能打开源码查看


4 Log4j配置

这里是log4j的配置,后期我又研究了log4j2配置logback配置,你们可以看看

在resources目录下新建文件log4j.properties,注意名字必须是这个,springboot会自动识别此文件,网上说springboot里推荐的名字是类似spring-log4j.properties,我试下来是不行的。具体配置log4j.properties里面已经也得很清楚了,自己看去,记得在pom中加上对应插件,插件见源码的pom

项目目录

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

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.


5 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版本执行不了,坑爹)


6 socket

未完待续(20180820)

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

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

首先

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

socket部分的项目结构如下:

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

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

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

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


7 docker

看我的docker文集


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容