??xml version="1.0" encoding="utf-8" standalone="yes"?>
现在来讲一下如何到服务器上?Data Source q行配置Q?/p>
服务器: Tomcat 7
数据库:MySQL
1Q将下面的代码添加到Tomcat服务器上conf/context.xml中的<Context></Context>标签?/span>
<Resource name="jdbc/shopping" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" password="root" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/shopping" />
上下文context.xml中的参数的解析如下:
其中的name属性是数据源名Uͼ通常采取jdbc/**.
driverClassName属性是驱动E序名称?/span>
usernameQpasswordQ数据库名称和密?/span>
url:讉K的数据库路径。其中url的内容组成解析上博客中已经分析
maxActive属性是q发q接的最大数。设|ؓ0则无限制?/span>
maxWait属性是{待q接的最大连接的旉?/span>
maxIdle属性是q接池中I闲的连接的个数?/span>
2. 修改web.xml
打开%TOMCAT_HOME%\conf\web.xml,?lt;/web-app>的前面添加以下内容:
<description>MySQL Test App</description> <resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/shopping</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
3:建立试文g
test.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <sql:query var="rs" dataSource="jdbc/shopping"> select id, name, normalprice from product </sql:query> <html> <head> <title>DB Test</title> </head> <body> <h2>Results</h2> <c:forEach var="row" items="${rs.rows}"> name ${row.name}<br/> normalprice ${row.normalprice}<br/> </c:forEach> </body> </html>
4.djar?nbsp;
JDBC驱动E序mysql-connector-java-5-bin.jar攄?TOMCAT_HOME%\lib和应用的WEB-INF\lib下,复制 jstl.jar ?span class="Apple-converted-space"> standard.jar ?你的 WEB-INF/lib
目录.
5Q配|名Uname="jdbc/mldn"可以LQ配|完成后Q需要通过名称查找的方式,L到数据源Q本CZ代码q用的Tomcat服务?所以在查找旉要对名称q行定位Qjava:comp/env
<%@ page import="java.sql.*"%> <%@ page import="javax.sql.*"%> <%@ page import="javax.naming.*"%> <%! final String JNDINAME = "java:comp/env/jdbc/shopping" ; %> <% Connection conn = null ; try { // 初始化查扑֑名空?/span> Context ctx = new InitialContext() ; // 扑ֈDataSource DataSource ds = (DataSource)ctx.lookup(JNDINAME) ; conn = ds.getConnection() ; } catch(Exception e) { System.out.println(e) ; } %> <%=conn%> <% // 连接重新放回到池中 conn.close() ; %>
配置spring
配置spring <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"><value>java:comp/env/jdbc/xxx</value></property> </bean>
Linux双网卡绑定实现就是用两块网卡虚拟成Z块网卡,q个聚合h的设备看h是一个单独的以太|接口设备,通俗点讲是两块|卡h相同的IP地址而ƈ行链接聚合成一个逻辑链\工作。其实这?技术在Sun和Cisco中早已存在,被称为Trunking和Etherchannel技术,在Linux?.4.x的内怸也采用这q种技术,被称为bonding?什么是bonding需要从|卡的?promisc)模式说v。我们知道,在正常情况下Q网卡只接收目的g地址(MAC Address)是自wMac的以太网帧,对于别的数据帧都滤掉Q以减轻驱动E序的负担。但是网卡也支持另外一U被UCؓhpromisc的模式,可以接收|络上所有的帧,bonding也运行在q个模式下,而且修改了驱动程序中的mac地址Q将两块|卡的Mac地址Ҏ相同Q可以接收特定mac的数据。然后把相应的数据传送给bond驱动E序处理?/font>
BONDING_OPTS参数解释
此参数用于指定网卡绑定时的属性,以下是对常用参数q行的解释:
miimon参数Q指定网卡故障时的切换时间间隔以ms为单位?/span>
primary参数Q指定默认的ȝ卡设备?/span>
mode参数Q?/span>
0Q轮询模式,所l定的网卡会针对讉K以轮询算法进行^分?/span>
1Q高可用模式Q运行时只用一个网卡,其余|卡作ؓ备䆾Q在负蝲不超q单块网卡带宽或压力时徏议用?/span>
2Q基?/span>HASH法的负载均衡模式,|卡的分按?/span>xmit_hash_policy?/span>TCP协议层设|来q行HASH计算分流Q各种不同处理来源的访问都量在同一个网卡上q行处理?/span>
3Q广播模式,所有被l定的网卡都得到相同的数据Q一般用于十分特D的|络需求,如需要对两个互相没有q接的交换机发送相同的数据?/span>
4Q?/span>802.3ab负蝲均衡模式Q要求交换机也支?/span>802.3ab模式Q理Z服务器及交换机都支持此模式时Q网卡带宽最高可以翻?/span>(如从1Gbpsd2Gbps)
5Q适配器输载均衡模式,输出的数据会通过所有被l定的网卡输出,接收数据时则只选定其中一块网卡。如果正在用于接收数据的|卡发生故障Q则由其他网卡接,要求所用的|卡及网卡驱动可通过ethtool命o得到speed信息?/span>
6Q适配器输?/span>/输出负蝲均衡模式Q在"模式5"的基上,在接收数据的同时实现负蝲均衡Q除要求ethtool命o可得?/span>speed信息外,q要求支持对|卡MAC地址的动态修改功能?/span>
xmit_hash_policy参数(此参数对mode参数中的2?/span>4模式有媄?/span>)Q?/span>
layer1Q通过MAC地址q行HASH计算?/span>
计算公式Q?/span>(MACsrc?/span>MACdest)% Nslave
layer3+4Q通过TCP?/span>UDP端口及其IP地址q行HASH计算?/span>
计算公式Q?/span>((portsrc?/span>portdest)?/span>(IPsrc?/span>IPdest)) % Nslave
注意Q?/font>
mode参数中的0?/span>2?/span>3?/span>4模式要求交换机支?/span>"ports group"功能q能q行相应的设|,例如?/span>Cisco中要所q接的端口设?/span>"trunk group"?/span>
选择l定模式的徏?/font>
如果pȝ量不超q单个网卡的带宽Q请不要选择使用mode 1之外的模式,因ؓ负蝲均衡需要对量q行计算Q这对系l性能会有所损耗?/span>
mode 5?/span>mode 6只在交换Z支持"ports group"的情况下选用?/span>
如果交换机及|卡都确认支?/span>802.3abQ则实现负蝲均衡时尽量?/span>mode 4以提高系l性能
修改配置文g:hibernate.cfg.xml
Ҏq行环境d如下配置Q?/font>
1Q在容器中运行:
jta
2) 独立q行Q?/font>
thread
安装JBoss
[jboss@node1 ~]$ unzip jboss-4.0.5.GA.zip
[jboss@node1 ~]$ vi JBOSS_HOME/bin/run.conf
dJAVA_HOME,查找q将U色一?/font>
30 # be defined to $JAVA_HOME/bin/java, else $JAVA will be "java".
31 #
32 #JAVA_HOME="/opt/java/jdk"
替换?/font>
30 # be defined to $JAVA_HOME/bin/java, else $JAVA will be "java".
31 #
32 JAVA_HOME="/home/jboss/jdk1.5.0_14" //你的JDK安装路径
使用":wq"保存退?/font>
2.6 JBoss的启动和关闭
H口启动方式及后台启动方式(事实上,q种启动是默认执行了一个启动参数run.sh -c default,在JBOSS_HOME/server/中,有jboss的三U配|:all,default,minimal。你也可以自己复制其中的文g夹,命名q服务Q如QmyserverQ启动的时候只需要run.sh -c myserverp了。)Q?/font>
[jboss@node1 ~]$ JBOSS_HOME/bin/run.sh //启动后此H口不能再做他用
[jboss@node1 ~]$ JBOSS_HOME/bin/run.sh & //启动后此H口q可l箋q行其他操作
H口启动方式及后台启动方式的关闭Q?/font>
H口启动方式的,在此H口直接按“Ctrl+C”就行了
[jboss@node1 ~]$ JBOSS_HOME/bin/shutdown.sh -S //后台启动方式的关?/font>
注意Q上面所说的JBoss4.0.5.GA的运行与关闭方式Q由于JBoss的后l版本(4.2.0GA+Q做了安全修改,不像JBoss4.0.5.GA那样Q默认就是启动了全局暴露Q就是外IP都可以访问)Q而是需要增加一个启动参敎ͼ才能被外IP讉KQ因此启动命令变成:
[jboss@node1 ~]$ JBOSS_HOME/bin/run.sh -b 你的IP地址 //暴露此IP上的jboss服务Q如果一个机器上?以上的ip呢?如下命oQ暴露所有ip上的jboss服务
[jboss@node1 ~]$ JBOSS_HOME/bin/run.sh -b 0.0.0.0
随之关闭命名也就变成Q?/font>
[jboss@node1 ~]$ JBOSS_HOME/bin/shutdown.sh -S -s 你的IP地址
JBoss集群配置
3.3.1 加入集群Q?/font>
~辑JBOSS_HOME/server/all/deploy/jbossweb-tomcat50.sar/server.xml文gQ在jboss中,all的配|就是集配|,而jbossweb-tomcat50.sar是jboss4.0.5.GA的配|,?.2.0+里是jboss-web.deployerQ:
<Engine name="jboss.web" defaultHost="localhost">
... ...
</Engine>
?
<Engine name="jboss.web" defaultHost="localhost"
jvmRoute="node1">
... ...
</Engine>
<!--其中Qnode1点名Q与前面mod_jk那里的workers.properties里的节点对应-->
3.3.2 Ȁzmod_jk
~辑JBOSS_HOME/server/all/deploy/jbossweb-tomcat50.sar/META-INF/
jboss-service.xml文gQ?/font>
<attribute name="UseJK">fasle</attribute>
<!--改ؓ -->
<attribute name="UseJK">true</attribute>
3.3.3 配置应用集群
Session复制Q?/font>
修改YOURAPP/WEB-INF/web.xml文gQ在web.xml文g的开头增加distributableQ?/font>
<?xml version="1.0"?>
<web-app http://java.sun.com/xml/ns/j2ee="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<distributable/>
<!-- ... -->
</web-app>
配置Session复制模式Q?/font>
增加YOURAPP/WEB-INF/jboss-web.xml文gQ添加如下内容(q都是默认,具体的要Ҏ你的应用、运行环境来配置Q可参考《JBoss企业U应用服务^台群集指南》的英文官方文档Q:
<?xml version="1.0"?>
<jboss-web>
<replication-config>
<replication-trigger>SET_AND_NON_PRIMITIVE_GET</replication-trigger>
<replication-granularity>SESSION</replication-granularity>
<replication-field-batch-mode>true</replication-field-batch-mode>
</replication-config>
</jboss-web>
3.4 JBoss集群的启动与关闭
与前面的单个jboss启动和关闭一P只是在启动命令里的把default换成了allQ?/font>
[jboss@node1 ~]$ JBOSS_HOME/bin/run.sh -c all
3.5 JBoss集群下的应用E序部v及卸?/font>
JBoss集群里有个farming服务Q即热部|应用归档文?(例如, EAR? WAR 包或?SAR 包。不是文件夹后面加个".war"的那U)?/font>
你的应用程序打好EAR{归档文件包攑ֈ集群中Q意一台JBoss?[JBOSS_HOME/server/all/farm]文g夹中Q?JBoss会自动的复制此应用归档文件到集群中的其他节点q完成部|Ӏ?/font>
在运行的JBoss集群服务中,从Q何一个节点的farm/ 目录下删除应用,应用E序首先从本地卸载,然后再从集群中其他服务节点的farm目录删除应用?/font>
3.6 其他
上面所做的配置和修攚w是用Apache做前端HTTP负蝲的方式,如果使用其他g产品做前端负载(如:F5Q,则JBoss不需要修改,只需使用[JBOSS_HOME/bin/run.sh –c all]启动卛_。同Ӟ不管哪种方式QJBoss都是要在同一个网D中Q如Q?92.168.1.*Q?/font>
好了Q到此jboss的简单群集配|完毕。水qx限,错误之处误解。也希望大家的完善?/font>