这里用maven打包,关于maven下载安装及环境变量配置请自行百度。
1.排除嵌入式tomcat,修改pom文件
由于SpringBoot自带嵌入容器,如果要部署到外部tomcat,打包之前就需要把嵌入tomcat排除在外:
org.springframework.boot
spring-boot-starter-tomcat
provided
同时将
jar
修改为:
war
2.注册启动类
修改启动类继承SpringBootServletInitializer类,并重写configure方法:
@SpringBootApplication
public class XibuApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(XibuApplication.class);
}
}
3.用maven命令打包
cd到项目根目录,执行以下打包指令
mvn clean package -Dmaven.test.skip=true;
该命令会在项目根目录下的target文件夹下生成对应的war包文件。
4.将war包文件部署到tomcat
比如笔者war包名为xibu.war,将该war包丢到/Users/archerlj/Library/apache-tomcat-8.5.8/webapps
目录下即可。
为了访问方便,我修改了tomcat安装目录下的conf文件下的server.xml文件:
在该文件最后的Host节点添加如下:
path是虚拟目录。
docBase是真实目录,可以是相对路径或者绝对路径,这里因为xibu.war放在webapp下面,所以直接用了相对路径。
这样,启动tomcat之后就可以直接通过访问http://localhost:8080
来访问你的项目了。
好了,cd到tomcat的bin目录下 sudo sh startup.sh
启动tomcat就可以了,这时候访问http://localhost:8080
就能访问部署的项目了(笔者修改了端口:8081)
5.遇到的问题:
1。有些jar包打包的时候报错,比如google的kaptcha 在中央仓库中是不存在的。这时候需要自己下载对应的jar包,并添加到本地maven仓库:
com.google.code.kaptcha
kaptcha
2.3.2
mvn install:install-file -DgroupId=com.google.code -DartifactId=kaptcha -Dversion=2.3.2 -Dfile=C:\kaptcha-2.3.jar -Dpackaging=jar -DgeneratePom=true
C:\kaptcha-2.3.jar
是下载的kaptcha jar包的位置。
再打包就可以了。
2.图片上传。
关于图片上传,我是上传到了tomcat中自己目录的一个固定位置
/Users/archerlj/Library/apache-tomcat-8.5.8/webapps/xibu/uploadFiles
xibu是我的app名字,直接把上传的图片丢到uploadFiles中,然后再把对应的路径存到数据库中即可(存储的路径只需要这么写就可以了:http://localhost:8080/uploadFiles/xxxxx.png
);
以下是示例代码:
@Value("${upload.file.address}")
private String uploadAddress;
@Value("${upload.file.db.save.address}")
private String dbSaveAddress;
@RequestMapping(value = "/updatePostrait", method = RequestMethod.POST)
@ResponseBody
public Response handleFileUpload(@RequestParam("croppedImage") MultipartFile file,
HttpServletRequest request,
Map map){
if(!file.isEmpty()){
try {
File temp = new File(uploadAddress);
if (!temp.exists() && !temp.isDirectory()) {
temp.mkdir();
}
String uploadFile = uploadAddress + getUserId() + ".png";
File tempFile = new File(uploadFile);
if (tempFile.exists()) {
tempFile.delete();
}
BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(
new File(uploadFile)
)
);
out.write(file.getBytes());
out.flush();
out.close();
User user = getUser();
user.setPostraitImage(dbSaveAddress+getUserId()+".png");
userRepository.save(user);
getSession().setAttribute(Const.LOGIN_SESSION_KEY, user);
map.put("user", user);
return result(ExceptionMsg.SUCCESS);
} catch (FileNotFoundException e) {
e.printStackTrace();
return result(ExceptionMsg.FAILD);
} catch (IOException e) {
e.printStackTrace();
return result(ExceptionMsg.FAILD);
}
}else{
return result(ExceptionMsg.FAILD);
}
}
application.properties:
########################################################
### 文件上传未知
########################################################
upload.file.address=/Users/archerlj/Library/apache-tomcat-8.5.8/webapps/xibu/uploadFiles/
upload.file.db.save.address=http://localhost:8081/uploadFiles/