前言
一个有点久的项目,前不久做的前后端分离,虽然相比较技术还是有点落后,很小白,还是总结一下,毕竟路还是得一步步的走。
后台:
- 系统整体架构是
spring+springMVC、持久层是mybatis、连接池之前是c3p0后来连接池老是挂就换成了HikariCP。 - 服务器是
tomcat、使用了开源项目tomcat-redis-session-manager持久化session到redis集群. - 由于并发不高后台服务器就2台,项目过程中调用外部系统接口的地方很多,所以spring集成了
zookeeper和dubbo缓解调用外部接口的负载. - 公司系统很多JNDI配置方面集成了
disconf。
前台:
打包工具:ANT
因为这个项目工程包含三个子项目(客户系统、定时任务、后台),开发的时候这三个项目关联性强,所以在一个工程里面也方便开发。
有篇文章写的挺好的传送门。
配置文件:JNDI
由于properties文件会因服务器环境或其他场景需要改动,是放在tomcat的conf目录下,具体可以使用spring的BeanFactoryPostProcessor类来进行加载,在XML文件中用${key}或者需要在相应的类文件中编写该key的setter方法,spring就会注入值了,具体代码如下:
|
|
其中confPath变量是在tomcat的context.xml添加的环境变量,如:
|
|
后来由于服务器环境太多以及项目配置文件也增多,每次配置调整起来都比较麻烦,还容易出错,所以AMC系统与disconf系统做了深度整合,提供集中式配置管理服务,基于zookeeper实现对配置更改的实时推送,配置更改自动reload,需要在servlet.xml中添加一下代码,如:
|
|
那么业务系统如何连接AMC?
需要在项目的classpath(源文件下或者src下)路径下添加两个文件名字必须一样(disconf.properties、disconf_sys.properties)。
disconf_sys.properties文件内容说明如:
|
|
disconf.properties文件内容即说明如:
|
|
当在amc配置管理中心修改了jndi.properties配置文件并点更新按钮.项目中bean的属性值就修改了不用重启项目。
注:项目一部分托管disconf管理,一部分spring管理的时候,spring管理的配置一定要写在disconf管理配置之后
连接池:HikariCP
spring配置如下:
|
|
我的配置文件如下:
|
|
tomcat-redis-session-manager持久化session到redis集群
1、添加redisson-all-2.9.2.jar 和 redisson-tomcat-8-2.9.2.1.jar
2、修改tomcat的conf下context.xml:
删除 <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />并增加如下:
|
|
3、在catalina.properties中添加如下:
|
|