Yan 项目简介(Instruction)
项目已托管至Github,请前往https://github.com/micyo202/yan查看源码
注:最新基于SpringCloud的完整微服务架构体系已经逐步完成,查看详细内容请前往https://www.jianshu.com/p/a061effe4ae5
该项目是一整套整合 Dubbo+Zookeeper+SpringMVC+Spring+MyBatis 支持分布式 的高效率便捷开发RPC 框架,使开发人员更专注于业务,达到面向业务开发。 项目使用 Maven 构建,便于项目管理,可支持 Oracle、MySql 等主流数据库。 项目模块化分层明确,代码规范,便于后期维护等工作。 前端展示界面采用基于 Boostrap 实现的响应式布局,并集成了一系列的动画效果插件,整体界面简洁、美观大方并可优雅的与后台完成交互操作。 项目目标是为中小型企业打造全方位的J2EE企业级开发解决方案,提高工作效率。 该项目是yan-demo单节点项目的升级版 ,支持分布式 ,持续更新中,敬请期待...
近期更新内容
beta 1.0.0:项目整体改造,升级为RPC架构。(注:若想查看非RPC版请移步至https://gitee.com/micyo202/yan)
beta 0.1.0:模块优化,删除不必要的模块,优化代码(模块详情参考:三、项目结构)
beta 0.0.5:前端添加ECharts,便于图形化展示
beta 0.0.4:添加JMS(ActiveMQ)消息服务(目前仅测试方法,暂无业务流转,后期逐渐完善细化)
beta 0.0.3:添加Solr搜索引擎服务(基本的全文检索功能,可根据实际需求情况进行二次开发,后期本人再逐渐完善)
beta 0.0.2:优化整体代码、添加更多注释,结构更清晰、代码更易懂
beta 0.0.1:将原有yan-demo项目重构,保留原有功能,模块拆分、优化项目结构
项目所需工具及版本 *
zookeeper-3.4.11 http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.11
apache-activemq-5.15.2 http://activemq.apache.org/activemq-5152-release.html
solr-7.1.0 https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/7.1.0
一、项目开发环境&工具(Environment&Tools)
MacOS Sierra / Windows 7
MySql 5.7
JDK 1.8
CentOS 7
IntelliJ IDEA 2017.2.5 / Eclipse 4.6.1
Navicat Premium 11.1.12
Maven 3.3.9
Jetty 9.4.6.v20170531 / Tomcat 9.0.1
二、技术选型(Technology)
1.服务端技术(Server)
名称
版本号
网址
Spring Framework
4.3.13.RELEASE
http://projects.spring.io/spring-framework/
Shiro
1.4.0
http://shiro.apache.org
AspectJ
1.8.13
http://www.eclipse.org/aspectj/
MyBatis
3.4.5
http://www.mybatis.org/mybatis-3/zh/index.html
MyBatis Generator
1.3.5
http://www.mybatis.org/generator/index.html
PageHelper
5.1.2
http://git.oschina.net/free/Mybatis_PageHelper
Dubbo
2.6.0
http://dubbo.io
Solr
7.1.0
https://lucene.apache.org/solr/
ActiveMQ
5.15.2
http://activemq.apache.org
Druid
1.1.5
https://github.com/alibaba/druid
Jackson
2.9.2
https://github.com/FasterXML/jackson
Dom4j
1.6.1
http://www.dom4j.org
Ehcache
2.6.11
http://www.ehcache.org/
Logback
1.2.3
https://logback.qos.ch
Maven
3.3.9
http://maven.apache.org/
Zookeeper
3.4.11
https://www.apache.org/dyn/closer.cgi/zookeeper/
2.前端技术(Web)
名称
版本号
网址
angular
-
https://angularjs.org
awesome-bootstrap-checkbox
-
https://github.com/flatlogic/awesome-bootstrap-checkbox
bootstrap
3.3.7
http://www.bootcss.com
bootstrap-datetimepicker
-
http://www.bootcss.com/p/bootstrap-datetimepicker/
bootstrap-select
1.12.4
http://silviomoreto.github.io/bootstrap-select/
bootstrap-table
1.11.1
http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/
bootstrapvalidator
0.5.3
https://github.com/nghuuphuoc/bootstrapvalidator/
ECharts
3.8.4
http://echarts.baidu.com
font-awesome
4.7.0
http://fontawesome.io/icons/
fontIconPicker
2.0.0
https://codeb.it/fonticonpicker/
fullPage
-
https://alvarotrigo.com/fullPage/
jquery-confirm
3.3.0
https://github.com/craftpip/jquery-confirm
malihu-custom-scrollbar-plugin
-
https://github.com/videoMonkey/malihu-custom-scrollbar-plugin
material-design-iconic-font
2.2.0
https://github.com/zavoloklom/material-design-iconic-font
waves
0.7.5
https://github.com/fians/Waves
zTree_v3
3.5.26
http://www.treejs.cn/v3/main.php#_zTreeInfo
BootstrapMenu
-
https://mobirise.com/bootstrap-menu
device
-
https://github.com/matthewhudson/device.js
jquery
3.2.1
http://jquery.com
jquery-cookie
-
https://github.com/carhartl/jquery-cookie
三、项目结构(Construction)
yan -- 根目录
├── yan-api -- 接口模块(提供核心接口方法)
| ├── main -- 主模块路径
| | ├── java -- java类路径
| | | ├── com.yan.api -- 核心接口包
| | | | ├── jms -- 消息服务接口
| | | | ├── persistence -- 持久化接口
├── yan-common -- 公共模块
| ├── main -- 主模块路径
| | ├── java -- java类路径
| | | ├── com.yan.common -- 公共类包
| | | | ├── annotation -- 注解类
| | | | ├── aspect -- 切面类
| | | | ├── constant -- 常量定义类
| | | | ├── model -- 通用模型
| | | | ├── service -- 泛型对象服务
| | | | ├── spring -- spring扩展类
| | | | ├── support -- 基础支持类
├── yan-core -- 核心模块(提供核心方法)
| ├── main -- 主模块路径
| | ├── java -- java类路径
| | | ├── com.yan.core -- 核心类包
| | | | ├── annotation -- 注解类
| | | | ├── aspect -- 切面类
| | | | ├── controller -- 控制器
| | | | ├── injector -- 注入类
| | | | ├── listener -- 消息消费者监听器
| | | | ├── shiro -- 安全认证类
├── yan-dao -- 数据库访问模块(该模块主要通过 mbg 插件生成相应的模型及接口映射)
| ├── main -- 主模块路径
| | ├── java -- java类路径
| | | ├── com.yan.dao -- dao层包
| | | | ├── mapper -- 接口映射类
| | | | ├── model -- 数据库模型类
| | ├── resources -- 资源配置路径
| | | ├── database -- 数据库sql文件
| | | ├── mybatis -- sqlMap映射文件
| | | ├── properties -- 配置文件
├── yan-plugins -- 插件模块(自定义插件)
| ├── main -- 主模块路径
| | ├── java -- java类路径
| | | ├── com.yan.plugins -- 插件包
| | | | ├── mybatis.generator -- mbg插件类(包含注释插件、序列化插件)
├── yan-service -- 服务模块(核心接口方法实现)
| ├── main -- 主模块路径
| | ├── java -- java类路径
| | | ├── com.yan.service -- 服务包
| | | | ├── jms -- 消息服务接口实现类
| | | | ├── persistence -- 持久化接口实现类
├── yan-web -- web模块
| ├── main -- 主模块路径
| | ├── java -- java类路径
| | | ├── com.yan.web.controller -- 业务处理控制器包
| | ├── resources -- 资源配置路径
| | | ├── properties -- 项目配置文件
| | | ├── spring -- spring的配置文件
| | ├── webapp -- web应用根路径
| | | ├── common -- 公共路径
| | | ├── resources -- 静态资源路径
| | | ├── views -- 视图路径
四、项目入门(Introduction)
下载项目,并且导入到IDE开发工具中(建议使用:IntelliJ IDEA)
使用 Maven 构建项目
创建数据库并执行 yan-dao 模块中 resources/database 路径下的 yan.sql 文件,创建整个项目必要的表(如:用户表、资源表、日志记录表等...)
分别修改 yan-dao、yan-service、yan-web 模块中 resources/properties 路径下的 *.properties 配置文件(具体修改方法及对应属性解释,详见 - 五、配置说明)
完成以上步骤就可以正常部署启动服务了: a). 启动 zookeeper 服务(必要服务,不启动该服务导致项目无法正常运行) b). 启动 activemq 服务(非必要服务,若不启动该服务,则项目运行中会有jms监听器异常,但不影响整体能) c). 启动 solr 服务(非必要服务,若不启动该服务,则搜索引擎无法使用,但不影响整体功能) [以上服务具体配置及启动命令,这里我不多做阐述了,不知道的可自行百度搜索]
启动完以上基础的服务后,就可以运行项目了 a). 首先启动 yan-service ,直接运行该模块中的 com.yan.service.ServiceApp.main() 方法来启动 b). 其次启动 yan-web ,可(使用 jetty / tomcat 均可)[详细部署过程在这里就不多做阐述了] ,启动成功后即可访问web应用界面。接下来进入开发阶段
根据实际业务需求,在对应的数据库中创建业务表,表命名规范:“模块名_表名” 如:SYS_RESOURCE (系统模块资源表)
修改 yan-dao 模块中 resources 路径下的 generatorConfig.xml 中的 targetPackage 包名及 tableName 表名,使用 MyBatis generator 插件生成对应的持久层模块代码(Maven 执行命令:mvn mybatis-generator:generate ),具体配置请参考MyBatis GeneratorXML Configuration
在 yan-api 模块中 src/main/java 路径下创建对应的接口
在 yan-service 模块中 src/main/java 路径下创建对应的接口服务实现类 ,并在 src/main/resources/META-INF/spring 路径下的 spring-dubbo-provider.xml 配置中添加声明暴露对应服务接口
在 yan-web 模块中 src/main/java 路径下创建对应的 controller 控制器,该控制器类命名规范以 Controller 结尾,继承 BaseController 类,编写 controller 控制器业务处理代码(具体使用参考 - 七、示例代码),并在 src/main/resources/spring/config 路径下的 spring-dubbo-customer.xml 配置中添加声明暴露对应服务接口
在 yan-web 模块中 src/main/webapp/views 路径下创建对应的jsp页面,并编写前端页面展示代码
五、配置说明(Properties)
yan-dao 模块 resources/properties 中配置文件说明
名称(Key值)
描述
mbg.path
mybatis generator 插件生成代码的路径(绝对路径)
mbg.db.username
mybatis generator 插件连接数据库的用户名
mbg.db.password
mybatis generator 插件连接数据库的密码
mbg.db.driverClassName
mybatis generator 插件连接数据库的驱动
mbg.db.url
mybatis generator 插件连接数据库的地址
yan-service 模块 resources/properties 中配置文件说明
名称(Key值)
描述
default.datasource.username
默认数据库用户名
default.datasource.password
默认数据库密码
default.datasource.driverClassName
默认数据库驱动类
default.datasource.url
默认数据库链接地址
dextend.datasource.username
扩展数据库用户名(用于多数据源切换)
dextend.datasource.password
扩展数据库密码(用于多数据源切换)
dextend.datasource.driverClassName
扩展数据库驱动类(用于多数据源切换)
dextend.datasource.url
扩展数据库链接地址(用于多数据源切换)
datasource.initialSize
初始化时建立物理连接的个数
datasource.minIdle
最小连接池数量
datasource.maxActive
最大连接池数量
datasource.maxWait
获取连接时最大等待时间,单位毫秒
datasource.timeBetweenEvictionRunsMillis
配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
datasource.minEvictableIdleTimeMillis
配置一个连接在池中最小生存的时间,单位是毫秒
datasource.validationQuery
用来检测连接是否有效的sql
datasource.testWhileIdle
建议配置为true,不影响性能,并且保证安全性
datasource.testOnBorrow
申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
datasource.testOnReturn
归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
datasource.poolPreparedStatements
是否缓存preparedStatement,也就是PSCache
datasource.maxPoolPreparedStatementPerConnectionSize
每个连接上PSCache的大小
datasource.filters
属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:监控统计用的filter:stat日志用的filter:log4j防御sql注入的filter:wall
-
-
dubbo.application.name
dubbo 应用服务提供者名称
dubbo.protocol.port
dubbo 协议暴露服务的端口
dubbo.registry.address
dubbo 使用 zookeeper 注册中心暴露服务的地址
-
-
jms.brokerURL
activeMQ 服务地址
jms.userName
activeMQ 服务管理端用户名
jms.password
activeMQ 服务管理端密码
yan-web 模块 resources/properties 中配置文件说明
名称(Key值)
描述
jms.brokerURL
activeMQ 服务地址
jms.userName
activeMQ 服务管理端用户名
jms.password
activeMQ 服务管理端密码
-
-
logback.name
日志文件前缀名称(一般使用项目名称,便于区分)
logback.path
日志存放路径(绝对路径)
logback.maxHistory
日志最大的历史天数
logback.db.username
日志写入数据库时连接数据库的用户名
logback.db.password
日志写入数据库时连接数据库的密码
logback.db.driverClassName
日志写入数据库时连接数据库的驱动
logback.db.url
日志写入数据库时连接数据库的url
-
-
setting.upload
文件上传路径(绝对路径)
-
-
solr.builder
Solr搜索引擎服务地址
六、常用方法(Methods)
方法均在继承于BaseController的controller类中使用this.metodName或直接使用methodName来进行调用(注:methodName代表需要调用的方法名称,方法名称见下表)
方法名
参数
返回值
描述
getSession
无
HttpSession 服务器会话
获取服务器会话 session 对象
setSession
session 服务器会话
无
设置服务器会话 session 对象
getRequest
无
HttpServletRequest 用户请求
获取用户请求 request 对象
setRequest
request 用户请求
无
设置用户请求 request 对象
getResponse
无
HttpServletResponse 服务器响应结果
获取服务器响应结果 response 对象
setResponse
response 服务器响应结果
无
设置服务器响应结果 response 对象
getSessionUser
无
TbSysUser 用户对象
获取登录成功后 session 中的存储的用户信息
-
-
-
-
getService
无
DelegateService 通用 Service,查看自定义 sqlMap 的代理 service 对象
获取 delegateService 对象
resultPage
list 查询到的分页结果,为 Page 对象
PageModel 自定义的分页模型,T 为查询的对象
分页结果集对象
resultMsg
status 状态值(可根据需求任意设置,无强制标准);msg 消息内容;res 返回的对象
MsgModel 自定义消息模型
消息返回对象
fileUpLoad
request 上传方法中传递的 request 对象,并非父类中的 request 对象
List 上传文件成功后的新文件名称,以集合形式返回
文件上传方法,支持多个文件上传
fileDownLoad
fileName 需要下载的文件名称
ResponseEntity 下载的文件,在浏览器会进行下载
文件下载方法
-
-
-
-
isNull
obj 需要进行判断的对象
boolean 为null或空返回 true,否则返回 false
判断对象是否为null,或空
obj2Str
obj 需要转换的对象
String 对象的值(为null则返回"")
对象转换为 String,通常用于获取 Map 集合中的对象时使用
getUUID
无
String 32位主键字符串
生成 uuid 主键,长度为32位,且为大写模式
base64Encoder
str 需要进行编码的字符串
String 进行编码后的结果字符串
对字符串进行 base64 编码
base64Decoder
str 已进行 base64 编码的编码字符串
String 解码后的原字符串
对字符串进行 base64 解码
md5
str 需要进行 md5 加密的字符串
String 加密后的结果
对字符串进行 md5 加密算法
currentDate
pattern 获取系统时间的格式,如:yyyy-MM-dd HH:mm:ss
String 返回格式化后的当前时间
获取系统当前时间
timeStamp2Date
timestamp 需要进行转换的时间戳;pattern 转换后的格式
String 格式化后的日期
时间戳转换成日期
date2TimeStamp
dateStr 需要进行转换的日期字符串;pattern 日期的格式
String 转换后的时间戳
日期转换为时间戳
readFromFile
filePath 文件路径(绝对路径)
String 读取的文件内容
从指定文件中读取文件内容
writeToFile
content 需要写入文件中的内容
filePath 文件路径(绝对路径)
将内容写入到指定文件中(写入会覆盖文件原有内容,建议先读取,再写入,将读取的内容与需要写入的内容并在一起进行写入)
generatePath
path 文件夹路径(绝对路径)
无
生成指定路径文件夹,先进行判断文件夹是否存在,若不存在则创建对应目录的文件夹,若存在则不进行任何操作
generateFile
path 文件路径(绝对路径)
无
生成指定路径的文件,先进行判断文件是否存在,若不存在则进行创建文件,若存在则不进行任何操作
propertiesValue
key 资源文件中的 key 值
String 读取到的 key 对应的 value 值
读取 properties 文件中的值,读取 classpath 下 /properties/config.properties 配置文件
propertiesValue
resource 资源文件路径(对应 classpath 中的路径);key 资源文件中的 key 值
String 读取到的 key 对应的 value 值
读取指定路径 properties 文件中的值,会从 classpath 路径下进行查找资源文件
七、示例代码(Codes)
创建一个继承与BaseController的控制器
@Controller
public class XxxController extends BaseController {
...
}
获取日志日志记录Logger对象
// 方法一:使用注解获取
@LogInject
private static Logger log;
// 方法二:使用工厂方法获取
private static Logger log = LoggerFactory.getLogger(XxxController.class);
获取service对象
// 获取delegateService对象
@Autowired
private DelegateService delegateService;
// 获取泛型Service对象
@Autowired
private XxxService xxxService;
分页查询后台代码
// 使用对象 service 分页查询数据
@RequestMapping("/list")
@ResponseBody
public PageModel list(int offset, int limit) {
XxxExample example = new XxxExample();
PageModel pageModel = xxxService.selectByExampleForOffsetPage(example, offset, limit);
return pageModel;
}
// 使用 delegateService 自定义 sqlMap 分页查询数据
@RequestMapping("/list")
@ResponseBody
public PageModel list(int offset, int limit) {
String statement = "com.yan.dao.mapper.xxx.XxxCustomMapper.getXxx";
PageModel pageModel = delegateService.selectPagination(statement, offset, limit);
return pageModel;
}
分页查询前台代码
$('#table').bsTable({
url: '${pageContext.request.contextPath}/xxx/list',
idField: 'id',
columns: [
{field: 'state', checkbox: true},
{field: 'id', title: 'id', align: 'center'},
...
]
});
文件上传
@RequestMapping("/upload")
public String upload(HttpServletRequest request) {
// 调用父类的上传方法,在jsp中必须指定form为enctype="multipart/form-data"
List fileNames = this.fileUpLoad(request);
return "success";
}
文件下载(在jsp页面使用通用的下载方法,使用restful风格)
文件下载
自定义文件下载后台方法
@RequestMapping("/download")
public ResponseEntity download(String fileName) {
// 调用父类文件下载方法
return this.fileDownLoad(fileName);
}
常用 delegateService 方法
// 使用自定义sql模板查询单个对象
Xxx xxx = delegateService.selectOne(statement);
Xxx xxx = delegateService.selectOne(statement, parameter);
// 使用自定义sql模板查询对象集合
List list = delegateService.selectList(statement);
List list = delegateService.selectList(statement, parameter);
// 使用自定义sql模板有范围的查询,(每次返回指定的对象条数集合)
List list = delegateService.selectList(statement, parameter, rowBounds);
// 使用自定义sql模板进行分页查询
PageModel pageModel = delegateService.selectPagination(statement, offset, limit);
PageModel pageModel = delegateService.selectPagination(statement, parameter, offset, limit);
// 使用自定义sql模板保存
int res = delegateService.insert(statement);
int res = delegateService.insert(statement, parameter);
// 使用自定义sql模板修改
int res = delegateService.update(statement);
int res = delegateService.update(statement, parameter);
// 使用自定义sql模板删除
int res = delegateService.delete(statement);
int res = delegateService.delete(statement, parameter);
常用对象 service 方法
// 使用对象方法根据主键查询
Xxx xxx = xxxService.selectByPrimaryKey(id);
// 使用对象方法根据 criteria 查询
List list = xxxService.selectByExample(example);
// 方法一:使用对象方法根据 criteria 分页查询(推荐)
PageModel pageModel = xxxService.selectByExampleForOffsetPage(example, offset, limit);
// 方法二:使用对象方法根据criteria分页查询
PageModel pageModel = xxxService.selectByExampleForStartPage(example, pageNum, pageSize);
// 使用对象方法添加
int res = xxxService.insert(record);
int res = xxxService.insertSelective(record);
// 使用对象方法根据主键修改
int res = xxxService.updateByPrimaryKey(record);
int res = xxxService.updateByPrimaryKeySelective(record);
// 使用对象方法根据 criteria 修改
int res = xxxService.updateByExample(record, example);
int res = xxxService.updateByExampleSelective(record, example);
// 使用对象方法根据主键删除
int res = xxxService.deleteByPrimaryKey(productCode);
// 使用对象方法删除根据 criteria 删除
int res = xxxService.deleteByExample(example);
更多方法使用请参考项目中的示例代码
八、效果预览(Preview)
九、许可证(License)
MIT License
你可能感兴趣的:(使用Maven构建 整合Dubbo+Zookeeper+SpringMVC+Spring+MyBatis支持分布式 高效便捷开发框架)
arm-linux平台、rk3288 SDL移植
雨中来客
arm开发 linux SDL移植
一、所需环境资源1、arm-linux交叉编译器,这里使用的是gcc-linaro-6.3.12、linux交叉编译环境,这里使用的是Ubuntu20.043、sdl2源码https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.30.11.tar.gz二、代码编译1、解压sdl2源码,并且cd到源码目录tar-xvfSDL-rel
OpenHarmony 5.0.2 Release来了!
MardaWang
版本概述OpenHarmony5.0.2Release版本对标准系统的能力进行持续完善,以快速迭代的方式推出API14,相比5.0.1Release版本,重点做出了如下特性新增或增强:进一步增强ArkUI、图形图像的能力,提供更多组件的高级属性设置,支持更多精致动效;进一步增强Web能力,满足更多应用诉求;针对2in1设备特点,新增一系列窗口管理和控制的能力及窗口生命周期行为管理;新增一批企业定制
快速入门使用Redis缓存
阳光宅男dh
进阶学习 redis 缓存 数据库
Redis简介Redis是一个高性能的内存数据库,以key-value方式存储数据,可以作为缓存使用。为什么使用缓存?高并发MySQL的连接数存在瓶颈,连接过大可能导致MySQL宕机解决方法:部署多个MySQL服务,主从复制部署缓存,承担一部分的并发高性能基于内存,内存IO效率远远高于磁盘Redis的特点:性能高(读的速度是110000次/s,写的速度是81000次/s,单机redis支撑万级并发
一键获取每日股票数据,自动更新,尽在掌握
舔狼
A股股票数据 python 金融
用Python和Tushare库获取股票日线数据在金融市场分析中,获取股票的历史数据是进行技术分析和量化投资的基础。Tusharetushare官网是一个提供中国股市数据的API接口,它支持获取股票的日线数据、基本面数据等。本文将介绍如何使用Python语言和Tushare库来获取股票的日线数据,并结合多线程技术提高数据获取的效率。1.环境准备首先,确保你的Python环境中安装了以下库:tush
【后端面试总结】mysql的group by怎么用
ThisIsClark
后端面试总结 面试 mysql 职场和发展
GROUPBY是SQL中的一种用于对结果集进行分组的子句,常与聚合函数(如COUNT()、SUM()、AVG()、MAX()和MIN()等)一起使用。GROUPBY的作用是基于一个或多个列对查询结果进行分组,然后可以对每个分组执行聚合操作。以下是GROUPBY的一些关键点和用法示例:基本用法假设有一个名为employees的表,表结构如下:idnamedepartmentsalary1AliceH
【gopher的java学习笔记】一文讲懂controller,service,mapper,entity是什么
ThisIsClark
gopher的java学习笔记 java 学习 笔记
刚开始上手Java和Spring时,就被controller,service,mapper,entity这几个词搞懵了,搞不懂这些究竟代表什么,感觉使用golang开发的时候也没太接触过这些名词啊~经过两三个月的开发后,逐渐搞懂了这几个词的意义,也对为什么要这么分有了一点见解,总结了一下希望能帮到各位刚刚接触Java和Spring的同学。组件介绍Entity(实体)作用:代表数据库中的表结构,是数
Sqoop数据导出 第3关:Hive数据导出至MySQL中
是草莓熊吖
sqoop Educoder hive hadoop 数据仓库 sqoop
为了完成本关任务,你需要掌握:Hive数据导出至MySQL中。Hive数据导入MySQL中MySQL建表因为之前已经创建过数据库了,我们直接使用之前的数据库hdfsdb,在数据库中建表project,表结构如下:名类状态pro_noint主键,序号pro_namevarchar(20)课程名pro_teachervarchar(20)课程老师#首先进入MySQLmysql-uroot-p12312
牛羊定位系统开发系列:硬件与软件架构的深入解析
无数碎片寻妳
牛羊定位 单片机 嵌入式硬件
01-面试大保健-牛羊定位-硬件1.项目背景与需求在本项目中,牛羊定位系统的目的是为农场中的牛羊提供实时定位和计步功能,确保对动物的健康进行有效监测,避免因异常行为带来的损失。系统通过GPS定位和加速度计计步模块来追踪牛羊的活动,同时具备低功耗设计,适用于长时间使用。1.1定位与计步功能定位功能:使用GPS模块来实时获取牛羊的地理位置,防止它们走丢或偏离预定区域。计步功能:通过加速度计模块,记录牛
spark sql的练习题
a大数据yyds
spark spark
1、使用StructuredStreaming读取Socket数据,把单词和单词的反转组成json格式写入到当前目录中的file文件夹中2、请使用StructuredStreaming读取student_info文件夹写的csv文件,2.1、统计出文件中的男女生各有多少人2.2、统计出姓“王”男生和女生的各有多少人3、请使用StructuredStreaming读取department_info文
深度学习中高斯噪声:为什么以及如何使用
小白学视觉
深度学习 人工智能
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达来源:DeepHubIMBA本文约1800字,建议阅读8分钟高斯噪声是深度学习中用于为输入数据或权重添加随机性的一种技术。在数学上,高斯噪声是一种通过向输入数据添加均值为零和标准差(σ)的正态分布随机值而产生的噪声。正态分布,也称为高斯分布,是一种连续概率分布,由其概率密度函数(PDF)定义:pdf(x)=(1/(σ*sqrt(
Spark>sql练习题
BigMoM1573
Spark spark
练习题-------------------------------以下使用StructuredStreaming:-------------------------------1、请使用StructuredStreaming读取Socket数据,统计出每个单词的个数2、请使用StructuredStreaming读取student_info文件夹写的csv文件,2.1、统计出文件中的男女生各有多
Python之数据库操作
初宸
python mysql python 数据库
Python标准数据库接口为PythonDB-API,PythonDB-API为开发人员提供了数据库应用编程接口。PythonDB-API使用流程:引入API模块获取与数据库的连接执行SQL语句和存储过程关闭数据库连接文章目录MySQLdb创建数据库及表创建数据库:创建数据库表:修改数据库的访问权限(1)修改root的登录限制(2)创建新用户pymysql使用导入pymysql模块连接到数
CYT3BB_4BB:Clock system
飞不高的小菜猪
CYT4BB 单片机 mcu
CYT3BB/4BB的时钟系统包括8-MHzIMO、2个ILO、4个看门狗计时器、4个PLL、一个FLL、5个时钟监控器(CSV)、一个8-33.34MHzECO和一个32.768-kHzWCO。 该时钟系统支持三个主时钟域:CLK_HF、CLK_SLOW和CLK_LF。-CLK_HFx:CLK_HFx是活动模式的时钟。每个人都可以使用任何一种高频时钟源,包括IMO、EXT_CLK、ECO、
安装ubuntu心得(解决黑屏问题)
WindWinsWing
ubuntu linux 运维
把安装的全部过程拆解为下面这些步骤,1.准备镜像2.做u盘系统盘3.grub选择启动的位置4.进入到ubuntu界面5.安装,磁盘分区(解决黑屏问题处)6.实际启动运行接下来我将从上面这些方面整理其中的过程和遇到的问题1.准备镜像Ubuntu24.04刚出,忍不住的头铁去尝试,进取后发现生态支持还没有跟上,遇到些软件,包的具体版本使用不了,然后开始上22.04。下载的时候要注意看cpu的架构,由于
Matlab进阶绘图第58期—带填充纹理的横向堆叠图
阿昆的科研日常
Matlab插图 matlab 开发语言 可视化 论文插图
带填充纹理的横向堆叠图是通过在原始横向堆叠图的基础上添加不同的纹理得到的,可以很好地解决由于颜色区分不够而导致的对象识别困难问题。由于Matlab中未收录提供填充纹理选项,因此需要大家自行设法解决。本文使用hatchfill2工具(KeshIkuma.MatlabCentral,2023)进行带填充纹理的横向堆叠图的绘制,先来看一下成品效果:特别提示:本期内容『数据+代码』已上传资源群中,加群的朋
webstorm 推送项目到github
stephen--zhu
git 前端 webstorm
1.在github中建立对应仓库。webstorm会建立连接,在github中建立对应的仓库。根据提示,会执行commit,以及push。然而,webstorm默认使用的是ssh连接。push失败。因此,执行第二步,设置remotes为https格式。2.添加远程仓库https格式在为:https://github.com/lven/es6.git设置webstorm的gitRemotes为htt
[rk3588]Linux下docker运行安卓镜像
于山巅相见
# 驱动调试实例 linux docker android debian
关于在Linux下docker运行Android拿来挂机玩游戏一类的一直感觉很有意思,后面就在网上搜集了一下资料,资料有点少且乱,总的尝试下来也踩了不少的坑,这里我记录一下我部署的过程,有感兴趣的朋友可以直接拿去用。1.环境介绍开发板:ArmSoM-sige7Kernel:5.10.160OS:Debian11开源docker镜像:redroid2.内核配置RK发布的LinuxSDK默认不支持do
配置cri-docker使kubernetes1.24以docker作为运行时
萌褚
Linux
镜像下载、域名解析、时间同步请点击阿里云开源镜像站从kubernetes1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,所以docker不能再作为kubernetes的容器运行时了,即从kubernetesv1.24开始不再使用docker了。但是如果想继续使用docker的话,可以在kubel
Linux创建用户组并分配用户权限
清梦压星河_Ciao
Linux Docker linux docker
一、如何创建用户组在Linux系统中,创建用户组可以使用groupadd命令。以下是创建用户组的具体步骤和常用选项:1.创建用户组groupaddgroupnamegroupname是你希望创建的用户组名称。该命令将创建一个新的用户组,默认情况下,组的GID(组ID)会由系统自动分配。示例:groupadddevelopers这会创建一个名为developers的用户组。2.指定GID(组ID)如
Python - 安装 Python、pip、virtualenv
伊织产研
# Python python pip 源
文章目录一、PythonUbuntu安装Python问题创建虚拟环境一些使用问题Nomodulenamed'_sqlite3'二、pip(管理第三方库)1、查看pip版本2、安装pip3、升级pip4、卸载pip5、查看已安装的pkg6、第三方库site-packages地址:7、更新8、切换源9、根据requirements.txt安装其它三、virtualenv(管理多个env)1、安装2、查
深度强化学习在高频交易中的动态策略优化与收益提升
二进制独立开发
非纯粹GenAI GenAI与Python python 人工智能 神经网络 自然语言处理 生成对抗网络 金融 数据挖掘
文章目录1.高频交易的核心挑战与强化学习的适应性1.1高频交易中的核心问题1.2强化学习的适配性分析2.基于深度Q网络(DQN)的高频交易策略设计2.1状态空间构建:从LOB到特征工程2.2动作空间与奖励函数设计2.3DQN模型架构与训练优化3.业务视角下的策略优化与风险管理3.1策略有效性验证3.2实时部署与延迟优化3.3合规与伦理考量4.实验:基于NASDAQLOB数据的策略对比4.1数据集与
华为OD机试 -最多几个直角三角形(C++题解 )
算法大师
最新华为OD机试 华为 c++ 开发语言 华为od 华为od机试
最新华为OD机试真题目录:点击查看目录华为OD面试真题精选:点击立即查看题目描述有N条线段,长度分别为a[1]-a[n]。现要求你计算这N条线段最多可以组合成几个直角三角形。每条线段只能使用一次,每个三角形包含三条线段。输入描述第一行输入一个正整数T(1#include#include//dfs函数用于查找最多可以组成的直角三角形数量int
软件工程 案例分析作业
SoftwareTeacher
编程语言 人工智能 java python 大数据
现代软件工程构建之法作业https://bbs.csdn.net/forums/SoftwareEngineering?typeId=1723软件工程作业案例分析很多同学有疑惑:软件工程课是否就是枯燥的理论课?或者是几个牛人拼命写代码,其他人抱大腿的课?要不然就是学习一个程序语言,练习某个框架,搞一个职业培训的课?都不对!软件工程有理论,有实践,更重要的是分析,思辨,总结。在课程中,同学们自己组织
OpenCV中添加高斯噪声到彩色图像和点云
LpmShell
opencv 人工智能 计算机视觉 点云
在计算机视觉和图像处理中,噪声是一种常见的现象,可以对图像和点云数据产生不良影响。高斯噪声是一种常见的噪声类型,它具有正态分布的特点。在本文中,我们将使用OpenCV库来添加高斯噪声到彩色图像和点云数据,并提供相应的源代码示例。添加高斯噪声到彩色图像首先,我们将介绍如何使用OpenCV库向彩色图像添加高斯噪声。以下是添加高斯噪声的步骤:步骤1:导入必要的库importnumpyasnpimport
【Pytest】基础到高级功能的理解使用
卜及中
Python基础 pytest 学习 python 开发语言 python3.11
文章目录第一部分:Pytest简介1.1什么是Pytest?1.2Pytest的历史1.3Pytest的核心概念1.4Pytest的特点1.5为什么选择Pytest?第二部分:Pytest的基本使用2.1安装Pytest2.2编写第一个测试用例2.2.1创建一个简单的测试函数2.2.2运行测试2.3测试报告和输出2.3.1简单输出2.3.2显示详细的失败信息2.3.3生成HTML报告2.4组织和运
PySpark之金融数据分析(Spark RDD、SQL练习题)
唯余木叶下弦声
大数据 大数据 spark pyspark python 数据分析 sql
目录一、数据来源二、PySparkRDD编程1、查询特定日期的资金流入和流出情况2、活跃用户分析三、PySparkSQL编程1、按城市统计2014年3月1日的平均余额2、统计每个城市总流量前3高的用户四、总结一、数据来源本文使用的数据来源于天池大赛数据集,由蚂蚁金服提供,包含用户基本信息、申购赎回记录、收益率、银行间拆借利率等多个维度,本文通过PySpark实现对该数据集的简单分析。数据来源:天池
MongoDB成为最好NoSQL数据库的原因是什么?思维导图 代码示例(java 架构)
用心去追梦
mongodb nosql java
MongoDB成为最受欢迎的NoSQL数据库之一,有多个因素促成了其成功和广泛采用。以下是从不同角度分析MongoDB成为最好NoSQL数据库的原因:MongoDB成为最好NoSQL数据库的原因文档型数据模型灵活模式:支持动态模式,无需预定义固定的表结构,易于适应快速变化的需求。嵌套结构:允许复杂的数据类型如数组、嵌入式文档,简化了数据建模。高性能与可扩展性读写性能:通过索引优化、内存映射文件等技
gRPC协议简介
xidianhuihui
golang
gRPC是谷歌开源的一套RPC协议框架。主要做两件事情:一是数据编码,二是请求映射。数据编码数据编码顾名思义就是在将请求的内存对像转化成可以传输的字节流发给服务端,并将收到的字节流再转化成内存对像。方法有很多,常见的有XML、JSON、Protobuf。XML已经日薄西山,JSON风头正盛,Protobuf则方兴未艾。gRPC默认选用Protobuf,早期貌似只支持Protobuf,现在号称也支持
基于Canny边缘检测和轮廓检测
如若123
opencv 人工智能 计算机视觉
这段代码实现了基于Canny边缘检测和轮廓检测,从图像中筛选出面积较大的矩形,并使用OpenCV和Matplotlib显示结果。主要流程如下:步骤详解:读取图像:img=cv2.imread('U:/1.png')使用cv2.imread()加载图像。转换为灰度图像:gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)使用cv2.cvtColor()将图像从BGR色彩
c++ 设置Collision 使用自定义ObjectChannel
yblackd
c++ ue5 unreal engine
c++设置Collision使用自定义ObjectChannel1.定义自定义的ObjectChannel2.在代码中设置UStaticMeshComponent使用自定义的ObjectChannel3.在Actor或Component中使用4.注意事项5.遍历所有ObjectChannels5.1说明1.定义自定义的ObjectChannel在UnrealEngine中,自定义的ObjectCh
js动画html标签(持续更新中)
843977358
html js 动画 media opacity
1.jQuery 效果 - animate() 方法 改变 "div" 元素的高度: $(".btn1").click(function(){ $("#box").animate({height:"300px
springMVC学习笔记
caoyong
springMVC
1、搭建开发环境
a>、添加jar文件,在ioc所需jar包的基础上添加spring-web.jar,spring-webmvc.jar
b>、在web.xml中配置前端控制器
<servlet>
&nbs
POI中设置Excel单元格格式
107x
poi style 列宽 合并单元格 自动换行
引用:http://apps.hi.baidu.com/share/detail/17249059
POI中可能会用到一些需要设置EXCEL单元格格式的操作小结:
先获取工作薄对象:
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
HSSFCellStyle setBorder = wb.
jquery 获取A href 触发js方法的this参数 无效的情况
一炮送你回车库
jquery
html如下:
<td class=\"bord-r-n bord-l-n c-333\">
<a class=\"table-icon edit\" onclick=\"editTrValues(this);\">修改</a>
</td>"
j
md5
3213213333332132
MD5
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MDFive {
public static void main(String[] args) {
String md5Str = "cq
完全卸载干净Oracle11g
sophia天雪
orale数据库 卸载干净 清理注册表
完全卸载干净Oracle11g
A、存在OUI卸载工具的情况下:
第一步:停用所有Oracle相关的已启动的服务;
第二步:找到OUI卸载工具:在“开始”菜单中找到“oracle_OraDb11g_home”文件夹中
&
apache 的access.log 日志文件太大如何解决
darkranger
apache
CustomLog logs/access.log common 此写法导致日志数据一致自增变大。
直接注释上面的语法
#CustomLog logs/access.log common
增加:
CustomLog "|bin/rotatelogs.exe -l logs/access-%Y-%m-d.log 
Hadoop单机模式环境搭建关键步骤
aijuans
分布式
Hadoop环境需要sshd服务一直开启,故,在服务器上需要按照ssh服务,以Ubuntu Linux为例,按照ssh服务如下:
sudo apt-get install ssh
sudo apt-get install rsync
编辑HADOOP_HOME/conf/hadoop-env.sh文件,将JAVA_HOME设置为Java
PL/SQL DEVELOPER 使用的一些技巧
atongyeye
java sql
1 记住密码
这是个有争议的功能,因为记住密码会给带来数据安全的问题。 但假如是开发用的库,密码甚至可以和用户名相同,每次输入密码实在没什么意义,可以考虑让PLSQL Developer记住密码。 位置:Tools菜单--Preferences--Oracle--Logon HIstory--Store with password
2 特殊Copy
在SQL Window
PHP:在对象上动态添加一个新的方法
bardo
方法 动态添加 闭包
有关在一个对象上动态添加方法,如果你来自Ruby语言或您熟悉这门语言,你已经知道它是什么...... Ruby提供给你一种方式来获得一个instancied对象,并给这个对象添加一个额外的方法。
好!不说Ruby了,让我们来谈谈PHP
PHP未提供一个“标准的方式”做这样的事情,这也是没有核心的一部分...
但无论如何,它并没有说我们不能做这样
ThreadLocal与线程安全
bijian1013
java java多线程 threadLocal
首先来看一下线程安全问题产生的两个前提条件:
1.数据共享,多个线程访问同样的数据。
2.共享数据是可变的,多个线程对访问的共享数据作出了修改。
实例:
定义一个共享数据:
public static int a = 0;
Tomcat 架包冲突解决
征客丶
tomcat Web
环境:
Tomcat 7.0.6
win7 x64
错误表象:【我的冲突的架包是:catalina.jar 与 tomcat-catalina-7.0.61.jar 冲突,不知道其他架包冲突时是不是也报这个错误】
严重: End event threw exception
java.lang.NoSuchMethodException: org.apache.catalina.dep
【Scala三】分析Spark源代码总结的Scala语法一
bit1129
scala
Scala语法 1. classOf运算符
Scala中的classOf[T]是一个class对象,等价于Java的T.class,比如classOf[TextInputFormat]等价于TextInputFormat.class
2. 方法默认值
defaultMinPartitions就是一个默认值,类似C++的方法默认值
java 线程池管理机制
BlueSkator
java线程池 管理机制
编辑
Add
Tools
jdk线程池
一、引言
第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。
关于hql中使用本地sql函数的问题(问-答)
BreakingBad
HQL 存储函数
转自于:http://www.iteye.com/problems/23775
问:
我在开发过程中,使用hql进行查询(mysql5)使用到了mysql自带的函数find_in_set()这个函数作为匹配字符串的来讲效率非常好,但是我直接把它写在hql语句里面(from ForumMemberInfo fm,ForumArea fa where find_in_set(fm.userId,f
读《研磨设计模式》-代码笔记-迭代器模式-Iterator
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.util.Arrays;
import java.util.List;
/**
* Iterator模式提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象内部表示
*
* 个人觉得,为了不暴露该
常用SQL
chenjunt3
oracle sql C++ c C#
--NC建库
CREATE TABLESPACE NNC_DATA01 DATAFILE 'E:\oracle\product\10.2.0\oradata\orcl\nnc_data01.dbf' SIZE 500M AUTOEXTEND ON NEXT 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K ;
CREATE TABLESPA
数学是科学技术的语言
comsci
工作 活动 领域模型
从小学到大学都在学习数学,从小学开始了解数字的概念和背诵九九表到大学学习复变函数和离散数学,看起来好像掌握了这些数学知识,但是在工作中却很少真正用到这些知识,为什么?
最近在研究一种开源软件-CARROT2的源代码的时候,又一次感觉到数学在计算机技术中的不可动摇的基础作用,CARROT2是一种用于自动语言分类(聚类)的工具性软件,用JAVA语言编写,它
Linux系统手动安装rzsz 软件包
daizj
linux sz rz
1、下载软件 rzsz-3.34.tar.gz。登录linux,用命令
wget http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz下载。
2、解压 tar zxvf rzsz-3.34.tar.gz
3、安装 cd rzsz-3.34 ; make posix 。注意:这个软件安装与常规的GNU软件不
读源码之:ArrayBlockingQueue
dieslrae
java
ArrayBlockingQueue是concurrent包提供的一个线程安全的队列,由一个数组来保存队列元素.通过
takeIndex和
putIndex来分别记录出队列和入队列的下标,以保证在出队列时
不进行元素移动.
//在出队列或者入队列的时候对takeIndex或者putIndex进行累加,如果已经到了数组末尾就又从0开始,保证数
C语言学习九枚举的定义和应用
dcj3sjt126com
c
枚举的定义
# include <stdio.h>
enum WeekDay
{
MonDay, TuesDay, WednesDay, ThursDay, FriDay, SaturDay, SunDay
};
int main(void)
{
//int day; //day定义成int类型不合适
enum WeekDay day = Wedne
Vagrant 三种网络配置详解
dcj3sjt126com
vagrant
Forwarded port
Private network
Public network
Vagrant 中一共有三种网络配置,下面我们将会详解三种网络配置各自优缺点。
端口映射(Forwarded port),顾名思义是指把宿主计算机的端口映射到虚拟机的某一个端口上,访问宿主计算机端口时,请求实际是被转发到虚拟机上指定端口的。Vagrantfile中设定语法为:
c
16.性能优化-完结
frank1234
性能优化
性能调优是一个宏大的工程,需要从宏观架构(比如拆分,冗余,读写分离,集群,缓存等), 软件设计(比如多线程并行化,选择合适的数据结构), 数据库设计层面(合理的表设计,汇总表,索引,分区,拆分,冗余等) 以及微观(软件的配置,SQL语句的编写,操作系统配置等)根据软件的应用场景做综合的考虑和权衡,并经验实际测试验证才能达到最优。
性能水很深, 笔者经验尚浅 ,赶脚也就了解了点皮毛而已,我觉得
Word Search
hcx2013
search
Given a 2D board and a word, find if the word exists in the grid.
The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or ve
Spring4新特性——Web开发的增强
jinnianshilongnian
spring spring mvc spring4
Spring4新特性——泛型限定式依赖注入
Spring4新特性——核心容器的其他改进
Spring4新特性——Web开发的增强
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
Spring4新特性——Groovy Bean定义DSL
Spring4新特性——更好的Java泛型操作API
Spring4新
CentOS安装配置tengine并设置开机启动
liuxingguome
centos
yum install gcc-c++
yum install pcre pcre-devel
yum install zlib zlib-devel
yum install openssl openssl-devel
Ubuntu上可以这样安装
sudo aptitude install libdmalloc-dev libcurl4-opens
第14章 工具函数(上)
onestopweb
函数
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
Xelsius 2008 and SAP BW at a glance
blueoxygen
BO Xelsius
Xelsius提供了丰富多样的数据连接方式,其中为SAP BW专属提供的是BICS。那么Xelsius的各种连接的优缺点比较以及Xelsius是如何直接连接到BEx Query的呢? 以下Wiki文章应该提供了全面的概览。
http://wiki.sdn.sap.com/wiki/display/BOBJ/Xcelsius+2008+and+SAP+NetWeaver+BW+Co
oracle表空间相关
tongsh6
oracle
在oracle数据库中,一个用户对应一个表空间,当表空间不足时,可以采用增加表空间的数据文件容量,也可以增加数据文件,方法有如下几种:
1.给表空间增加数据文件
ALTER TABLESPACE "表空间的名字" ADD DATAFILE
'表空间的数据文件路径' SIZE 50M;
&nb
.Net framework4.0安装失败
yangjuanjava
.net windows
上午的.net framework 4.0,各种失败,查了好多答案,各种不靠谱,最后终于找到答案了
和Windows Update有关系,给目录名重命名一下再次安装,即安装成功了!
下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=17113
方法:
1.运行cmd,输入net stop WuAuServ
2.点击开