目前接口工程和前端工程都已通过tomcat服务器发布成功了,端口分别使用的是8088和8080端口,因此访问前端页面的时候暂时还有端口号,后续用nginx的时候会干掉8080端口号。目前的版本访问地址是:http://www.oursnail.cn:8080/fossi-shop/。支持用户注册和登录,并且可以使用支付宝沙箱APP支付(不要用真实的APP,当然我的这个也用不起来~)欢迎大家点一点哦,不过不要恶意攻击或压测,很脆弱。国庆节长假即将结束,能把单体项目上线,感觉还是不错的。
本文完成剩下的部分:
springboot不同环境的配置
springboot打war包并上传发布
发布前端项目
解决cookie异常
一、多环境部署
一般,环境分为开发环境dev、测试环境test和生产环境prod。
为什么要分环境呢?因为开发环境、测试环境和生产环境往往一些url地址是不一样的,如果在这些环境直接手动来回更改,会很麻烦并且容易出错。springboot
支持多种环境的配置文件直接切换,无需一项一项地修改配置。
springboot
的配置文件我们现在主要就是一个application.yml
,这个配置文件里面放的应该是无论哪种环境都不会变化的配置。然后根据不同环境新增application-dev.yml
等配置文件来存放有差异的配置项,比如数据库的url,开发环境一般是本机,所以application-dev.yml
中的spring.datasource.url
一般是127.0.0.1
打头的地址,即用的是本地的数据库。但是到了生产环境,这里可能是生产环境的一个实际的内网IP,因此这一项肯定是变化的,需要提取出来分别配置。
那么针对我们这个项目,来看看变化的部分是哪些?这些就是需要我们单独提出来的部分了。
数据源配置
url根据实际情况去做修改
密码根据实际情况去做修改
mybatis sql
执行详情日志打印
dev
可以打印test
可以打印prod
不要打印
此外,发布上线还有其他几个地方需要注意修改,不能忽略,按照下面一步一步进行检查,如果有所遗漏也没事,上线肯定会有bug,到时候回过头来再解决也是一个很好的思路。
将
config.properties
文件分为了两个文件:config-dev.properties
和config-prod.properties
在
prod
文件中修改相关配置为实际存放头像的路径和访问的前缀在
FileConfig
引用配置文件的地方,需要将其改为@PropertySource("classpath:config-prod.properties")
#用户头像相关
file.imageNamePrfix=/face-
file.imageUserFaceLocation=/home/picture/faces/
# 注意这里要加上发布后的项目名
file.imageServerUrl=http://api.oursnail.cn:8088/yummyfood-api/
修改
parameter.properties
文件,指定支付回调地址的实际路径
# 支付后的回调通知接口地址,注意这里要加上发布后的项目名
alipay.callback.url=http://api.oursnail.cn:8088/yummyfood-api/payment/alipay_callback
这里我在后台设置了一条A记录,api.oursnail.cn
可直接解析为IP地址,因此这里直接改为了域名。
修改
corsFilter
设定跨域的请求地址
# 防止老要修改,我把能加的都加了一遍
config.addAllowedOrigin("http://localhost:8080");config.addAllowedOrigin("http://111.231.119.253:8080");config.addAllowedOrigin("http://111.231.119.253:80");config.addAllowedOrigin("http://www.oursnail.cn:8080");config.addAllowedOrigin("http://www.oursnail.cn:80");config.addAllowedOrigin("http://oursnail.cn:8080");config.addAllowedOrigin("http://oursnail.cn:80");
修改
logback-spring.xml
中日志存放的路径
/workspace/yummyfoodlog/yummyfood-info-%d{yyyy-MM-dd}.%i.log.zip
修改静态资源映射的地址,我设定为
/home/picture/faces/
:
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
//实现静态资源的映射
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
// .addResourceLocations("classpath:/static/")
.addResourceLocations("classpath:/META-INF/resources/")//映射swagger2,否则会导致404
.addResourceLocations("file:/home/picture/faces/");//这个就是映射的路径,下面的文件就可以通过localhost:8088/xxx.png来访问了
}
}
由于是要作为发布版本,因此我这里都指定为prod
版本。
二、打包
万事俱备,只欠打包了。
第一步:在api
层的pom
文件中指定打包方式为war
:
war
第二步:在根pom
下,排除掉自带的内置tomcat
:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-tomcatartifactId>
<groupId>org.springframework.bootgroupId>
exclusion>
exclusions>
dependency>
第三步:既然不用内置tocmat
了,那么就需要添加servlet
依赖
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
dependency>
第四步:项目启动类,原来的入口不能直接用了,需要另外一种外部tomcat
启动的方式
public class WarStarterYummyFoodApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 指向Application这个Springboot启动类
return builder.sources(YummyFoodApplication.class);
}
}
第五步:指定war
包生成的名字,在根pom
文件中指定:
<build>
<finalName>yummyfood-apifinalName>
build>
最后执行maven
的clean
和install
生成最终的war
包。这个war
可以在生成后的target
目录中看到,我们直接将其复制出来,上传到tomcat-api
的webapps
目录下,由于tomcat
是正在启动的,因此直接扔进去就会自动被解压。
如何验证我们修改的对不对呢?还记得我们的swagger
嘛?我的访问地址是:
http://api.oursnail.cn:8088/yummyfood-api/doc.html
注意,这里我不用IP了,直接用域名
看看能不能正常展示就知道啦,并且可以选择里面一个功能做测试,比如展示首页轮播图。看看是否能请求到正常数据。我的看起来都是正常的。
三、发布前端工程
前端工程发布前要注意修改后端的一些地址。主要就是在app.js
文件中。
我自己修改为:
/* 生产环境 */
serverUrl: "http://api.oursnail.cn:8088/yummyfood-api", // 接口服务接口地址
shopServerUrl: "http://www.oursnail.cn:8080/fossi-shop/", // 门户网站地址
paymentServerUrl: "http://api.oursnail.cn:8088/yummyfood-api", // 支付中心服务地址
centerServerUrl: "http://www.oursnail.cn:8080/fossi-center/", // 用户中心地址
cookieDomain: ".oursnail.cn;", // cookie 域
那么,按照目前的状况,我前端访问的路径是:
http://www.oursnail.cn:8080/fossi-shop
这里我用了www.oursnail.cn
来访问,这个是要在云服务器上做解析的:
修改好两个前端工程的app.js
后,就可以直接扔到tomcat-front
这个tomcat
下面了。我直接访问,可以看到一切正常:
不过存在一个BUG,注册成功不能正常跳转,点击登录也有问题,发现左上侧还是不显示用户名,发现cookie
中没有user
这个数据,因此前端没有任何用户信息的展示。
其实后台的接口工程已经报错了,在我们注册或登录的时候,把信息放到.oursnail.cn
这个域的时候失败了。
如何解决呢?原因就出在这个报错信息第一行的Rfc6265CookieProcessor
这个处理器。我们可以用老版本的处理器就可以解决这个报错。我们可以自定义用老的cookie
处理器来处理。如何指定呢?
在tomcat-api
的conf
目录下有一个叫做context.xml
的文件,我们在里面指定即可:
重启项目,我们看到cookie
问题已解决:
至此,大功告成!
对了,不要忘记确认支付宝回调地址也在网站的后台也修改过来: