Java常用工具

网友投稿 281 2022-09-20

Java常用工具

引言

部署方式:

tomcatjava -jardocker: 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

Docker的应用场景:

​​Web 应用的自动化打包和发布​​。自动化测试和持续集成、发布。在服务型环境中部署和调整数据库或其他的后台应用。从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

Rancher是一个开源的企业级容器管理平台。

通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。Rancher的基础设施服务包括网络, 存储, 负载均衡, DNS和安全模块。Rancher的基础设施服务也是通过容器部署的,所以同样Rancher的基础设施服务可以运行在任何Linux主机上。 ​​rancher.com/docs/ranche…​​

I 手动部署

1.1 java -jar

打包:​​mvn clean package -Dmaven.testskip=true​​​ 拷贝​​​scp target/xx.jar root@192.168.30.13:/opt/javaapps​​​ 启动:​​​java -jar -Dserver.port=8099 xx.jar​​

打包的执行顺序:

使用清理插件:maven-clean-plugin:2.5执行清理删除已有target目录(版本2.5);使用资源插件:maven-resources-plugin:2.6执行资源文件的处理(版本2.6);使用编译插件:maven-compiler-plugin:3.1编译所有源文件生成class文件至target\classes目录下(版本3.1);使用资源插件:maven-resources-plugin:2.6执行测试资源文件的处理(版本2.6);使用编译插件:maven-compiler-plugin:3.1编译测试目录下的所有源代码(版本3.1);使用插件:maven-surefire-plugin:2.12运行测试用例(版本2.12);使用插件:maven-jar-plugin:2.4对编译后生成的文件进行打包,包名称默认为:artifactId-version,

比如本例生成的jar文件:rtp-front-1.0-SNAPSHOT,包文件保存在target目录下(这个生成的包不能在命令行中直接执行,因为我们还没有入口类配置到Manifest资源配置文件中去)。filename 可以在pom.xml中指定。

1.2 多环境配置

通过spring.profiles.active来具体激活一个或者多个配置文件

//开发环境java -jar app.jar --spring.profiles.active=dev--server.port=8060//测试环境java -jar app.jar --spring.profiles.active=qa --server.port=8060//生产环境java -jar app.jar -Dspring.profiles.active=prod --server.port=8060

1.3 后台启动

​​nohup Command [ Arg … ] [ & ]​​

Command:要执行的命令。Arg:一些参数,可以指定输出文件。&:让命令在后台执行,终端退出后命令仍旧执行。

nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。

nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

后台启动web项目

nohup java -jar sell.jar > /dev/null 2>&1 &

nohup /Applications/WeChat.app/Contents/MacOS/WeChat > /dev/null &

1.4 添加开机启动项:systemd服务

使用 nohup 和 & 这种方式启动jar包的话,只会放在后台里面执行,如果某天,人为或机器故障等原因,触发机器重启了,那样程序就会关闭。 所以推荐使用Centos7系统自带的systemctl管理实现一个开启自动管理。

Systemd Service 是一种替代/etc/init.d/下脚本的更好方式,它可以灵活的控制你什么时候要启动服务,一般情况下也不会造成系统无法启动进入紧急模式。所以如果想设置一些开机启动的东西,可以试着写 Systemd Service。

使用systemctl start xxx启动服务,开机启动​​systemctl enable xxx启动服务​​。

systemctl 新增服务: 进入system目录​​ cd /usr/lib/systemd/system​​创建service启动文件

[Unit]Description=xxxAfter=syslog.target network.target[Service]Type=simpleExecStart=/usr/bin/java-jar/opt/javaapps/sell.jarExecStop=/bin/kill-15 $MAINPIDUser=root Group=root[Install]WantedBy=multi-user.target

ExecStart:在输入的命令是start时候执行的命令,这里的命令启动的程序必须使用绝对路径,比如你必须用/sbin/arp而不能简单的以环境变量直接使用arp。 ExecStop:在输入的命令是stop时候执行的命令,要求同上。 ExecReload:这个不是必需,如果不写则你的service就不支持restart命令。ExecStart和ExecStop是必须要有的。

Type:服务的类型,各种类型的区别如下所示

simple:默认,这是最简单的服务类型。意思就是说启动的程序就是主体程序,这个程序要是退出那么一切皆休。forking:标准 Unix Daemon 使用的启动方式。启动程序后会调用 fork() 函数,把必要的通信频道都设置好之后父进程退出,留下守护精灵的子进程。oneshot:适用于那些被一次性执行的任务或者命令,它运行完成后便了无痕迹。因为这类服务运行完就没有任何痕迹,我们经常会需要使用 RemainAfterExit=yes。意思是说,即使没有进程存在,Systemd 也认为该服务启动成功了。同时只有这种类型支持多条命令,命令之间用;分割,如需换行可以用\。dbus:这个程序启动时需要获取一块 DBus 空间,所以需要和 BusName= 一起用。只有它成功获得了 DBus 空间,依赖它的程序才会被启动。

使用Systemd运行Java Jar应用程序:

[Unit]Description=service for descriptionAfter=syslog.target network.target remote-fs.target nss-lookup.target[Service]Type=forkingExecStart=/java-service/shell/xxx-startExecStop=/java-service/shell/xxx-stopPrivateTmp=true[Install]WantedBy=multi-user.target

tomcat

[Unit]Description=tomcatapiAfter=network.target[Service]Type=forkingExecStart=/usr/local/apache-tomcat-8.5.29/bin/startup.shExecReload=ExecStop=/usr/local/apache-tomcat-8.5.29/bin/shutdown.shPrivateTmp=true[Install]WantedBy=multi-user.target

II 常用工具

2.1 用压测模拟并发

Apache ab,模拟并发性,简单,要求低,不会占用很多的cpu,也不会占用很多内存。

ab -n 100 -c 100 接口地址(-n 表示发出100个请求 ,-c 表示100个并发)

ab -t 60-c 100 接口地址 (-t 表示连续60秒内不停发请求,-c 表示100个并发)

)

2.2 Swagger RESTful 风格的 Web 服务框架

2.3 Tyk

Tyk 是一个开源的、轻量级的、快速可伸缩的 API 网关,支持配额和速度限制,支持认证和数据分析,支持多用户多组织,提供全 RESTful API。

2.4 生成唯一的主键

public class KeyUtil{ /** * 生成唯一的主键 * 格式: 时间+随机数 * synchronized 在高并发也能保证不会重复 * @return public static synchronized String genUniqueKey(){ Random random = new Random(); Integer number = random.nextInt(900000) + 100000; return

III jpa & mybatis

使用SQL建表表和表之间的关系推荐使用代码逻辑去控制,方便进行扩展(分表),不推荐使用注解。

注解

含义

@ManyToOne

定义了连接表之间的多对一的关系。

@OneToMany

定义了连接表之间存在一个一对多的关系。

3.1 jpa

添加依赖

org.springframework.boot spring-boot-starter-data-jpa

在application.yml文件中添加数据库配置

spring: datasource: url: jdbc:mysql://localhost:3306/mytest type: com.alibaba.druid.pool.DruidDataSource username: root password: root driver-class-name: com.mysql.jdbc.Driver //驱动 jpa: hibernate: ddl-auto: update //自动更新 show-sql: true //日志中显示sql语句

创建实体

@Entity@Getter@Setterpublic class Person{ @Id @GeneratedValue private Long id; @Column(name = "name", nullable = true, length = 20) private String name; @Column(name = "agee", nullable = true, length = 4) private int

​​PersonRepository.java​​接口继承JpaRepository接口

public interface PersonRepository extends JpaRepository {}

使用personRepository

@Autowired private PersonRepository personRepository; @PostMapping(path = "addPerson") public void addPerson(Person person){ personRepository.save(person); }

3.2 mybatis

org.mybatis.spring.boot mybatis-spring-boot-starter 2.2.0

IV 常用第三方Java SDK

4.1 FreeMarker

FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。 FreeMarker 是 免费的, 基于Apache许可证2.0版本发布。

修改模版之后,只要编译工程就可以生效,对应的idea的快捷键是command+F9。

​​官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7​​

要求JDK8+ ​​github.com/Pay-Group/b…​​ IDE 需安装 lombok 插件

4.3 webscoket

org.springframework.boot spring-boot-starter-websocket

使用 @ServerEndpoint 注解方式

添加 ServerEndpointExporter 到 IOC 容器中

@beanServerEndpointExporter serverEndpointExporter(){return new

使用@ServerEndpoint

@Component@Slf4j@ServerEndpoint(value = "/socket")public class SocketHandler{//存储SocketHandler的set private static CopyOnWriteArraySet webSocketSet = new CopyOnWriteArraySet(); private Session session; @OnClose public void onClose(){ webSocketSet.remove(this); //从set中删除 } @OnOpen public void onOpen(Session session){ this.session = session; webSocketSet.add(this); //加入set中 log.info("欢迎id={}你的加入成功" , session.getId()); } // 发生消息 public void sendMessage(String string) throws{ this.session.getBasicRemote().sendText(JSONObject.toJSONString(string)); //this.session.getAsyncRemote().sendText(message); } //广播 public static void sendMessageToAll(String str) throws{ for (SocketHandler item : webSocketSet) { try { item.sendMessage(str); } catch (IOException e) { continue; } } }}

4.4 Spring Data Redis

Spring Data Redis是较大的Spring数据家族的一部分,它提供了​​从Spring应用程序轻松配置和访问redis的功能​​。

org.springframework.boot spring-boot-starter-data-redis

Redis可视化工具 ​​Redis Desktop Manager​​:

官网下载:​​redisdesktop.com/download​​mac:​​apps.apple.com/us/app/redi…​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:内容爆炸式增长,如何在短视频带货中“秒”获人心?
下一篇:iOS小技能:iOS中点与像素的关系 (retina 屏幕下的点= 像素/2)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~