本文介绍使用spring boot应用打包后的war包在阿里云平台上部署并访问应用。
一、打包
- 首先我们对spring boot项目的pom.xml文件进行修改:
<packaging>war</packaging>
-
点击IDEA左下角的按钮后选择maven projects,双击lifecycle下的install按钮即可打包:
image.png
打包后可发现在项目根目录下的target目录下出现以.war和.war.original后缀的文件
二、部署
我们先将上面生成的两个war包上传到阿里云后,执行java -jar xxx.war 就可以启动这个spring boot项目了。
部署过程中遇到操作上的误解,只有这篇文章是可行的,分享一下:https://blog.csdn.net/wangrui8431/article/details/79022501
三、阿里云相关配置
(一)应用配置
由于项目中默认的端口号是8080,我们需要在阿里云上进行配置才能成功访问应用:

从截图看除了配置8080端口以外,安全组中还加了3306的端口配置,这是mysql数据库默认的端口号,下面马上用到。
(二)数据库配置
- 本例使用的数据库是mysql,安装好mysql后,我们首先进入/usr/bin/目录下执行mysql -u root -p命令(默认用户是root),输入密码后登录mysql执行下面两句命令:
grant all privileges on *.* to 'root'@'%' identified by 'password';
flush privileges;
第一个*是数据库,可以改成允许访问的数据库名称 ,第二个 是数据库的表名称,代表允许访问任意的表 ,root代表远程登录使用的用户名,可以自定义 ,%代表允许任意ip登录,如果你想指定特定的IP,可以把%替换掉就可以了 ,password代表远程登录时使用的密码,可以自定义 ;flush privileges;这是让权限立即生效 。
-
修改my.cnf配置文件
这个是mysql的配置文件,如果你无标题文章找不到在哪里的话,可以输入find /* -name my.cnf 找到,在实际查找中发现my.cnf这个配置文件中并没有bind-address这个配置,但是我在它关联的其他配置文件/etc/mysql/mysql.conf.d/mysqld.cnf中找到这行配置了。通过vim编辑该文件,找到bind-address = 127.0.0.1这一句,然后在前面加个#号注释掉,保存退出。 -
重启服务
service mysql restart或者执行 /etc/init.d/mysql restart -
配置阿里云上3306的端口配置
执行完上述四点后,我们就可以使用mysql workbench来远程登录并且创建数据库和表了。
其他问题
- 由于项目中使用到了thymeleaf,之前写法如下:
public ModelAndView avatar(@PathVariable("username") String username, Model model) {
User user = (User)userDetailsService.loadUserByUsername(username);
model.addAttribute("user", user);
return new ModelAndView("/userspace/avatar", "userModel", model);
}
userspace目录位于template目录下,在本地这样请求页面能正常打开,但是一部署到阿里云启动后访问就失败,提示找不到这个目录下的模板,后来上网查到并解决,正确的写法应该把userspace前面的斜杠去掉。
public ModelAndView avatar(@PathVariable("username") String username, Model model) {
User user = (User)userDetailsService.loadUserByUsername(username);
model.addAttribute("user", user);
return new ModelAndView("userspace/avatar", "userModel", model);
}
这样thymeleaf才能正常访问模板页面。
2.在写页面的时候发现一个问题,那就是当页面显示不下的时候没有纵向的滚动条,后来发现设置滚动条的样式加在了<div>元素上,将这个样式加在<body>元素上后就出现滚动条了,下面是具体的代码:
<body style="height: auto; overflow-y:scroll">
<div class="container">
...
</div>
</body>
网友评论