【1】循序渐进学 Zabbix :初识与基础依赖环境搭建( LNMP )
运维监控是一个很大的话题,在这一块个人接触的比较突出的服务主要有 Nagio 和 Zabbix 两款。而这几年跳过的公司中,Zabbix 一直都是首选且唯一选择,Nagios 没遇到。
个人算是从 2.2 开始接触的 Zabbix ,但那时我只是 Help desk,主要工作是接受监控告警和将故障通知到指定的人,而不是配置服务。如今已经或多或少用了两三年 Zabbix 了,版本也迭代到了 3.4.10。
最近恰逢换完工作,公司的很多东西需要从零开始搭建,所以准备抽空写一些东西,一是作为笔记保留,二是给准备做运维或者刚学习运维的兄弟做个参考。
当然,网上的资料很多,但是很多都讲的太详细了,对于我这种比较菜的一是看一半就想睡觉,二是抓不住重点,于是我把自己的学习经过写下来,内容可能不深,但勉强够用。标题取名 "循序渐进学 Zabbix",算是希望能够在写的过程中慢慢完善自己。
最后,文中可能有写的有问题的地方,希望各位能够指出。当然,如果你觉得还不错,合你的口味,也希望你能够点赞支持,让我至少知道这些东西还是有人在认真看的~
网上对于 Zabbix 的解释很多,我这里挑简单的说:
1、它是一款开源,使用 C 语言编写的分布式监控服务,包含 Server 和 Agent 两个部分
2、在系统资源,服务状态性能监控等方面具有优异的表现
3、能够自定义监控模板,具有较高的定制性
4、能够将监控结果以图形化展示出来,对于需要出具报告的运维人员来说相当实用且友好等等等特点
...
主要的几个程序:
1、zabbix_server:zabbix 服务端核心服务,事务处理都在于它
2、zabbix_agentd: 客户端守护进程,此进程收集客户端数据,例如 CPU负载、内存、硬盘使用情况等
3、zabbix_get:主要用于测试监控项是否能够正常使用
4、zabbix_sender: 用于发送给 server 或者 proxy,通常用于耗时比较长的检查,避免超时
5、zabbix_proxy: 特殊的网络环境可以作为一个中转站,从 agent 到 proxy 再到 server 这样实现
...
原理图:上面说的太片面,于是决定画张图来简单说明一下它的主要工作方式!
Zabbix 本身可以直接使用自带的脚本运行,但是其 WEB 端是 PHP 写的,所以我们就需要搭建 LNMP 环境。
以下是我本机的虚拟机环境所选择的版本:
服务
|
版本
|
操作系统
|
CENTOS 7.5
|
NGINX
|
nginx-1.10.2
|
MySQL
|
percona-server-5.7.11-4( MySQL 的分支 )
|
PHP
|
php-7.0.30
|
虚拟机环境:
服务器
|
IP
|
配置
|
Zabbix Server
|
192.168.200.101
|
4G 内存
|
Zabbix Agent
|
192.168.200.102
|
4G 内存
|
特殊说明:本人比较推荐源码编译安装,很多东西路径自己定制,这应该算是一个运维需要具备的基础技能,虽然 Zabbix ,LNMP 环境都可以 yum 安装,很方便,但是个人极其不推荐!
原因:我身边很多同行包括我特别反感,你倒是舒舒服服想怎么来就怎么来,结果哪天你突然离职,别人接手你的锅还得一个一个机器的去梳理,又没文档,有的涉及到迁移的,麻烦的一批,因为谁也不知道你到底干了什么骚操作,接盘侠绝对在背地里不知道骂了你多少句CNM,DSB!
个人认为,规范化对于运维来说极其重要,运维你本身的很大一部分工作就是让公司的服务器规范化管理起来!
文中所以需要的安装包我都放到了百度网盘,需要的兄弟可以去下载:
链接:https://pan.baidu.com/s/14u6r5V7sELN8NNErGp48NA 密码:g9xy
所需安装包: 个人用到的比较多,常见的一些模块也都增加了
安装包
|
nginx-1.10.2.tar.gz
|
nginx-upload-module-2.2.zip
|
nginx-upstream-fair-master.zip
|
ngx_cache_purge-2.3.tar.gz
|
openssl-1.1.0c.tar.gz
|
pcre-8.39.tar.gz
|
zlib-1.2.8.tar.gz
|
目录说明:
用途
|
目录
|
安装包路径
|
/opt/packages/nginx
|
安装路径
|
/opt/services/nginx
|
日志路径
|
/opt/logs/nginx
|
备注:这些目录是个人的习惯,我把所有关于用户安装的东西都尽量限制在一个目录,方便管理
【1】创建相应的用户与目录:
# 创建目录
mkdir /opt/services
mkdir -p /opt/logs/nginx
mkdir -p /opt/packages/nginx # 创建监听用户
useradd www -s /sbin/nologin
【2】安装依赖:
yum -y install zip unzip gcc gcc-c++ automake autoconf libtool make glibc gd-devel pcre-devel libmcrypt-devel mhash-devel libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel libevent libevent-devel
【3】上传包到 /opt/packages/nginx 目录并解压编译安装:
# 解压安装包
cd /opt/packages/nginx tar -zxf nginx-1.10.2.tar.gz
unzip nginx-upload-module-2.2.zip
unzip nginx-upstream-fair-master.zip
tar -zxf ngx_cache_purge-2.3.tar.gz
tar -zxf openssl-1.1.0c.tar.gz
tar -zxf pcre-8.39.tar.gz
tar -zxf zlib-1.2.8.tar.gz # 编译安装
cd nginx-1.10.2 ./configure --prefix=/opt/services/nginx --user=www --group=www --with-http_realip_module --with-http_stub_status_module --with-stream --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module --with-http_mp4_module --with-http_realip_module --with-pcre=/opt/packages/nginx/pcre-8.39 --with-openssl=/opt/packages/nginx/openssl-1.1.0c --with-zlib=/opt/packages/nginx/zlib-1.2.8 --with-http_v2_module --with-ipv6 --with-http_image_filter_module --add-module=/opt/packages/nginx/nginx-upload-module-2.2 --add-module=/opt/packages/nginx/nginx-upstream-fair-master --add-module=/opt/packages/nginx/ngx_cache_purge-2.3 make && make install
【4】初始化配置 NGINX:
# 创建额外配置文件目录,方便管理
mkdir /opt/services/nginx/conf/vhosts # 简单的配置优化
vim /opt/services/nginx/conf/nginx.conf
配置文件内容:
user www www;
worker_processes 4;
error_log /opt/logs/nginx/error.log;
pid /opt/logs/nginx/nginx.pid;
worker_rlimit_nofile 65535; events {
use epoll;
worker_connections 65535;
} http {
include mime.types;
default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; access_log /opt/logs/nginx/access.log main; server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m; fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
fastcgi_param HTTP_PROXY ""; proxy_hide_header X-Powered-By;
proxy_hide_header X-Forwarded-For;
proxy_hide_header X-AspNet-Version;
proxy_hide_header X-AspNetMvc-Version;
proxy_hide_header Via;
proxy_hide_header X-Varnish;
proxy_hide_header Server; gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 5;
gzip_disable "MSIE [1-6]\.";
gzip_types text/plain text/css text/xml application/javascript application/x-javascript;
gzip_vary on; include vhosts/*.conf;
}
【5】添加到开机自启动:
# 授权
chmod 777 /etc/rc.local # 加入开机启动
echo '' >> /etc/rc.local
echo '# nginx startup' >> /etc/rc.local
echo '/opt/services/nginx/sbin/nginx &' >> /etc/rc.local
【6】NGINX 安装完成,接下来安装 MySQL!
所需安装包:
安装包
|
percona-server-5.7.11-4.tar.gz |
cmake-3.5.2.tar.gz |
boost_1_59_0.tar.gz |
目录说明:
用途
|
目录
|
安装包路径
|
/opt/packages/mysql
|
安装路径
|
/opt/services/mysql
|
日志路径
|
/opt/logs/mysql
|
【1】创建相应的用户与目录:
# 创建目录
mkdir -p /opt/logs/mysql
mkdir -p /opt/packages/mysql # 创建监听用户
useradd mysql -s /sbin/nologin
【2】安装依赖:
yum -y install gcc gcc-devel gcc-c++ gcc-c++-devel libaio-devel boost boost-devel autoconf* automake* zlib* libxml* ncurses-devel ncurses libgcrypt* libtool* cmake openssl openssl-devel bison bison-devel unzip numactl-devel net-snmp-devel net-snmp-utils readline*
【3】将安装包上传到 /opt/packages/mysql ,然后编译安装:安装时间较长,20 多分钟左右
# 解压
cd /opt/packages/mysql
tar -zxf cmake-3.5.2.tar.gz
tar -xzf boost_1_59_0.tar.gz
tar -zxf percona-server-5.7.11-4.tar.gz # 编译安装 CMAKE
cd cmake-3.5.2
./configure
gmake && make install # 查看安装结果
cmake --version # 编译安装 MySQL
cd ../percona-server-5.7.11-4 cmake . -DCMAKE_INSTALL_PREFIX=/opt/services/mysql -DWITH_BOOST=/opt/packages/mysql/boost_1_59_0/ -DMySQL_DataDIR=/opt/services/mysql/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_EDITLINE=bundled -DENABLED_LOCAL_INFILE=1 -DZLIB_INCLUDE_DIR:PATH=/usr/include -DENABLE_DOWNLOADS=1 make -j4 && make install # 授权目录
chown -R mysql:mysql /opt/logs/mysql # 配置 MySQL
vi /etc/my.cnf
内容如下:
[client]
port= 3306
socket=/opt/logs/mysql/mysql.sock [mysqld]
port=3306
datadir=/opt/services/mysql/data
basedir=/opt/services/mysql
socket=/opt/logs/mysql/mysql.sock character_set_server=utf8
user=mysql # 指定日志和pid位置
log-error=/opt/logs/mysql/mysql-error.log
pid-file=/opt/logs/mysql/mysqld.pid # 开启查询缓存,注意5.1版本如果报错的话,把下面一行注释掉
explicit_defaults_for_timestamp=true # 关闭符号链接支持
symbolic-links=0 # 不区分大小写
lower_case_table_names=1 # 禁用DNS解析
skip-name-resolve # INNODB重点优化参数:缓存用户表及索引数据,一般设置为系统内存的50%,但是得根据实际预留
innodb_buffer_pool_size=2000M # MyISAM重点优化参数:指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度
key_buffer_size=32M # 分配简单索引扫描,范围索引扫描,无索引全表扫描的表连接缓存的大小
join-buffer-size=2M # 在每个connection(session)第一次需要这个buffer的时候,一次性分配设置的内存
sort-buffer-size=4M # 读查询操作所能使用的缓冲区大小,该参数对应的分配内存也是每连接独享
read_buffer_size=4M # 针对按某种特定顺序(如ORDER BY子句)输出的查询结果(默认256K)加速排序操作后的读数据,提高读分类行的速度
read_rnd_buffer_size=16M # MyISAM表发生变化时重新排序所需的缓冲
myisam_sort_buffer_size=128M # 关闭query-cache
query-cache-size=0
query_cache_type=0 # 临时HEAP数据表的最大长度
tmp_table_size=256M # 重新利用保存在缓存中线程的数量
thread_cache_size=64 # 开启慢日志查询
log-slow-admin-statements
slow-query-log=on
slow-launch-time=2
slow-query-log-file=/opt/logs/mysql/mysql-slow.log # 表描述符缓存大小,可减少文件打开/关闭次数
table-open-cache=512 # 设置最大连接(用户)数
max-connections=5000 # 某一客户端尝试连接此MySQL服务器,但是失败(如密码错误等等)5000次,则MySQL会无条件强制阻止此客户端连接
max_connect_errors=5000 # 不写入硬盘而是写入系统缓存
# 日志仍然会每秒flush到硬盘,所以你一般不会丢失超过1-2秒的更新,只会在整个操作系统挂了时才可能丢数据
innodb_flush_log_at_trx_commit=2 # 限制server接受的数据包大小
max_allowed_packet=300M # 设置编码格式
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server=utf8 # 忽略客户端字符集
skip-character-set-client-handshake # 跳过验证
skip-grant-tables
【4】初始化数据库:
/opt/services/mysql/bin/mysql_install_db --defaults-file=/etc/my.cnf --basedir=/opt/services/mysql --datadir=/opt/services/mysql/data --user=mysql
【5】添加服务启动脚本和环境变量:
# 创建启动方式
cp /opt/services/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod 700 /etc/init.d/mysqld
sed -i 's/^basedir=$/&\/opt\/services\/mysql/g' /etc/init.d/mysqld
sed -i 's/^datadir=$/&\/opt\/services\/mysql\/data/g' /etc/init.d/mysqld # 添加环境变量
echo "" >> /etc/profile
echo "# MySQL" >> /etc/profile
echo "export MYSQL_HOME=/opt/services/mysql" >> /etc/profile
echo 'export PATH=$PATH:${MYSQL_HOME}/bin' >> /etc/profile # 生效环境变量
source /etc/profile
【6】启动服务初始化用户:
# 启动服务
/etc/init.d/mysqld start # 登录 MySQL,之前配置文件有配置免认证
mysql # 设置数据库密码,执行以下 SQL 语句
update mysql.user set authentication_string=password('') where user='root' and Host = 'localhost';
quit; # 取消免密配置,重启数据库
sed -i 's%skip-grant-tables%#skip-grant-tables%g' /etc/my.cnf
/etc/init.d/mysqld restart # 登录数据库新建用户
mysql -uroot -p123456 # 执行以下 SQL 语句
alter user 'root'@'localhost' identified by '';
grant all on *.* to root@'%' identified by '' with grant option;
flush privileges;
quit;
【7】加入开机启动:
# 加入开机启动
echo '' >> /etc/rc.local
echo '# mysql startup' >> /etc/rc.local
echo '/etc/init.d/mysqld start &' >> /etc/rc.local
【8】至此 MySQL 5.7 安装配置完成,密码 123456,接下来安装 PHP!
所需安装包:
安装包
|
php-7.0.30.tar.gz |
libiconv-1.14.tar.gz |
目录说明:
用途
|
目录
|
安装包路径
|
/opt/packages/php
|
安装路径
|
/opt/services/php
|
日志路径
|
/opt/logs/php
|
【1】创建相应的用户与目录:
# 创建目录
mkdir -p /opt/logs/php/tmp
mkdir -p /opt/packages/php
chown -R 777 /opt/logs/php/tmp # 创建监听用户
useradd php -s /sbin/nologin
【2】安装依赖:
# 安装 epel
yum install -y epel-release # 安装依赖
yum -y install libmcrypt-devel mcrypt mhash gd-devel ncurses-devel libxml2-devel bzip2-devel libcurl-devel curl-devel libjpeg-devel libpng-devel freetype-devel net-snmp-devel openssl-devel libmcrypt-devel
【3】将安装包上传到 /opt/packages/php ,然后编译安装:
# 解压安装包
cd /opt/packages/php tar -zxf libiconv-1.14.tar.gz
tar -zxf php-7.0.30.tar.gz # 编译安装 Libiconv
cd libiconv-1.14/srclib
sed -i -e '/gets is a security/d' ./stdio.in.h
cd .. ./configure --prefix=/usr/local/libiconv make && make install # 编译安装 PHP
cd ../php-7.0.30 ./configure --prefix=/opt/services/php --with-config-file-path=/opt/services/php/etc --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir=/usr/local/libiconv --with-pcre-regex --with-zlib --with-bz2 --enable-calendar --with-curl --enable-dba --with-libxml-dir --enable-ftp --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-freetype-dir --enable-gd-native-ttf --with-mhash --enable-mbstring --with-mcrypt --enable-pcntl --enable-xml --disable-rpath --enable-shmop --enable-sockets --enable-zip --enable-bcmath --with-snmp --disable-ipv6 --with-gettext --enable-fpm --with-fpm-user=php --with-fpm-group=php --with-openssl make && make install
【4】配置 PHP:
# 复制配置文件
cd /opt/services/php/etc/
cp php-fpm.conf.default php-fpm.conf
cp /opt/packages/php/php-7.0.30/php.ini-production .
mv php.ini-production php.ini # 修改 php.ini 配置
sed -i 's#;date.timezone =#date.timezone = PRC#g' php.ini
sed -i 's#expose_php = On#expose_php = Off#g' php.ini
sed -i 's#^;cgi.fix_pathinfo=1#cgi.fix_pathinfo=1#g' php.ini
sed -i 's#disable_functions =#disable_functions =exec,system,eval,passthru,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,fsocket,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server#g' php.ini
sed -i 's#max_execution_time = 30#max_execution_time = 300#g' php.ini
sed -i 's#max_input_time = 60#max_input_time = 300#g' php.ini
sed -i 's#post_max_size = 8M#post_max_size = 24M#g' php.ini
sed -i 's#upload_max_filesize = 2M#upload_max_filesize = 4M#g' php.ini
sed -i 's#pdo_mysql.default_socket=#pdo_mysql.default_socket= /opt/logs/mysql/mysql.sock#g' php.ini
sed -i 's#mysqli.default_socket =#mysqli.default_socket = /opt/logs/mysql/mysql.sock#g' php.ini
sed -i 's#;session.save_path = "/tmp"#session.save_path = "/opt/logs/php/tmp"#g' php.ini # 修改 www.conf 配置
cd php-fpm.d/
cp www.conf.default www.conf
sed -i 's#;rlimit_files = 1024#rlimit_files = 65535#g' www.conf
sed -i 's#;listen.owner = php#listen.owner = www#g' www.conf
sed -i 's#;listen.group = php#listen.group = www#g' www.conf
sed -i 's#;listen.mode = 0660#listen.mode = 0660#g' www.conf
【5】配置启动脚本:
cp /opt/packages/php/php-7.0.30/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
【6】启动服务和开机自启动:
# 启动服务
/etc/init.d/php-fpm start # 加入开机启动
echo '' >> /etc/rc.local
echo '# php startup' >> /etc/rc.local
echo '/etc/init.d/php-fpm start &' >> /etc/rc.local
【7】至此,LNMP 环境都搭建完成,我们可以在 NGINX 中添加测试:
# 添加网站目录
mkdir /opt/services/website # 添加 PHP 测试页面
echo '<?php
> phpinfo();
> ?>' > /opt/services/website/index.php # 添加 Nginx 配置
vim /opt/services/nginx/conf/vhosts/php_test.conf
内容如下:
server {
listen 8080;
server_name 192.168.200.101;
access_log /opt/logs/nginx/test.log main;
index index.php index.html index.html;
root /opt/services/website; location / {
try_files $uri $uri/ /index.php?$args;
} location ~ .*\.(php)?$ {
expires -1s;
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}
}
【8】启动 Nginx 查看效果:
/opt/services/nginx/sbin/nginx
浏览器访问:
【9】此处,LNMP 环境检测没问题!
LNMP 网上的安装方式很多,也有一件安装包,我的方法仅供大家参考,下面附带一张安装下来的目录结构图,可以比较一下你的安装和我的安装的优缺点:
【2】循序渐进学 Zabbix :安装配置 Zabbix Server 服务端
【1】循序渐进学 Zabbix :初识与基础依赖环境搭建( LNMP )的更多相关文章
- 【2】循序渐进学 Zabbix:安装配置 Zabbix Server 服务端
上一篇 [1]循序渐进学 Zabbix :初识与基础依赖环境搭建( LNMP ) 安装 Zabbix Server 上篇我们在 192.168.200.101 上面安装了 Zabbix 所依赖的 LN ...
- 【3】循序渐进学 Zabbix:配置 Zabbix Web
上一篇 [2]循序渐进学 Zabbix:安装配置 Zabbix Server 服务端 配置 Zabbix Web 访问 上一篇完成了 Zabbix Server 的安装,但是那对于我们而言只是一个服务 ...
- Centos 基础开发环境搭建之Maven私服nexus
hmaster 安装nexus及启动方式 /usr/local/nexus-2.6.3-01/bin ./nexus status Centos 基础开发环境搭建之Maven私服nexus . 软件 ...
- zabbix基础之环境搭建
zabbix入门 环境部署 安装mysql #安装MySQL,官方的MySQL的repo源地址:http://repo.mysql.com/ #选择指定的MySQL版本,我这里选mysql5.7的版本 ...
- openstack(liberty):部署实验平台(一,基础网络环境搭建)
openstack项目的研究,到今天,算是要进入真实环境了,要部署实验平台了.不再用devstack了.也就是说,要独立controller,compute,storage和network了.要做这个 ...
- 精品教程--IOS零基础开发环境搭建
下载源码 技术要点: 1. 启动XCODE开始开发 2. IOS项目文件结构分析 3. 添加视图label组件 4. 程序的入口以及启动流程 5. 源码详细的中文注释 ...... 详细介绍: 1. ...
- Java基础知识➣环境搭建与类型整理(一)
概述 公司业务需要,产品既要有.NET又需要Java,没得选择,只能业余时间学习Java,整体觉得Java也.NET还是很相似的,只是语法有差别,差别也不是很大,这就将学习Java的基础知识整理下,以 ...
- Angular 2基础(一) 环境搭建
Angular2是一款开源JavaScript库,由Google维护,用来创建页面应用程序.正式发布于2016年9月,基于ES6开发. 一.准备工作 使用Angular2开发,需要预先做一些配置上的配 ...
- 从零到一创建ionic移动app:基础开发环境搭建
myAPP项目是在Ubuntu14.04下创建 本项目开发node 4.5/cordova 6/ionic 2 第一步 安装nodejs npm install -g n n v4.5.0 使 ...
随机推荐
- 在<img src="..." title="..."> 中使title的内容换行的方法
在<img src="..." title="...">中要使TITILE的内容换行,不能使用html标签,只能用ASCII码,方法如下: < ...
- 蓝桥杯 历届试题 PREV-1 核桃的数量
历届试题 核桃的数量 时间限制:1.0s 内存限制:256.0MB 问题描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑 ...
- 第三章 Java程序优化(待续)
字符串优化处理 String对象及其特点 String对象是java语言中重要的数据类型,但它并不是Java的基本数据类型.在C语言中,对字符串的处理最通常的做法是使用char数组,但这种方式的弊端是 ...
- spring @Resource与@Autowired注解详解
具有依赖关系的Bean对象,利用下面任意一种注解都可以实现关系注入: 1)@Resource (默认首先按名称匹配注入,然后类型匹配注入) 2)@Autowired/@Qualifier (默认按类型 ...
- javascript——屏蔽右键快捷菜单
JS: function menufalse(){ return false; } document.oncontextmenu = menufalse; //禁用快捷菜单 Jquery: $(&qu ...
- C语言学习笔记--多维数组和多维指针
1. 指向指针的指针 (1)指针的本质是变量,会占用一定的内存空间 (2)可以定义指针的指针来保存指针变量的地址值 (3)指针是个变量,同样也存在传值调用与传址调用 重置动态空间的大小 #includ ...
- 使用GSON来生成JSON数据
第二种方法: 当不需要显示某个属性时,在不需要显示出的属性前加transient关键字即可满足 使用gson来解析 使用gson解析 带日期转换 集合类解析:gson中的数组与java中集合类都是对应 ...
- springmvc 注解式开发 接收请求参数
1.校正请求参数名: 2.以对象形式整体接收 3.路径变量:
- [patl2-001]紧急救援
解题关键:最短路的变形. 1.按顶点存储,$O(n^2)$ #include<cstdio> #include<cstring> #include<algorithm&g ...
- 数据存储的两种方式:Cookie 和Web Storage(转)
数据存储的两种方式:Cookie 和Web Storage 数据存储的两种方式:Cookie 和Web Storage 1.Cookie Cookie的作用就像你去超市购物时,第一次给你办张购物卡 ...