标签归档:linux

Linux下的ip命令

Linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig是net-tools中已被废弃使用的一个命令,许多年前就已经没有维护了。

Linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig是net-tools中已被废弃使用的一个命令,许多年前就已经没有维护了。iproute2套件里提供了许多增强功能的命令,ip命令即是其中之一。

Net tools vs Iproute2

要安装ip,请点击这里下载iproute2套装工具 。不过,大多数Linux发行版已经预装了iproute2工具。

你也可以使用git命令来下载最新源代码来编译:

  1. $ git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/shemminger/iproute2.git

iproute2 git clone

设置和删除Ip地址

要给你的机器设置一个IP地址,可以使用下列ip命令:

  1. $ sudo ip addr add 192.168.0.193/24 dev wlan0

请注意IP地址要有一个后缀,比如/24。这种用法用于在无类域内路由选择(CIDR)中来显示所用的子网掩码。在这个例子中,子网掩码是255.255.255.0。

在你按照上述方式设置好IP地址后,需要查看是否已经生效。

  1. $ ip addr show wlan0

set ip address

你也可以使用相同的方式来删除IP地址,只需用del代替add。

  1. $ sudo ip addr del 192.168.0.193/24 dev wlan0

delete ip address

列出路由表条目

ip命令的路由对象的参数还可以帮助你查看网络中的路由数据,并设置你的路由表。第一个条目是默认的路由条目,你可以随意改动它。

在这个例子中,有几个路由条目。这个结果显示有几个设备通过不同的网络接口连接起来。它们包括WIFI、以太网和一个点对点连接。

  1. $ ip route show

ip route show

假设现在你有一个IP地址,你需要知道路由包从哪里来。可以使用下面的路由选项(译注:列出了路由所使用的接口等):

  1. $ ip route get 10.42.0.47

ip route get

更改默认路由

要更改默认路由,使用下面ip命令:

  1. $ sudo ip route add default via 192.168.0.196

default route

显示网络统计数据

使用ip命令还可以显示不同网络接口的统计数据。

ip statistics all interfaces

当你需要获取一个特定网络接口的信息时,在网络接口名字后面添加选项ls即可。使用多个选项-s会给你这个特定接口更详细的信息。特别是在排除网络连接故障时,这会非常有用。

  1. $ ip -s -s link ls p2p1

ip link statistics

ARP条目

地址解析协议(ARP)用于将一个IP地址转换成它对应的物理地址,也就是通常所说的MAC地址。使用ip命令的neigh或者neighbour选项,你可以查看接入你所在的局域网的设备的MAC地址。

  1. $ ip neighbour

ip neighbour

监控netlink消息

也可以使用ip命令查看netlink消息。monitor选项允许你查看网络设备的状态。比如,所在局域网的一台电脑根据它的状态可以被分类成REACHABLE或者STALE。使用下面的命令:

  1. $ ip monitor all

ip monitor all

激活和停止网络接口

你可以使用ip命令的up和down选项来激某个特定的接口,就像ifconfig的用法一样。

在这个例子中,当ppp0接口被激活和在它被停止和再次激活之后,你可以看到相应的路由表条目。这个接口可能是wlan0或者eth0。将ppp0更改为你可用的任意接口即可。

  1. $ sudo ip link set ppp0 down
  2. $ sudo ip link set ppp0 up

ip link set up and down

获取帮助

当你陷入困境,不知道某一个特定的选项怎么用的时候,你可以使用help选项。man页面并不会提供许多关于如何使用ip选项的信息,因此这里就是获取帮助的地方。

比如,想知道关于route选项更多的信息:

  1. $ ip route help

ip route help

小结

对于网络管理员们和所有的Linux使用者们,ip命令是必备工具。是时候抛弃ifconfig命令了,特别是当你写脚本时。

两台nginx实现https负载均衡

现在网络完全越来越受到重视, 因此https也是大势所趋, 以往nginx都是工作在http方式下, 其实nginx在https下工作也挺好的。 这里将分步骤的逐步实现一套采用nginx, haproxy, keepalived实现的https系统, 并且系统没有单点故障, 基本适应中小系统的安全需要。

1. Nginx https安装    这个文章主要是安装支持https的nginx, 源代码装过程

2. https安装(2)nginx配置   继承上一个文章, 记录配置过程, 然后实现https服务

本文继承前两个文章, 记录通过nginx实现https的功能, 并且通过haproxy将两台nginx的https进行整合, 统一对外提供服务。

但是本文的方法, 在haproxy上仍然存在单点故障, 下一篇文章, 将修正这个错误

 

本文记录详细的安装过程, 供大家参考。

 一. 准备linux操作系统

本文的nginx和haproxy都是在linux下进行的安装与测试, 因此需要linux计算机。

我们采用vmware作为虚拟机软件, 采用下面的已经安装好的虚拟机镜像做为操作系统。 这样节省了安装时间。

链接:http://pan.baidu.com/s/1nutqTkP 密码:f4bh

  1. 安装好vmware软件, 这个百度上搜索, 或者参考:     虚拟机vmware新手使用教程
  1. 下载好虚拟机软件后解压缩到一个比较大的硬盘空间, 记录下目录地址
  2. 启动虚拟机软件, 在文件菜单中, 选择打开按钮, 然后选择好, 您刚才解压缩的文件目录, 选择其中*.vmx文件, 然后打开
  3. 选择运行这个软件, 最后您可以开始这个虚拟机了, 虚机运行后, 最后进入登录界面, 在登录界面中输入 root作为用户名, 密码为 thoughtpolice   或者root

或者查看README-vmware-image.txt 文件

  1. 进入虚拟机后, 使用 ifconfig命令, 检查一下 虚拟机是否网络已经正确启动, 并且查看一下, 这个虚拟机的ip地址
  2. 运行 setup命令, 进入防火墙选项 关闭防火墙
  3. 安装xshell软件, 在xshell软件里面配置一个连接到您虚拟机的连接, 然后连接上。这样方便后续的操作等
  4. 安装xftp软件  方便上传相关文件到服务器。

上述软件, 客户baidu搜索相关安装方法等。

二. nginx下https的安装和配置

  1. 安装https01服务器

本 文目标是测试多机负载均衡下https的工作状况, 因此我们需要安装至少2台nginx服务器, 并且每个服务器都要支持https协议, 因此我们需 要首先安装1台nginx, 然后在配置相关的https服务, 测试没问题了, 然后在站另外一台nginx, 最后安装负载均衡软件。

关于nginx的安装, https的安装, https的配置请参考下面的文章进行

Nginx https安装

https安装(2)nginx配置

参考上面文章, 安装配置完成nginx的https后, 进行测试一下, 配置文件为:

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
  
    server {
        listen       80;
        server_name  test.iigrowing.cn;
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
    server {
        listen       443;
        server_name  test.iigrowing.cn;
        ssl                  on;
        ssl_certificate      /etc/pki/tls/certs/rsyslog.crt;
        ssl_certificate_key  /etc/pki/tls/certs/rsyslog.key;
        ssl_session_timeout  5m;
        ssl_protocols  SSLv2 SSLv3 TLSv1;
        ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers   on;
        location / {
            root   html;
            index  index.html index.htm;
        }
   }  
}
  1. 测试https01服务器

进入下图目录中, 编辑hosts文件, 添加一行记录

192.168.128.138  test.iigrowing.cn

另外, 请用您的正确ip地址替换上面的ip地址, 用您喜欢的域名替换测试的域名。 这里用域名就是方便, 啥域名或者使用ip不影响您的测试结果。

haproxy001

  1. 启动一个浏览器, 在浏览器里面输入 https://test.iigrowing.cn

然后, 应该能看到 正确的显示了额,

您也可用修改nginx的html目录下的 index.html文件的内容, 来仔细测试您的工作成果。

 

  1. 关闭这个https01服务器, 然后在vmware的虚拟机菜单中选择

haproxy002

最后在弹出菜单中选择  链接克隆选项  这样可以节省点磁盘空间。 虚拟机名称可为 https02

  1. 克隆完毕启动这个新的虚拟机。

启动虚拟机后, 要先登录, 然后立即检查是否网络启动正常, 以及网络的ip地址, 若是网络不正常。

请运行setup命令

haproxy003

之后选择这个

haproxy005

haproxy006

haproxy007

填写下面的信息

haproxy008

最后选择 保存退出, 然后运行下面的命令, 检查新网卡是否启动正常了

service network restart              启动网卡(英文部分为命令)

Ifconfig                           检查网络是否正常启动

  1. 在xshell中配置一个新的连接, 用这个配置连接到新的虚拟机
  2. 进入/usr/local/nginx/sbin下, 运行./nginx 启动nginx, 然后测试这个https是否正常工作了。

 

到此我们准备好了,两个有https功能的nginx, 另外两个nginx的证书等信息都是完全一致的, 我们是采用虚拟机clone进行的。里面数据是一致的。

 

 三. 安装haproxy

关于haproxy的功能, 安装配置详情请参考下面的文章

Haproxy学习笔记-源码安装

这里简单进行安装配置, 然后进行配置

  1. 下载软件源代码 wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.3.tar.gz

最后发现国外网站, 下载速度慢, 可以用本文提供的 下载好的版本

         haproxy-1.6.3.tar

  1. 下载本文提供的软件
  2. 启动xftp上传文件, 过程略
  3. 解压缩上传后的软件包
  4. 进入解压缩后的目录
  5. 运行make PREFIX=/usr/local/haproxy install  进行编译安装
  6. 最后执行 cd /usr/local/haproxy 目录
  7. 然后执行 mkdir conf  创建配置目录
  8. 进入文件目录, 执行vi haproxy.cfg  命令创建配置文件, 内容如下
global
    log 127.0.0.1 local0 info #[err warning info debug]
    maxconn 4096
    user root
    group root
    daemon
    nbproc 1
    pidfile /home/admin/haproxy/logs/haproxy.pid

defaults
    maxconn 2000
    contimeout 5000
    clitimeout 30000
    srvtimeout 30000

frontend https
    bind :443
    default_backend cluster_https

backend cluster_https
    mode tcp
    balance roundrobin
    server https01 192.168.128.136:443
    server https02 192.168.128.137:443

listen admin_stats
    bind 0.0.0.0:1080
    mode http
    log 127.0.0.1 local0 err
    stats uri /admin?stats
  1. 执行下面命令创建目录 mkdir -p  /home/admin/haproxy/logs/
  1. 执行  /usr/local/haproxy/sbin/haproxy  -f  /usr/local/haproxy/conf/haproxy.cfg
  2. 通过 netstat -ntlp  查看是否 启动了443端口
  3. 通过 http://test.iigrowing.cn:1080/admin?stats查看相关统计信息

haproxy009

 最后.  测试整个haproxy下的用nginx实现的https程序

  1. 登录https01服务器, 进入/usr/local/nginx/html 下  编辑html 修改内容, 添加些字符串 111111111111等, 这样方便我们了解到 我们访问的是https01机器
  2. 登录https02服务器, 进入/usr/local/nginx/html 下  编辑html 修改内容, 添加些字符串 222222222222等, 这样方便我们了解到 我们访问的是https01机器
  3. 启动firefox浏览器 输入 https://test.iigrowing.cn请确保协议时https, 另外域名解析到 haproxy的地址上。
  4. 在启动另外一个chrome浏览器, 然后同样输入上述的地址, 多次测试发现有时显示带 111有时显示带222的,测试基本正常

 

 

 

namedmanager一个用户管理bind的web gui

来源:互联网

namedmanager 作用

NamedManager 是一个基于 Web 的 DNS 管理系统,可用来添加、调整和删除 DNS 的 zones/records 数据,支持 Bind 作为后端的 DNS 服务,支持 IPv4 和 IPv6。

DNS 管理系统 NamedManager

项目主页:https://github.com/jethrocarr/namedmanager

namedmanager 软件安装方法

下载仓库地址

wget -O /etc/yum.repos.d/amberdms-c6-public.repo  http://repos.jethrocarr.com/config/centos/6/amberdms-c6-public.repo

 

安装 namedmanager 软件包

yum -y install namedmanager*

留意安装信息

BIND/NAMED CONFIGURATION

  1. NamedManager BIND components have been installed, you will need to install
  2. and configure bind/named to use the configuration file by adding the
  3. following to /etc/named.conf:
  4. #
  5. # Include NamedManager Configuration
  6. #
  7. include "/etc/named.namedmanager.conf";
  8. NAMEDMANAGER BIND CONFIGURATION
  9. You need to set the application configuration in /etc/namedmanager/config-bind.php

 

提示: 当前需要修改 named.conf , 添加 include "/etc/named.namedmanager.conf"; 语法, 另外 php 管理页面需要配置  /etc/namedmanager/config-bind.php 文件

参考主要配置文件与作用

Path Details
/etc/namedmanager/ Configuration directory for NamedManager
/etc/cron.d/namedmanager-bindNamedManager cronjobs
/etc/init.d/namedmanager_logpushBootscript for starting/stopping the log collector
/etc/named.confDefault name for your Bind name server configuration file.
/var/named/chroot/etc/named.conf using bind-chroot.

 

crond.d 下计划任务说明
/etc/cron.d/namedmanager-bind

  1. <span style="font-family:SimSun;"># check for new configuration every minute
  2. */1 * * * * root php -q /usr/share/namedmanager/bind/namedmanager_bind_configwriter.php >> /var/log/namedmanager_bind_configwriter
  3. # PHP slowly leaks memory, restart the process weekly to prevent it getting too large over months
  4. 01 01 * * 0 root /etc/init.d/namedmanager_logpush restart >> /dev/null 2>&1
  5. </span>

每分钟把 mysql 中的 DNS 数据数据刷新并记录到日志中
修改文件属性

  1. [root@station149 etc]# chkconfig  --level 35 namedmanager_logpush on
  2. [root@station149 etc]# chown named.root /etc/named.namedmanager.conf</span>

检测 namedmanager 配置文件是否正确方法

php -q /usr/share/namedmanager/bind/namedmanager_bind_configwriter.php

数据库配置

启动数据库
[root@station149 rpm]# service  mysqld start

  1. 初始化 MySQL 数据库: Installing MySQL system tables...
  2. OK
  3. Filling help tables...
  4. OK
  5. Please report any problems with the /usr/bin/mysqlbug script!
  6.                                                            [确定]
  7. 正在启动 mysqld:                                          [确定]
  8. </span>

更新 MySQL 管理员密码

 

  1. [root@station149 resources]# mysql
  2. mysql> update mysql.user set password=password('<span style="color:#ff0000;">mypasswd</span>') where user='root';
  3. Query OK, 3 rows affected (0.00 sec)
  4. Rows matched: 3  Changed: 3  Warnings: 0
  5. mysql> flush privileges;
  6. Query OK, 0 rows affected (0.00 sec)</span>

 

载入 namedmanager 表到数据库

  1. [root@station149 rpm]# cd /usr/share/namedmanager/resources/; ./autoinstall.pl
  2. autoinstall.pl
  3. This script setups the NamedManager database components:
  4.  * NamedManager MySQL user
  5.  * NamedManager database
  6.  * NamedManager configuration files
  7. THIS SCRIPT ONLY NEEDS TO BE RUN FOR THE VERY FIRST INSTALL OF NAMEDMANAGER.
  8. DO NOT RUN FOR ANY OTHER REASON
  9. Please enter MySQL root password (if any): <span style="color:#ff0000;">mypasswd
  10. </span>Searching ../sql/ for latest install schema...
  11. ../sql//version_20131222_install.sql is the latest file and will be used for the install.
  12. Importing file ../sql//version_20131222_install.sql
  13. Creating user...
  14. Updating configuration file...
  15. DB installation complete!
  16. You can now login with the default username/password of

 

BIND 服务器配置

安装 bind 服务

  1. [root@terry resources]# yum install -y bind-*

配置 bind

  1. [root@terry resources]# cp -p /etc/named.namedmanager.conf /var/named/chroot/etc/
  2. [root@terry resources]# vi /var/named/chroot/etc/named.conf

named.conf 文件内容

  1. options {
  2.         listen-on port 53 { <span style="color:#ff0000;">0.0.0.0</span>; };
  3. //      listen-on-v6 port 53 { ::1; };
  4.         directory       "/var/named";
  5.         dump-file       "/var/named/data/cache_dump.db";
  6.         statistics-file "/var/named/data/named_stats.txt";
  7.         memstatistics-file "/var/named/data/named_mem_stats.txt";
  8.         allow-query     {<span style="color:#ff0000;"> 0.0.0.0;</span> };
  9.         recursion yes;
  10.         dnssec-enable yes;
  11.         dnssec-validation yes;
  12.         dnssec-lookaside auto;
  13.         /* Path to ISC DLV key */
  14.         bindkeys-file "/etc/named.iscdlv.key";
  15.         managed-keys-directory "/var/named/dynamic";
  16. };
  17. logging {
  18.         channel default_debug {
  19.                 file "data/named.run";
  20.                 severity dynamic;
  21.         };
  22. };
  23. zone "." IN {
  24.         type hint;
  25.         file "named.ca";
  26. };
  27. include "/etc/named.rfc1912.zones";
  28. include "/etc/named.root.key";

启动 bind 服务

  1. [root@terry resources]# service named start

 

 

http + php 启动

[root@terry resources]# vi /etc/namedmanager/config-bind.php

  1. <?php
  2. /*
  3.         Sample Configuration File
  4.         Copy this file to config-settings.php
  5.         This file should be read-only to the user whom the bind configuration scripts are running as.
  6. */
  7. /*
  8.         API Configuration
  9. */
  10. $config["api_url"]              = <span style="color:#ff0000;">"http://192.168.48.141/namedmanager";</span>   // Application Install Location
  11. $config["api_server_name"]      = <span style="color:#ff0000;">"station141.vtest.com"; </span>       // [必须写主机名]
  12. $config["api_auth_key"]         = <span style="color:#ff0000;">"mykey";    </span>// [该密钥随意定义]
  13. /*
  14.   Log file to find messages from Named. Note that:
  15.   * File should be in syslog format
  16.   * Named Manager uses tail -f to read it, this can break with logrotate - make sure that either "copytruncate" mode is used, or tail processes are killed
  17. */
  18. $config["log_file"]             = "/var/log/messages";
  19. /*
  20.         Lock File
  21.         Used to prevent clashes when multiple instances are accidently run.
  22. */
  23. $config["lock_file"]            = "/var/lock/namedmanager_lock";
  24. $config["bind"]["version"]              = "9";                                  // version of bind (currently only 9 is supported, although others may work)
  25. $config["bind"]["reload"]               = "/usr/sbin/rndc reload";              // command to reload bind config & zonefiles
  26. $config["bind"]["config"]               = <span style="color:#ff0000;">"/var/named/chroot/etc/named.namedmanager.conf";</span>      // configuration file to write bind config too
  27. $config["bind"]["zonefiledir"]          = <span style="color:#ff0000;">"/var/named/chroot/var/named/";  </span>                     // directory to write zonefiles too
  28.                                                                                 // note: if using chroot bind, will often be /var/named/chroot/var/named/
  29. $config["bind"]["verify_zone"]          = <span style="color:#ff0000;">"/usr/sbin/named-checkzone"; </span>         // Used to verify each generated zonefile as OK
  30. $config["bind"]["verify_config"]        = <span style="color:#ff0000;">"/usr/sbin/named-checkconf"; </span>         // Used to verify generated NamedManager configuration
  31. /*
  32.         Unusual Compatibility Options
  33. */
  34. // Include a full path to the zonefiles in Bind - useful if Bind lacks a
  35. // directory configuration or you really, really to store you zonefiles
  36. // in a different location
  37. //
  38. // $config["bind"]["zonefullpath"]              = "on";
  39. // force debugging on for all users + scripts
  40. // (note: debugging can be enabled on a per-user basis by an admin via the web interface)
  41. //$_SESSION["user"]["debug"] = "on";
  42. ?>

创建 named.namedmanager.conf 文件, 文件

  1. [root@terry resources]# cp /etc/named.namedmanager.conf /var/named/chroot/etc/
  2. [root@terry resources]# chown named:named /var/named/chroot/etc/named.namedmanager.conf

 

启动 apache 服务器
[root@terry resources]# service  httpd restart
停止 httpd:                                               [确定]
正在启动 httpd:[Thu Jan 16 15:12:12 2014] [warn] Useless use of AllowOverride in line 11 of /etc/httpd/conf.d/namedmanager.conf.
[确定]
启动网页服务器  http://192.168.48.141/namedmanager 进行登录测试 (默认 setup/setup123)

 

参考图形配置方法

选择 configuration ,
填写 管理员 email (terry@station141.vtest.com)
填写 ADMIN_API_KEY (之前 /var/named/chroot/etc/named.namedmanager.conf 中定义的密钥)

选择 Domains/zones -> View Domains  通过 Add New Domain 添加一个新的域

添加域过程中

配置 DNS FQDN 为当前域中的 DNS 服务器主机名

选择服务器类型, [API]

再次填写 ADMIN_API_KEY 密钥

定义当期主机为 DNS 主服务器

确保最后绿色部分为配置文件同步中, 假设非绿色显示, 则需要进一步排错

参见下图, 域被增加


添加主机 A 记录方法

 

再次添加反向解析域

添加反向解析 PTR 记录方法

 

mybatis集成spring的事务管理

第一 创建一个测试实体

  1. public class Order {
  2.     private int id;
  3.     private String orderName;
  4.     public Order(String orderName) {
  5.         this.orderName = orderName;
  6.     }
  7.     public int getId() {
  8.         return id;
  9.     }
  10.     public void setId(int id) {
  11.         this.id = id;
  12.     }
  13.     public String getOrderName() {
  14.         return orderName;
  15.     }
  16.     public void setOrderName(String orderName) {
  17.         this.orderName = orderName;
  18.     }
  19. }

第二 创建映射器以及对应的xml

只是做了一个简单的订单映射

Java代码  收藏代码
  1. public interface OrderMapper {
  2.     void insertOrder(Order order);
  3. }

 

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="com.sagaware.mapper.OrderMapper">
  5. <!-- 开启缓存 -->
  6.   <cache />
  7.   <insert id="insertOrder" parameterType="Order" keyProperty="id"        useGeneratedKeys="true">
  8.     insert into tb_order(name) values (#{orderName})
  9.   </insert>
  10. </mapper>

第三步 写一个service类

  1. @Service("orderService")
  2. public class OrderService {
  3.     @Autowired
  4.     private OrderMapper mapper;
  5.     /**
  6.      * 事务处理必需抛出异常 spring 才会帮事务回滚
  7.      * @param orders
  8.      */
  9.     @Transactional
  10.     public void insertOrder(List<Order> orders) {
  11.         for(int i = 0 ; i < orders.size() ; i++) {
  12.             if(i < 2) {
  13.                 mapper.insertOrder(orders.get(i));
  14.             } else {
  15.                 throw new RuntimeException();
  16.         <pre name="code" class="java"></pre>    }
  17. <br>        }
  18. <br>    }
  19. <br>

第四部 也就是重点,配置spring配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
  4.     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
  5.     xmlns:context="http://www.springframework.org/schema/context"
  6.     xsi:schemaLocation="
  7.      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
  8.      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  9.      http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
  10.      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  11.      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
  12.     <!-- 数据源 -->
  13.     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  14.         <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
  15.         <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"></property>
  16.         <property name="user" value="root"></property>
  17.         <property name="password" value="root"></property>
  18.     </bean>
  19.     <!-- 开启注解配置 -->
  20.     <context:annotation-config />
  21.     <!-- 扫描service层 -->
  22.     <context:component-scan base-package="com.sagaware.service" />
  23.     <!-- 开启事务注解驱动 -->
  24.     <tx:annotation-driven />
  25.     <!-- 事务管理器 -->
  26.     <bean id="transactionManager"
  27.         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  28.         <property name="dataSource" ref="dataSource" />
  29.     </bean>
  30.     <!-- 创建SqlSessionFactory -->
  31.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  32.         <property name="dataSource" ref="dataSource" />
  33.         <property name="typeAliasesPackage" value="com.sagaware.entity" />
  34.     </bean>
  35.     <!-- 自动扫描映射器 -->
  36.     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  37.         <property name="basePackage" value="com.sagaware.mapper" />
  38.     </bean>
  39. </beans>

最后 写一个测试类

  1. public class Main {
  2.     public static void main(String[] args) {
  3.         ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  4.         OrderService service = (OrderService) context.getBean("orderService");
  5.         System.out.println(service);
  6.         List<Order> orders = new ArrayList<Order>();
  7.         for(int i = 0 ; i < 5 ; i++) {
  8.             Order order = new Order("订单" + i);
  9.             orders.add(order);
  10.         }
  11.         service.insertOrder(orders);
  12.     }
  13. }

Java Service Wrapper实践

当我们用JAVA来写后台服务器的时候,当服务器启动务必会出现一个黑框框。为了消除这个黑框框以及黑框框带来的一些不利条件,使用Java Service Wrapper将其制作成标准的WINDOWS NT服务是有必要的。

很久前就使用JAVA写了一个后台服务器,基于MINA框架的。并且一直部署运行于服务器中,当然有一个黑框框。

就正常运行而言,此种运行方式没有任何问题。

但是就这运行期间出现的一些问题:

1,服务器问题重启后,每次都要登录远程将服务器打开,即使我已经配置了开机自启动,但是由于黑框框是基于界面运用的,每次必须要完成系统启动画面之后该黑框框才能启动。所以即使设置成了开机自启动,每次服务器维护重启后,都需要登录一下远程出发系统加载。

2,有个黑框框总显低端些,并且容易不小心被关闭。

基于以上问题,加之以前就对Java Service Wrapper有所涉猎,但并未实践,所以利用一点时间来将服务器打包成WINDOWS NT服务。

关于Java Service Wrapper的介绍在此就不鳌诉了,http://wrapper.tanukisoftware.com/doc/english/download.jsp

本人最简单的了解,就是将JAVA应用打包成标准的WINDOS(当然也包含linux,在此仅以windows为例)服务。

Java Service Wrapper的Standard,Professional版本是需要license的,通俗的说是要收费,但是Community版本不需要,至于版本之间的区别我想对我影响不大,所以没有深究。就用Community版本吧。

下载下来后解压:

图一

我现有的项目很简单:

图二

server-server-1.0.0-release.jar是还行文件,libs/下是运行时所需要的依赖包,log是日志保存目录,conf是配置文件目录。

要使用Java Service Wrapper首先需要

(1)将图一中lib目录下的wrapper.dll、wrapper.jar拷贝到图二中的libs下。

(2)将图一中bin目录下的wrapper.exe文件拷贝到图二中当前目录下,该文件是将java应用打包成对应平台服务的可执行文件

(3) 将图一中src/conf目录下的wrapper.conf.in文件拷贝到图二中conf下并将.in后缀去掉,wrapper.conf.in文件是 一个标准的配置模板,用来配置Java Service Wrapper的,配置的内容就是项目目录结构、依赖关系、启动、jvm性能、日志、异常处理等等,稍微看一下应该就很容易理解。

(4)将图一中src/bin目 录下的AppCommand.bat.in文件拷贝到图二中的当前目录下并将.in后缀去掉。该文件是一个基于命令行的可执行文件,可以用于对相应的服务 执行start,install,uninstall,pause,resume,stop等命令。

完成以上操作后,我的项目目录如下:

具体目录结构:

+conf

-wrapper.conf

+libs

-wrapper.dll

-wrapper.jar

+log

AppCommand.bat

server-server-1.0.0-release.jar

wrapper.exe

接下来也是最重要的一步就是配置wrapper.conf文件

主要修改的有以下几点;

(1)类加载路径Java Classpath

# Java Classpath (include wrapper.jar)  Add class path elements as
#  needed starting from 1
wrapper.java.classpath.1=server-server-1.0.0-release.jar
wrapper.java.classpath.2=libs/wrapper.jar

(2)动态库加载路径Java Library Path

# Java Library Path (location of Wrapper.DLL or libwrapper.so)
wrapper.java.library.path.1=libs

(3)需要运行的应用主类以及启动参数Application parameters

wrapper.app.parameter.1=cn.iever.wxh.yjserver.server.App     //我的应用主类
wrapper.app.parameter.2=-h120                                          //应用参数

(4)日志输出文件Log file to use for wrapper output logging.

# Log file to use for wrapper output logging.
wrapper.logfile=log/wrapper.log

(5)服务描述Wrapper Windows NT/2000/XP Service Properties

# Name of the service
wrapper.name=SmartHome

# Display name of the service
wrapper.displayname=Smart Home Service

# Description of the service
wrapper.description=Yong Jing Smart Home Service

wrapper的配置文件模板中给出的其他配置我基本采用默认,还没有深入去对各个配置信息进行研究,但是以上配置已经可以基本符合我的需求。

接下来需要修改一下AppCommand.bat文件

主要将文件内容中的set _WRAPPER_CONF="conf/%_WRAPPER_BASE%.conf"进行修改,即设定配置文件所以在路径。

 

到此一切准备工作以及配置也都完成了。

打开cmd执行AppCommand.bat install命令安装服务

同时相应的服务我们已经可以在系统服务中查询到

 

同理我们执行AppCommand.bat stop/remove/pause等命令也都可以对该服务进行操作,当然也可以执行在系统服务中对服务进行操作。

 

至此我就使用Java Service Wrapper将我的java应用打包成了后台服务。

当然实践是完成了,关于Java Service Wrapper还有其他一些东西需要继续深入研究 尤其是关于wrapper.conf文件的配置。

 

来源:http://my.oschina.net/yjwxh/blog/260835