nop-entropy可逆计算入门(1)
第1步:从大佬的gitee:https://gitee.com/canonical-entropy/nop-entropy下载源码,进行本地编译,具体编译看项目下的readme,想偷懒的可以下载我编译后的jar,放到自己的maven仓库
https://pan.baidu.com/s/15qANnrCh5RV-T1CYCDvMdw?pwd=kq0q
我把代码上传到gitee,地址:https://gitee.com/a-crud-boy/nop-simple-demonn
第2步:创建一个maven项目,然后添加依赖
<parent><groupId>io.github.entropy-cloud</groupId><artifactId>nop-entropy</artifactId><version>2.0.0-SNAPSHOT</version></parent><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>io.github.entropy-cloud</groupId><artifactId>nop-spring-web-starter</artifactId></dependency><!--h2数据库--><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><!--h2数据库--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies>
第3步 ,添加springboot入口
@SpringBootApplication
public class NopSpringSimpleApplication {public static void main(String[] args) {SpringApplication.run(NopSpringSimpleApplication.class, args);}
}
第4步 ,添加application.yaml文件,注意是yaml,不是yml
nop:debug: trueorm:init-database-schema: truedatasource:driver-class-name: org.h2.Driverjdbc-url: jdbc:h2:./db/demousername: sapassword:
第5步 ,创建类
import com.nop.biz.DemoRequest;
import com.nop.biz.DemoResponse;
import io.nop.api.core.annotations.biz.BizModel;
import io.nop.api.core.annotations.biz.BizMutation;
import io.nop.api.core.annotations.biz.BizQuery;
import io.nop.api.core.annotations.biz.RequestBean;
import io.nop.api.core.annotations.core.Name;
import io.nop.api.core.exceptions.NopException;import static com.nop.biz.DemoErrors.ARG_NAME;
import static com.nop.biz.DemoErrors.ERR_DEMO_NOT_FOUND;@BizModel("Demo")
public class DemoBizModel {@BizQuerypublic String hello(@Name("message") String message) {return "Hi," + message;}@BizMutationpublic DemoResponse testOk(@RequestBean DemoRequest request) {DemoResponse ret = new DemoResponse();ret.setName(request.getName());ret.setResult("ok");return ret;}@BizMutationpublic DemoResponse testError(@RequestBean DemoRequest request) {throw new NopException(ERR_DEMO_NOT_FOUND).param(ARG_NAME, request.getName());}
}
package com.nop.biz.demo;import io.nop.api.core.annotations.biz.BizModel;
import io.nop.api.core.annotations.biz.BizMutation;
import io.nop.api.core.annotations.biz.BizQuery;
import io.nop.api.core.annotations.core.Name;
import io.nop.api.core.annotations.graphql.GraphQLReturn;
import io.nop.api.core.beans.FilterBeans;
import io.nop.api.core.beans.query.QueryBean;
import io.nop.core.reflect.bean.BeanTool;
import io.nop.dao.api.IDaoProvider;
import io.nop.dao.api.IEntityDao;
import io.nop.orm.IOrmEntity;
import jakarta.inject.Inject;import java.util.List;
import java.util.Map;/*** <strong> </strong> <br>* <p>* <strong> </strong> <br>* </p>* <br>** @author :* @date 2024年01月31日* 修改人 修改日期 修改描述<br>* -------------------------------------------<br>* <br>* <br>*/
@BizModel("DemoEntity")
public class DemoEntityBizModel {@InjectIDaoProvider daoProvider;@BizQuery@GraphQLReturn(bizObjName = "DemoEntity")public IOrmEntity getEntity(@Name("id") String id) {IEntityDao<IOrmEntity> dao = daoProvider.dao("app.demo.DemoEntity");return dao.getEntityById(id);}@BizMutation@GraphQLReturn(bizObjName = "DemoEntity")public IOrmEntity saveEntity(@Name("data") Map<String, Object> data) {IEntityDao<IOrmEntity> dao = daoProvider.dao("app.demo.DemoEntity");IOrmEntity entity = dao.newEntity();BeanTool.instance().setProperties(entity, data);dao.saveEntity(entity);return entity;}@BizQuery@GraphQLReturn(bizObjName = "DemoEntity")public List<IOrmEntity> findByName(@Name("name") String name) {IEntityDao<IOrmEntity> dao = daoProvider.dao("app.demo.DemoEntity");QueryBean query = new QueryBean();query.addFilter(FilterBeans.contains("name", name));// <contains name="name" value="a" /> name like '%a%'return dao.findAllByQuery(query);}// 注意,字段不能声明为private。NopIoC无法注入私有成员变量@InjectDemoMapper demoMapper;@BizQuery@GraphQLReturn(bizObjName = "DemoEntity")public IOrmEntity findBySql(@Name("name") String name) {return demoMapper.findFirstByName(name);}}
package com.nop.biz.demo;import io.nop.api.core.annotations.core.Name;
import io.nop.api.core.annotations.orm.SqlLibMapper;
import io.nop.orm.IOrmEntity;/*** <strong> </strong> <br>* <p>* <strong> </strong> <br>* </p>* <br>** @author :* @date 2024年01月31日* 修改人 修改日期 修改描述<br>* -------------------------------------------<br>* <br>* <br>*/
@SqlLibMapper("/test/demo/sql/demo.sql-lib.xml")
public interface DemoMapper {IOrmEntity findFirstByName(@Name("name") String name);}
package com.nop.biz;import io.nop.api.core.annotations.core.Locale;
import io.nop.api.core.exceptions.ErrorCode;import static io.nop.api.core.exceptions.ErrorCode.define;/*** <strong> </strong> <br>* <p>* <strong> </strong> <br>* </p>* <br>** @author :* @date 2024年01月31日* 修改人 修改日期 修改描述<br>* -------------------------------------------<br>* <br>* <br>*/
@Locale("zh-CN")
public interface DemoErrors {String ARG_NAME = "name";ErrorCode ERR_DEMO_NOT_FOUND =define("nop.err.demo.not-found", "指定数据不存在: {name}", ARG_NAME);
}package com.nop.biz;import lombok.Data;/*** <strong> </strong> <br>* <p>* <strong> </strong> <br>* </p>* <br>** @author :* @date 2024年01月30日* 修改人 修改日期 修改描述<br>* -------------------------------------------<br>* <br>* <br>*/
@Data
public class DemoRequest {private String name;private String email;}
package com.nop.biz;import lombok.Data;/*** <strong> </strong> <br>* <p>* <strong> </strong> <br>* </p>* <br>** @author :* @date 2024年01月30日* 修改人 修改日期 修改描述<br>* -------------------------------------------<br>* <br>* <br>*/
@Data
public class DemoResponse {private String name;private String result;}
其中@BizModel @BizMutation @BizQuery @RequestBean @Name,@SqlLibMapper 是nop中规定的一些注解,BizModel 类似spring中的Controlller,RequestBean 类似于spring中的RequestBody,SqlLibMapper类似于Mapper,代表存放sql的地址文件,后面会有请求案例,
第6步 ,创建资源文件

关于目录结构后面有介绍,需要按照nop规定好的结构,千万别忘了_module,这是规定一个目录为一个模块的文件,就是一个空文件
app-demo.beans.xml
<?xml version="1.0" encoding="UTF-8" ?><beans x:schema="/nop/schema/beans.xdef" xmlns:x="/nop/schema/xdsl.xdef"><bean id="DemoBizModel" class="com.nop.biz.demo.DemoBizModel"/><bean id="DemoEntityBizModel" class="com.nop.biz.demo.DemoEntityBizModel"/><bean id="com.nop.biz.demo.DemoMapper" class="io.nop.orm.sql_lib.proxy.SqlLibProxyFactoryBean"ioc:type="@bean:id" ioc:bean-method="build"><property name="mapperClass" value="@bean:type"/></bean>
</beans>
DemoEntity.xmeta
<meta x:schema="/nop/schema/xmeta.xdef" xmlns:x="/nop/schema/xdsl.xdef"><props><prop name="sid" displayName="SID" queryable="true"><schema type="String"/></prop><prop name="name" displayName="名称" queryable="true" insertable="true" updatable="true"><schema type="String"/></prop><prop name="status" displayName="状态" queryable="true" insertable="true" updatable="true"><schema type="Integer"/></prop><prop name="status_label" displayName="状态文本"><schema type="String"/><getter><c:script><![CDATA[if(entity.status == 1)return "ACTIVE";return "INACTIVE";]]></c:script></getter></prop></props>
</meta>
app.orm.xml
<orm x:schema="/nop/schema/orm/orm.xdef" xmlns:x="/nop/schema/xdsl.xdef"><entities><entity name="app.demo.DemoEntity" tableName="demo_entity"className="io.nop.orm.support.DynamicOrmEntity" registerShortName="true"><columns><column name="sid" code="SID" propId="1" stdSqlType="VARCHAR" precision="32" tagSet="seq"mandatory="true" primary="true"/><column name="name" code="NAME" propId="2" stdSqlType="VARCHAR" precision="100" mandatory="true"/><column name="status" code="STATUS" propId="3" stdSqlType="INTEGER"/></columns></entity></entities>
</orm>
demo.sql-lib.xml
<sql-lib x:schema="/nop/schema/orm/sql-lib.xdef" xmlns:x="/nop/schema/xdsl.xdef"><sqls><eql name="findFirstByName" sqlMethod="findFirst"><source>select o from DemoEntity o where o.name like ${'%' + name + '%'}</source></eql></sqls>
</sql-lib>
第7步 ,运行项目,项目启动以后,会在项目目录下生成一个_dump 的目录,里面可以供开发者调试

Nop平台调试模式启动Nop平台的调试模式,只需设置nop.debug=true。在调试模式下,可以通过以下链接获取所有服务定义:
/p/DevDoc__graphql/p/DevDoc__beans
例:
-
127.0.0.1:8080/p/DevDoc__graphql可以看到对外暴露的所有服务定义。
例如:type DemoEntity{ "SID" sid : String "名称" name : String "状态" status : Int "状态文本" status_label : String } -
127.0.0.1:8080/p/DevDoc__beans可以查看所有对象定义。
例如:<bean class="com.nop.biz.demo.DemoBizModel" id="DemoBizModel" ioc:aop="false"/>
注意事项
- 前端的REST链接根据对象名和方法名自动推定,无需手工指定,固定格式为:
/r/{bizObjName}__{bizMethod}。 注意是两个下划线。 @BizQuery允许通过GET和POST两种HTTP方法调用,而@BizMutation只允许通过POST方法调用。- 通过GET方式调用时,可以通过URL链接来传递参数,例如
/r/Demo__hello?message=abc。通过POST方式调用时可以通过URL来传参,也可以通过Http的body使用JSON格式传递。 - 可以通过
@Name来一个个的指定前台参数,也可以通过@RequestBean将前台传递过来的所有参数包装为指定的JavaBean类型。 - 服务函数总是返回POJO对象,并指定按照JSON格式进行编码。
示例API访问
REST
例1,带响应状态:
- 访问
127.0.0.1:8080/r/Demo__hello?message=abc - 响应:
{
“data”: “Hi,abc”,
“status”: 0
}
例2,不带响应状态:
- 访问127.0.0.1:8080/p/Demo__hello?message=abc
- 响应: Hi,abc
其他类似:
-
127.0.0.1:8080/r/DemoEntity__findByName?name=abc
-
127.0.0.1:8080/r/Demo2Entity__findByName?name=abc
GraphQL
例1(查询),关键字query:
-
访问
POST 127.0.0.1:8080/graphql -
请求体:
query{
Demo__hello(message:“2343”)
} -
响应
{
“data”: {
“Demo__hello”: “Hi,abc”
}
}
例2(更新),关键字mutation:
-
访问
POST 127.0.0.1:8080/graphql -
请求体:
mutation {
Demo__testOk( name: “zhagnsan”, email: “123@qq.com” ) {
name
result
}
} -
响应
{
“data”: {
“Demo__hello”: “Hi,abc”
}
}
例3(保存),关键字mutation:
- 访问
POST 127.0.0.1:8080/graphql - 请求体:
mutation {
DemoEntity__saveEntity(data: {name: “zhagnsan”, status: 1}) {
sid
name
status
}
} - 响应
{
“data”: {
“DemoEntity__saveEntity”: {
“sid”: “23410bb4cdd74fc7bd2c1795059ff8a1”,
“name”: “zhagnsan”,
“status”: 1
}
}
}
例2跟例3有点类似于spring中的加RequestBody跟不加RequestBody的区别, 用 @RequestBean注解就直接写属性字段,@Name需要把方法中的对象参数名写在前面
文件命名规范
平台内所有会被自动识别并处理的文件模式已在此文档中列举:
Nop平台内部约定了一定的资源路径模式,会自动查找满足模式的文件进行加载。
META-INF/servicesio.nop.core.initialize.ICoreInitializer 使用Java内置的ServiceLoader机制注册分级初始化函数CoreInitialization会读取所有CoreInitializer,按照优先级顺序执行
bootstrap.yaml 静态全局配置文件,其中的内容优先级最高,不会被外部配置所覆盖
application.yaml 全局的配置文件
application-{profile}.yaml 全局的配置文件,profile是通过nop.profile指定的部署环境名称_vfs//_delta/{deltaDir} 这里是delta层的名称,缺省会加载default层这里的文件会覆盖标准路径的同名文件/dict{dictName}.dict.yaml 字典文件不会被自动加载,但是通过dictName加载指定字典文件 /i18n/{locale}{moduleName}.i18n.yaml I18nManager初始化的时候会自动加载所有i18n文件 /nop/aop{xxx}.annotations Nop的AOP代码生成器生成包装类时会读取所有的annotations文件,并为每个标注了指定注解的类生成AOP包装类/autoconfig{xxx}.beans NopIoC会自动扫描解析所有后缀名为beans的文件,加载其中的beans.xml文件/core/reigstry{xxx}.register-model.xml 初始化时会自动扫描所有registry-model.xml文件,并注册对应的DSL模型解析器,将它们和特定的文件类型关联起来/dao/dialect/selector{xxx}.selector.xml 初始化时会自动扫描所有selector.xml文件,加载数据库方言的匹配规则{dialectName}.dialect.xml 数据库方言定义文件,按照dialectName来加载/main/auth/main.action-auth.xml 全局的操作权限和菜单定义文件,在其中通过x:extends来引用其他权限文件/main.data-auth.xml 全局的数据权限定义文件,在其中通过x:extends来引用其他数据权限文件 /{moduleId} Nop模块的moduleId必须是nop/auth这种两级目录结构_module 每个Nop模块下都有一个_module文件来标记它是模块。/beansapp-{xxx}.beans.xml NopIoC启动时会自动扫描每个模块的beans目录下以`app-`为前缀的beans.xml文件/model{bizObjName}.xbiz 所有的服务对象原则上都是要在beans.xml中注册,然后再通过对象名查找到对应的xbiz和xmeta文件{bizObjName}.xmeta NopDynEntity对象采用了简化注册流程,直接向BizObjectManager注册,没有在beans.xml中定义服务对象 /ormapp.orm.xml NopOrm引擎初始化的时候会加载所有模块的orm目录下的app.orm.xml模型文件/pages/{bizObjName}{pageId}.page.yaml 可以配置页面文件在系统初始化的情况下加载,它引用的view模型因此被连带加载{bizObjName}.view.xml View模型不会被自动加载,但是一般会放置在这个位置
第1篇就先写这么多,后面再慢慢完善
相关文章:
nop-entropy可逆计算入门(1)
第1步:从大佬的gitee:https://gitee.com/canonical-entropy/nop-entropy下载源码,进行本地编译,具体编译看项目下的readme,想偷懒的可以下载我编译后的jar,放到自己的maven仓库 https://pan.baidu.com/s/15qANnrCh5RV…...
C++(9) 虚函数
文章目录 虚函数1. 虚函数1.1 虚函数案例11.2 虚函数案例21.2 纯虚函数1.3 纯虚函数语法要求总环1.4 纯虚函数应用1.4.1 生活案例1.4.2 虚函数引用代码 虚函数 1. 虚函数 1.1 虚函数案例1 #include <iostream>using namespace std;class Animal { public:// Animal 类…...
uniapp 使用canvas 画海报,有手粘贴即可用(拆成组件了,看后面)
1.直接使用 html部分 <view click"doposter">下载海报</view> <canvas canvas-id"myCanvas" type2d style"width: 370px; height: 550px;opcity:0;position: fixed;z-index:-1;" id"myCanvas" />js 部分 drawBac…...
Amazon Bedrock 的微调和持续预训练功能允许用户使用私有数据定制模型
今天我很高兴地宣布,您现在可以在 Amazon Bedrock 中使用自己的数据,安全并私密地定制基础模型(FMs),按照您所在领域、企业和用例的特定要求构建应用程序。借助定制模型,您可以创建独特的用户体验ÿ…...
Pyecharts绘制多种炫酷气泡图
Pyecharts绘制多种炫酷气泡图 引言 数据可视化是数据分析中不可或缺的一环,而Pyecharts作为一款基于Echarts的Python图表库,提供了丰富的图表类型,其中气泡图是一种常用于展示三维数据的炫酷图表。本文将介绍如何使用Pyecharts绘制多种炫酷…...
C# 多线程(2)——线程同步
目录 1 线程不安全2 线程同步方式2.1 简单的阻塞方法2.2 锁2.2.1 Lock使用2.2.2 互斥体Mutex2.2.3 信号量Semaphore2.2.3 轻量级信号量SemaphoreSlim2.2.4 读写锁ReaderWriterLockSlim 2.3 信号同步2.3.1 AutoResetEvent2.3.1.1 AutoResetEvent实现双向信号 2.3.2 ManualResetE…...
Java设计模式【工厂模式】
Java设计模式【工厂模式】 前言 三种工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式; 创建型设计模式封装对象的创建过程,将对象的创建和使用分离开,从而提高代码的可维护性和可扩展性 简单工厂模式 概述:将…...
AI智能分析+明厨亮灶智慧管理平台助力“舌尖上的安全”
春节是中国最重要的传统节日之一,在春节期间,人们聚餐需求激增,餐饮业也迎来了高峰期。在这个时期,餐饮企业需要更加注重食品安全和卫生质量,以保证消费者的健康和权益,明厨亮灶智慧管理成为了餐饮业中备受…...
【现代密码学基础】详解完美安全与香农定理
目录 一. 介绍 二. 完美安全的密钥与消息空间 三. 完美安全的密钥长度 四. 最优的完美安全方案 五. 香农定理 (1)理论分析 (2)严格的正向证明 (3)严格的反向证明 六. 小结 一. 介绍 一次一密方案…...
Python 将文本转换成语音播放 pyttsx3
Python 将文本转换成语音播放 pyttsx3 目录 Python 将文本转换成语音播放 pyttsx3 1. 安装 2. 使用 3. 封装 Pyttsx3 是一个 Python 库,它提供了文本到语音(Text-to-Speech,TTS)转换的功能。这个库允许 Python 程序通过调用本…...
FPGA高端项目:Xilinx Artix7系列FPGA 多路视频缩放拼接 工程解决方案 提供4套工程源码+技术支持
目录 1、前言版本更新说明给读者的一封信FPGA就业高端项目培训计划免责声明 2、相关方案推荐我这里已有的FPGA图像缩放方案我已有的FPGA视频拼接叠加融合方案本方案的Xilinx Kintex7系列FPGA上的ov5640版本本方案的Xilinx Kintex7系列FPGA上的HDMI版本 3、设计思路框架设计框图…...
开源模型应用落地-业务优化篇(三)
一、前言 假如您跟随我的脚步,学习到上一篇的内容,到这里,相信细心的您,已经发现了,在上一篇中遗留的问题。那就是IM服务过载的时候,如何进行水平扩容? 因为在每个IM服务中,我们用JV…...
基于SpringBoot+Vue实现的物流快递仓库管理系统
基于SpringBootVue实现的物流快递仓库管理系统 文章目录 基于SpringBootVue实现的物流快递仓库管理系统系统介绍技术选型成果展示账号地址及其他说明源码获取 系统介绍 系统演示 关注视频号【全栈小白】,观看演示视频 基于SpringBootVue实现的物流快递仓库管理系…...
编程笔记 html5cssjs 072 JavaScrip BigInt数据类型
编程笔记 html5&css&js 072 JavaScrip BigInt数据类型 一、BigInt 数据类型二、BigInt 的创建和使用三、BigInt 操作与方法三、示例小结 JavaScript BigInt 数据类型是一种内置的数据类型,用于表示大于 Number.MAX_SAFE_INTEGER(即2^53 - 1&…...
matlab simulink 步进电机控制
1、内容简介 略 41-可以交流、咨询、答疑 2、内容说明 电动执行器定位控制在生产生活中具有广泛的应用,在使用搭载步进电机的电动执行器进行定位控制的时候,定位系统的定位精度和响应波形,会随着负载质量的变化而变化,这是由电…...
使用阿里云的IDaaS实现知行之桥EDI系统的单点登录
,在开始测试之前,需要确定用哪个信息作为“登陆用户的ID字段”。 这个字段用来在完成SSO登陆之后,用哪个信息将阿里云IDaaS的用户和知行之桥EDI系统的用户做对应。这里我们使用了 phonenumber 这个自定义属性。需要在阿里云做如下配置&#x…...
基于微服务的高考志愿智能辅助决策系统(附源码)
目录 一.引言 1、编写目的 2、系统功能概述 二.功能分析 三.微服务模块 1、微服务用户相关模块 (1)用户注册 (2)用户登录 (3)用户信息管理 (4)用户操作 2、微服务文件云存…...
LeetCode —— 137. 只出现一次的数字 II
😶🌫️😶🌫️😶🌫️😶🌫️Take your time ! 😶🌫️😶🌫️😶🌫️😶🌫️…...
pnpm、npm、yarn 包管理工具
1、npm 关键词:软件包管理器、命令行工具、一个社区和一个平台 npm(Node Package Manager)是一个用于Node.js环境的软件包管理器。它是一个命令行工具,用于安装、升级、删除和管理JavaScript软件包。npm最初是随同Node.js一起发布…...
微服务知识
1、概念 大型单体应用拆分成多个独立部署运行的微服务(解决并发问题) 2、特点 3、技术栈 4、微服务带来的问题 5、微服务的注册中心 服务注册与发现:微服务实例在启动时会向注册中心注册自己的信息…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
