发表于: 2021-11-16 22:04:34

1 1231


今天完成的事:在远程服务器上部署war包,启动项目,学习了resin的的配置的文件,war包的发布

在IDEA中的用maven clean(清理) 后compile(编译)  再package(打包),然后通过sftp把打好的war包

放入自己设置好的文件夹中/opt/war 并给war重命名为task.war


resin的配置文件设置:

    <host id="" root-directory=".">

      <!--

         - webapps can be overridden/extended in the resin.xml

        -->

      <web-app id="/task" root-directory="/opt/task" archive-path="/opt/war/task.war" redeploy-mode="automatic"/>

        <web-app id="/" root-directory="webapps/ROOT"/>

      <web-app id="/task2" root-directory="/opt/task2"/>

    </host>

启动resin 服务 /usr/local/resin/bin/resinctl start

访问http://120.78.219.91:8080/task/

部署成功

访问http://120.78.219.91:8080/task/test2 用转化为Jsontaglib 的json格式

 

测试resin启动的最小内存为48m,设置32m 就访问不了。

服务器端,一个java应用类似resin设置-Xms和-Xmx值最好是相同的
最有效的垃圾回收-Xmn应该小于-Xmx设置的值
-Xmx是jvm在系统中获得最大内存,从而限制了java堆的大小
------------------
在jvm中有两个gc进程在运行,一个是轻量级进程生成堆;一个是全gc进程在内存不足的情况下释放堆
生成堆的数量是通过-Xmn来设置的;-Xmx减去-Xmn即为旧的堆的数量;一般来说,你不想生成堆太大或者不想保持太长时间,可以通过设置它来调整
每个线程在jvm都会获得一个堆;堆的大小限制了线程的数量,设置太大堆的大小有可能会使内存溢出
-Xss预先设定为1024k,假如堆空间太小,你会发现异常;此外最好设置ulimit -s 2048
ulimit -n 102400
第一个是系统层面对线程栈的限制
第二是对用户文件数的设置
-----------------------
所以有以下建议设置jvm运行空间
-Xms=-Xmx为系统内存(不包括swap)的四分之一
多实例情况下最大为二分之一按预期并发数做调整
-Xmn为-Xmx的四分之一
-Xss可以设置128k一般是够用的可以适当调大
------------------------
-Xms含义是初始java堆的大小
-Xmx含义是最大java堆的大小
-Xmn含义是新生成堆的大小
-Xss每个线程堆的大小


写了restful的controller并测试返回的数据

package com.jnshu.controller;

import com.jnshu.model.Student;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;


@Controller
@RequestMapping("/restful")
public class restfulController{
private Student student;
   public restfulController(){
student=new Student();
       this.student.setName("赵云");
       this.student.setId(7007);
       this.student.setSex("男");
       this.student.setAddress("常山");
   }
//返回json格式数据 @param name
   @RequestMapping("/hello")
@ResponseBody
   public String restful1(String name){
System.out.println("name"+name);
       return "hello";
   }
//返回页面,视图
   @RequestMapping("/hello1")
public String restful2(String name){
System.out.println("name"+name);
       return "hello";
   }
/**
* ResponseBody  注解,代表返回json格式
* RequestBody  注解 ,代表 json格式提交数据*/
@RequestMapping(value = "/post", method = RequestMethod.POST)
@ResponseBody
public Student testJson(@RequestBody Student student) {
System.out.println(student.getId());
   System.out.println(student.getName());
   return student;
}
/**
   * ResponseBody  注解,代表返回json格式
   * form 形式的提交数据
   */
   @RequestMapping(value = "/post1",method = RequestMethod.POST)
@ResponseBody
   public Student testStu1(Student student){
System.out.println(student.getId());
       System.out.println(student.getName());
       return student;
   }

}


用postman测试

今天遇到的问题:之前自己的电脑开始就安装的是JDK17,是最新发布的jdk,在IDEA中使用的的也是JDK17,使用tomcat的没用任何问题,但是部署resin始终是部署不成功,首先是安装resin,需要openssl ,macos 默认的openssl 是2.7,但是编译resin时,提示找不到openssl/ssh ,经网上查各种资料更新openssl 需要用brew 安装openssl,brew 因为是外网的,国内访问不了。使用别人的脚本从

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

从中科大的镜像安装,安装过程中又提示不能使用root权限安装,root权限太高,改为普通用户安装成功。

./configure --prefix=/usr/local/resin #--with-java-home=/usr/local/java/jdk-17.0.1 —enable-64bit --with-openssl=/usr/local/opt/openssl

安装成功。在IDEA中添加Resin 插件后,启动Resin 提示版本不对,使用6 or 7 ,之前一直没想明白是什么意思。后面想到应该是jdk的版本太新的问题,在IDEA中下载jdk1.8,并启动程序,因为是用maven模版创建的webapp ,显示的的头文件又不对,更改头文件为

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC
       "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
       "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        version="2.5">

终于把Rsin启动成功了。

然后就是如何把自己打包的文件发布到服务器上,摸索了大半天才明白resin的配置文件用法

今天的收获:知道使用最新的JDK并不是最好的选择,选择使用java容器的时候应该先去查一下,该容器支持哪些JRE 才好,再确定使用哪个版本的JDK来开发。学会的resin 的war发布,Jsontaglib使用

明天的任务:13.本地编写代码,实现Service的功能,编写Junit,插入几条模拟数据,用Postman测本地接口,看结果是否正常


返回列表 返回列表
评论

    分享到